duplicate-url-check.integ.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { Octokit } from '@octokit/action';
  2. import { beforeAll, describe, expect, test } from 'vitest';
  3. import { baseIssueMetadata, waitForClosedIssue } from './util';
  4. import { deleteIssue } from '../src/util/issues';
  5. const octokit = new Octokit();
  6. describe('Duplicate URL check', () => {
  7. beforeAll(async () => {
  8. const createdIssue = await octokit.issues.create({
  9. ...baseIssueMetadata,
  10. title: '[Test] Issue for duplicate checks',
  11. body: `This is used for testing the duplicate issue check.
  12. Please add https://foobar.com/!`,
  13. labels: ['enhancement', 'do-not-autoclose', 'test'],
  14. });
  15. console.log(`Created baseline issue #${createdIssue.data.number}`);
  16. return async () => {
  17. await octokit.issues.update({
  18. ...baseIssueMetadata,
  19. issue_number: createdIssue.data.number,
  20. state: 'closed',
  21. });
  22. await deleteIssue(octokit, createdIssue.data.node_id);
  23. };
  24. });
  25. test('Issue opened with duplicate URL gets automatically closed', async () => {
  26. const createdIssue = await octokit.issues.create({
  27. ...baseIssueMetadata,
  28. title: '[Test] This should be closed as a duplicate of an open issue',
  29. body: 'Please add https://foobar.com/!',
  30. labels: ['enhancement', 'test'],
  31. });
  32. const issue = await waitForClosedIssue(octokit, createdIssue.data.number);
  33. expect(issue.data.state).toStrictEqual('closed');
  34. expect(issue.data.state_reason).toStrictEqual('not_planned');
  35. expect(issue.data.labels.map((l: any) => l.name)).toContain('duplicate');
  36. await deleteIssue(octokit, issue.data.node_id);
  37. });
  38. });