From 315391885d67a4497f6772284b77c43f16b12a88 Mon Sep 17 00:00:00 2001 From: TESTELIN Geoffrey Date: Fri, 8 Oct 2021 19:19:07 +0200 Subject: [PATCH] feat: remove the exempt-all-milestones option BREAKING CHANGE: The option exempt-all-milestones was removed --- README.md | 116 +- .../constants/default-processor-options.ts | 5 +- __tests__/milestones.spec.ts | 3624 ++++------------- action.yml | 12 +- dist/index.js | 34 +- src/classes/issue.spec.ts | 5 +- src/classes/milestones.spec.ts | 1520 ++++--- src/classes/milestones.ts | 570 ++- src/enums/option.ts | 1 - src/interfaces/issues-processor-options.ts | 5 +- src/main.ts | 6 +- 11 files changed, 1752 insertions(+), 4146 deletions(-) diff --git a/README.md b/README.md index a25c234d..5e1644ae 100644 --- a/README.md +++ b/README.md @@ -28,55 +28,54 @@ You can find more information about the required permissions under the correspon Every argument is optional. -| Input | Description | Default | -| ------------------------------------------------------------------- | ------------------------------------------------------------------------ | --------------------- | -| [repo-token](#repo-token) | PAT for GitHub API authentication | `${{ github.token }}` | -| [days-before-stale](#days-before-stale) | Idle number of days before marking issues/PRs stale | `60` | -| [days-before-issue-stale](#days-before-issue-stale) | Override [days-before-stale](#days-before-stale) for issues only | | -| [days-before-pr-stale](#days-before-pr-stale) | Override [days-before-stale](#days-before-stale) for PRs only | | -| [days-before-close](#days-before-close) | Idle number of days before closing stale issues/PRs | `7` | -| [days-before-issue-close](#days-before-issue-close) | Override [days-before-close](#days-before-close) for issues only | | -| [days-before-pr-close](#days-before-pr-close) | Override [days-before-close](#days-before-close) for PRs only | | -| [stale-issue-message](#stale-issue-message) | Comment on the staled issues | | -| [stale-pr-message](#stale-pr-message) | Comment on the staled PRs | | -| [close-issue-message](#close-issue-message) | Comment on the staled issues while closed | | -| [close-pr-message](#close-pr-message) | Comment on the staled PRs while closed | | -| [stale-issue-label](#stale-issue-label) | Label to apply on staled issues | `Stale` | -| [close-issue-label](#close-issue-label) | Label to apply on closed issues | | -| [stale-pr-label](#stale-pr-label) | Label to apply on staled PRs | `Stale` | -| [close-pr-label](#close-pr-label) | Label to apply on closed PRs | | -| [exempt-issue-labels](#exempt-issue-labels) | Labels on issues exempted from stale | | -| [exempt-pr-labels](#exempt-pr-labels) | Labels on PRs exempted from stale | | -| [only-labels](#only-labels) | Only issues/PRs with ALL these labels are checked | | -| [only-issue-labels](#only-issue-labels) | Override [only-labels](#only-labels) for issues only | | -| [only-pr-labels](#only-pr-labels) | Override [only-labels](#only-labels) for PRs only | | -| [any-of-labels](#any-of-labels) | Only issues/PRs with ANY of these labels are checked | | -| [any-of-issue-labels](#any-of-issue-labels) | Override [any-of-labels](#any-of-labels) for issues only | | -| [any-of-pr-labels](#any-of-pr-labels) | Override [any-of-labels](#any-of-labels) for PRs only | | -| [operations-per-run](#operations-per-run) | Max number of operations per run | `30` | -| [remove-stale-when-updated](#remove-stale-when-updated) | Remove stale label from issues/PRs on updates | `true` | -| [remove-issue-stale-when-updated](#remove-issue-stale-when-updated) | Remove stale label from issues on updates/comments | | -| [remove-pr-stale-when-updated](#remove-pr-stale-when-updated) | Remove stale label from PRs on updates/comments | | -| [labels-to-add-when-unstale](#labels-to-add-when-unstale) | Add specified labels from issues/PRs when they become unstale | | -| [labels-to-remove-when-unstale](#labels-to-remove-when-unstale) | Remove specified labels from issues/PRs when they become unstale | | -| [debug-only](#debug-only) | Dry-run | `false` | -| [ascending](#ascending) | Order to get issues/PRs | `false` | -| [start-date](#start-date) | Skip stale action for issues/PRs created before it | | -| [delete-branch](#delete-branch) | Delete branch after closing a stale PR | `false` | -| [exempt-milestones](#exempt-milestones) | Milestones on issues/PRs exempted from stale | | -| [exempt-issue-milestones](#exempt-issue-milestones) | Override [exempt-milestones](#exempt-milestones) for issues only | | -| [exempt-pr-milestones](#exempt-pr-milestones) | Override [exempt-milestones](#exempt-milestones) for PRs only | | -| [exempt-all-milestones](#exempt-all-milestones) | Exempt all issues/PRs with milestones from stale | `false` | -| [exempt-all-issue-milestones](#exempt-all-issue-milestones) | Override [exempt-all-milestones](#exempt-all-milestones) for issues only | | -| [exempt-all-pr-milestones](#exempt-all-pr-milestones) | Override [exempt-all-milestones](#exempt-all-milestones) for PRs only | | -| [exempt-issue-assignees](#exempt-issue-assignees) | Assignees on issues exempted from stale | | -| [exempt-pr-assignees](#exempt-pr-assignees) | Assignees on PRs exempted from stale | | -| [exempt-all-issue-assignees](#exempt-all-issue-assignees) | Exempt all issues with assignees from stale | `false` | -| [exempt-all-pr-assignees](#exempt-all-pr-assignees) | Exempt all PRs with assignees from stale | `false` | -| [exempt-draft-pr](#exempt-draft-pr) | Skip the stale action for draft PRs | `false` | -| [enable-statistics](#enable-statistics) | Display statistics in the logs | `true` | -| [ignore-issue-updates](#ignore-issue-updates) | Any update (update/comment) can reset the stale idle time on the issues | `false` | -| [ignore-pr-updates](#ignore-pr-updates) | Any update (update/comment) can reset the stale idle time on the PRs | `false` | +| Input | Description | Default | +| ------------------------------------------------------------------- | ----------------------------------------------------------------------- | --------------------- | ------- | +| [repo-token](#repo-token) | PAT for GitHub API authentication | `${{ github.token }}` | +| [days-before-stale](#days-before-stale) | Idle number of days before marking issues/PRs stale | `60` | +| [days-before-issue-stale](#days-before-issue-stale) | Override [days-before-stale](#days-before-stale) for issues only | | +| [days-before-pr-stale](#days-before-pr-stale) | Override [days-before-stale](#days-before-stale) for PRs only | | +| [days-before-close](#days-before-close) | Idle number of days before closing stale issues/PRs | `7` | +| [days-before-issue-close](#days-before-issue-close) | Override [days-before-close](#days-before-close) for issues only | | +| [days-before-pr-close](#days-before-pr-close) | Override [days-before-close](#days-before-close) for PRs only | | +| [stale-issue-message](#stale-issue-message) | Comment on the staled issues | | +| [stale-pr-message](#stale-pr-message) | Comment on the staled PRs | | +| [close-issue-message](#close-issue-message) | Comment on the staled issues while closed | | +| [close-pr-message](#close-pr-message) | Comment on the staled PRs while closed | | +| [stale-issue-label](#stale-issue-label) | Label to apply on staled issues | `Stale` | +| [close-issue-label](#close-issue-label) | Label to apply on closed issues | | +| [stale-pr-label](#stale-pr-label) | Label to apply on staled PRs | `Stale` | +| [close-pr-label](#close-pr-label) | Label to apply on closed PRs | | +| [exempt-issue-labels](#exempt-issue-labels) | Labels on issues exempted from stale | | +| [exempt-pr-labels](#exempt-pr-labels) | Labels on PRs exempted from stale | | +| [only-labels](#only-labels) | Only issues/PRs with ALL these labels are checked | | +| [only-issue-labels](#only-issue-labels) | Override [only-labels](#only-labels) for issues only | | +| [only-pr-labels](#only-pr-labels) | Override [only-labels](#only-labels) for PRs only | | +| [any-of-labels](#any-of-labels) | Only issues/PRs with ANY of these labels are checked | | +| [any-of-issue-labels](#any-of-issue-labels) | Override [any-of-labels](#any-of-labels) for issues only | | +| [any-of-pr-labels](#any-of-pr-labels) | Override [any-of-labels](#any-of-labels) for PRs only | | +| [operations-per-run](#operations-per-run) | Max number of operations per run | `30` | +| [remove-stale-when-updated](#remove-stale-when-updated) | Remove stale label from issues/PRs on updates | `true` | +| [remove-issue-stale-when-updated](#remove-issue-stale-when-updated) | Remove stale label from issues on updates/comments | | +| [remove-pr-stale-when-updated](#remove-pr-stale-when-updated) | Remove stale label from PRs on updates/comments | | +| [labels-to-add-when-unstale](#labels-to-add-when-unstale) | Add specified labels from issues/PRs when they become unstale | | +| [labels-to-remove-when-unstale](#labels-to-remove-when-unstale) | Remove specified labels from issues/PRs when they become unstale | | +| [debug-only](#debug-only) | Dry-run | `false` | +| [ascending](#ascending) | Order to get issues/PRs | `false` | +| [start-date](#start-date) | Skip stale action for issues/PRs created before it | | +| [delete-branch](#delete-branch) | Delete branch after closing a stale PR | `false` | +| [exempt-milestones](#exempt-milestones) | Milestones on issues/PRs exempted from stale | | +| [exempt-issue-milestones](#exempt-issue-milestones) | Override [exempt-milestones](#exempt-milestones) for issues only | | +| [exempt-pr-milestones](#exempt-pr-milestones) | Override [exempt-milestones](#exempt-milestones) for PRs only | | +| [exempt-all-issue-milestones](#exempt-all-issue-milestones) | Exempt all issues with milestones from stale | | `false` | +| [exempt-all-pr-milestones](#exempt-all-pr-milestones) | Exempt all PRs with milestones from stale | | `false` | +| [exempt-issue-assignees](#exempt-issue-assignees) | Assignees on issues exempted from stale | | +| [exempt-pr-assignees](#exempt-pr-assignees) | Assignees on PRs exempted from stale | | +| [exempt-all-issue-assignees](#exempt-all-issue-assignees) | Exempt all issues with assignees from stale | `false` | +| [exempt-all-pr-assignees](#exempt-all-pr-assignees) | Exempt all PRs with assignees from stale | `false` | +| [exempt-draft-pr](#exempt-draft-pr) | Skip the stale action for draft PRs | `false` | +| [enable-statistics](#enable-statistics) | Display statistics in the logs | `true` | +| [ignore-issue-updates](#ignore-issue-updates) | Any update (update/comment) can reset the stale idle time on the issues | `false` | +| [ignore-pr-updates](#ignore-pr-updates) | Any update (update/comment) can reset the stale idle time on the PRs | `false` | ### List of output options @@ -122,7 +121,8 @@ You can fine tune which issues or pull requests should be marked as stale based - [any-of-labels](#any-of-labels) - [start-date](#start-date) - [exempt-milestones](#exempt-milestones) -- [exempt-all-milestones](#exempt-all-milestones) +- [exempt-all-issue-milestones](#exempt-all-issue-milestones) +- [exempt-all-pr-milestones](#exempt-all-pr-milestones) - [exempt-issue-assignees](#exempt-issue-assignees) - [exempt-pr-assignees](#exempt-pr-assignees) - [exempt-all-issue-assignees](#exempt-all-issue-assignees) @@ -412,25 +412,21 @@ Override [exempt-milestones](#exempt-milestones) but only to process the pull re Default value: unset -#### exempt-all-milestones +#### exempt-all-issue-milestones -If set to `true`, the issues or the pull requests with a milestone will not be marked as stale automatically. +If set to `true`, the issues with a milestone will not be marked as stale automatically. Priority over [exempt-milestones](#exempt-milestones). Default value: `false` -#### exempt-all-issue-milestones - -Override [exempt-all-milestones](#exempt-all-milestones) but only to exempt the issues with a milestone to be marked as stale automatically. - -Default value: unset - #### exempt-all-pr-milestones -Override [exempt-all-milestones](#exempt-all-milestones) but only to exempt the pull requests with a milestone to be marked as stale automatically. +If set to `true`, the pull requests with a milestone will not be marked as stale automatically. -Default value: unset +Priority over [exempt-milestones](#exempt-milestones). + +Default value: `false` #### exempt-issue-assignees diff --git a/__tests__/constants/default-processor-options.ts b/__tests__/constants/default-processor-options.ts index 37093192..0939ec10 100644 --- a/__tests__/constants/default-processor-options.ts +++ b/__tests__/constants/default-processor-options.ts @@ -35,9 +35,8 @@ export const DefaultProcessorOptions: IIssuesProcessorOptions = Object.freeze({ exemptMilestones: '', exemptIssueMilestones: '', exemptPrMilestones: '', - exemptAllMilestones: false, - exemptAllIssueMilestones: undefined, - exemptAllPrMilestones: undefined, + exemptAllIssueMilestones: false, + exemptAllPrMilestones: false, exemptAssignees: '', exemptIssueAssignees: '', exemptPrAssignees: '', diff --git a/__tests__/milestones.spec.ts b/__tests__/milestones.spec.ts index 3483d59d..b94a793e 100644 --- a/__tests__/milestones.spec.ts +++ b/__tests__/milestones.spec.ts @@ -49,9 +49,9 @@ describe('milestones options', (): void => { opts = {...DefaultProcessorOptions}; }); - describe('when all the issues and pull requests milestones should not exempt', (): void => { + describe('when all the issues milestones should not exempt', (): void => { beforeEach((): void => { - opts.exemptAllMilestones = false; + opts.exemptAllIssueMilestones = false; }); describe.each` @@ -84,17 +84,19 @@ describe('milestones options', (): void => { } ); - describe('when all the issues milestones are not configured to exempt', (): void => { + describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { beforeEach((): void => { - opts.exemptAllIssueMilestones = undefined; + opts.exemptMilestones = 'dummy-milestone'; }); describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${true} + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} + ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} + ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} `( 'when $name', ({isPullRequest, milestone, shouldStale}: ITestData): void => { @@ -119,19 +121,21 @@ describe('milestones options', (): void => { } ); - describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { + describe('when all the issues milestones should exempt a specific milestone', (): void => { beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone'; + opts.exemptIssueMilestones = 'dummy-issue-milestone'; }); describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} + ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} + ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} + ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} + ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} `( 'when $name', ({isPullRequest, milestone, shouldStale}: ITestData): void => { @@ -155,101 +159,23 @@ describe('milestones options', (): void => { }); } ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = 'dummy-issue-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} - ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = 'dummy-pull-request-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); }); - describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { + describe('when all the pull requests milestones should exempt a specific milestone', (): void => { beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; + opts.exemptPrMilestones = 'dummy-pull-request-milestone'; }); describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} + ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} + ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} + ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} + ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} `( 'when $name', ({isPullRequest, milestone, shouldStale}: ITestData): void => { @@ -273,102 +199,22 @@ describe('milestones options', (): void => { }); } ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = - 'dummy-issue-milestone1, dummy-issue-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} - ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = - 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); }); }); - describe('when all the issues milestones should not exempt', (): void => { + describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { beforeEach((): void => { - opts.exemptAllIssueMilestones = false; + opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; }); describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${true} + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} + ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} + ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} `( 'when $name', ({isPullRequest, milestone, shouldStale}: ITestData): void => { @@ -393,19 +239,22 @@ describe('milestones options', (): void => { } ); - describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { + describe('when all the issues milestones should exempt a specific milestone', (): void => { beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone'; + opts.exemptIssueMilestones = + 'dummy-issue-milestone1, dummy-issue-milestone2'; }); describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} + ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} + ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} + ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} + ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} `( 'when $name', ({isPullRequest, milestone, shouldStale}: ITestData): void => { @@ -429,101 +278,24 @@ describe('milestones options', (): void => { }); } ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = 'dummy-issue-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} - ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = 'dummy-pull-request-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); }); - describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { + describe('when all the pull requests milestones should exempt a specific milestone', (): void => { beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; + opts.exemptPrMilestones = + 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; }); describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} + ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} + ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} + ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} + ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} `( 'when $name', ({isPullRequest, milestone, shouldStale}: ITestData): void => { @@ -547,1191 +319,13 @@ describe('milestones options', (): void => { }); } ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = - 'dummy-issue-milestone1, dummy-issue-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} - ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = - 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - }); - - describe('when all the issues milestones should exempt', (): void => { - beforeEach((): void => { - opts.exemptAllIssueMilestones = true; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = 'dummy-issue-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = 'dummy-pull-request-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - - describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = - 'dummy-issue-milestone1, dummy-issue-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = - 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - }); - - describe('when all the pull requests milestones are not configured to exempt', (): void => { - beforeEach((): void => { - opts.exemptAllPrMilestones = undefined; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = 'dummy-issue-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} - ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = 'dummy-pull-request-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - - describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = - 'dummy-issue-milestone1, dummy-issue-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} - ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = - 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - }); - - describe('when all the pull requests milestones should not exempt', (): void => { - beforeEach((): void => { - opts.exemptAllPrMilestones = false; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = 'dummy-issue-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} - ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = 'dummy-pull-request-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - - describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = - 'dummy-issue-milestone1, dummy-issue-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} - ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = - 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - }); - - describe('when all the pull requests milestones should exempt', (): void => { - beforeEach((): void => { - opts.exemptAllPrMilestones = true; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = 'dummy-issue-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} - ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = 'dummy-pull-request-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - - describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = - 'dummy-issue-milestone1, dummy-issue-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} - ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = - 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); }); }); }); - describe('when all the issues and pull requests milestones should exempt', (): void => { + describe('when all the issues milestones should exempt', (): void => { beforeEach((): void => { - opts.exemptAllMilestones = true; + opts.exemptAllIssueMilestones = true; }); describe.each` @@ -1739,6 +333,554 @@ describe('milestones options', (): void => { ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${false} ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${true} + `( + 'when $name', + ({isPullRequest, milestone, shouldStale}: ITestData): void => { + beforeEach((): void => { + setTestIssueList(isPullRequest, milestone); + setProcessor(); + }); + + test(`should${ + shouldStale ? '' : ' not' + } be marked as stale`, async () => { + expect.assertions(3); + + await processor.processIssues(1); + + expect(processor.staleIssues.length).toStrictEqual( + shouldStale ? 1 : 0 + ); + expect(processor.closedIssues.length).toStrictEqual(0); + expect(processor.removedLabelIssues.length).toStrictEqual(0); + }); + } + ); + + describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { + beforeEach((): void => { + opts.exemptMilestones = 'dummy-milestone'; + }); + + describe.each` + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${false} + ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} + ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + `( + 'when $name', + ({isPullRequest, milestone, shouldStale}: ITestData): void => { + beforeEach((): void => { + setTestIssueList(isPullRequest, milestone); + setProcessor(); + }); + + test(`should${ + shouldStale ? '' : ' not' + } be marked as stale`, async () => { + expect.assertions(3); + + await processor.processIssues(1); + + expect(processor.staleIssues.length).toStrictEqual( + shouldStale ? 1 : 0 + ); + expect(processor.closedIssues.length).toStrictEqual(0); + expect(processor.removedLabelIssues.length).toStrictEqual(0); + }); + } + ); + + describe('when all the issues milestones should exempt a specific milestone', (): void => { + beforeEach((): void => { + opts.exemptIssueMilestones = 'dummy-issue-milestone'; + }); + + describe.each` + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${false} + ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} + ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} + ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} + ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + `( + 'when $name', + ({isPullRequest, milestone, shouldStale}: ITestData): void => { + beforeEach((): void => { + setTestIssueList(isPullRequest, milestone); + setProcessor(); + }); + + test(`should${ + shouldStale ? '' : ' not' + } be marked as stale`, async () => { + expect.assertions(3); + + await processor.processIssues(1); + + expect(processor.staleIssues.length).toStrictEqual( + shouldStale ? 1 : 0 + ); + expect(processor.closedIssues.length).toStrictEqual(0); + expect(processor.removedLabelIssues.length).toStrictEqual(0); + }); + } + ); + }); + + describe('when all the pull requests milestones should exempt a specific milestone', (): void => { + beforeEach((): void => { + opts.exemptPrMilestones = 'dummy-pull-request-milestone'; + }); + + describe.each` + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${false} + ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${false} + ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} + ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} + ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} + `( + 'when $name', + ({isPullRequest, milestone, shouldStale}: ITestData): void => { + beforeEach((): void => { + setTestIssueList(isPullRequest, milestone); + setProcessor(); + }); + + test(`should${ + shouldStale ? '' : ' not' + } be marked as stale`, async () => { + expect.assertions(3); + + await processor.processIssues(1); + + expect(processor.staleIssues.length).toStrictEqual( + shouldStale ? 1 : 0 + ); + expect(processor.closedIssues.length).toStrictEqual(0); + expect(processor.removedLabelIssues.length).toStrictEqual(0); + }); + } + ); + }); + }); + + describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { + beforeEach((): void => { + opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; + }); + + describe.each` + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${false} + ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} + ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + `( + 'when $name', + ({isPullRequest, milestone, shouldStale}: ITestData): void => { + beforeEach((): void => { + setTestIssueList(isPullRequest, milestone); + setProcessor(); + }); + + test(`should${ + shouldStale ? '' : ' not' + } be marked as stale`, async () => { + expect.assertions(3); + + await processor.processIssues(1); + + expect(processor.staleIssues.length).toStrictEqual( + shouldStale ? 1 : 0 + ); + expect(processor.closedIssues.length).toStrictEqual(0); + expect(processor.removedLabelIssues.length).toStrictEqual(0); + }); + } + ); + + describe('when all the issues milestones should exempt a specific milestone', (): void => { + beforeEach((): void => { + opts.exemptIssueMilestones = + 'dummy-issue-milestone1, dummy-issue-milestone2'; + }); + + describe.each` + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${false} + ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} + ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} + ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} + ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + `( + 'when $name', + ({isPullRequest, milestone, shouldStale}: ITestData): void => { + beforeEach((): void => { + setTestIssueList(isPullRequest, milestone); + setProcessor(); + }); + + test(`should${ + shouldStale ? '' : ' not' + } be marked as stale`, async () => { + expect.assertions(3); + + await processor.processIssues(1); + + expect(processor.staleIssues.length).toStrictEqual( + shouldStale ? 1 : 0 + ); + expect(processor.closedIssues.length).toStrictEqual(0); + expect(processor.removedLabelIssues.length).toStrictEqual(0); + }); + } + ); + }); + + describe('when all the pull requests milestones should exempt a specific milestone', (): void => { + beforeEach((): void => { + opts.exemptPrMilestones = + 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; + }); + + describe.each` + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${false} + ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${false} + ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} + ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} + ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} + `( + 'when $name', + ({isPullRequest, milestone, shouldStale}: ITestData): void => { + beforeEach((): void => { + setTestIssueList(isPullRequest, milestone); + setProcessor(); + }); + + test(`should${ + shouldStale ? '' : ' not' + } be marked as stale`, async () => { + expect.assertions(3); + + await processor.processIssues(1); + + expect(processor.staleIssues.length).toStrictEqual( + shouldStale ? 1 : 0 + ); + expect(processor.closedIssues.length).toStrictEqual(0); + expect(processor.removedLabelIssues.length).toStrictEqual(0); + }); + } + ); + }); + }); + }); + + describe('when all the pull requests milestones should not exempt', (): void => { + beforeEach((): void => { + opts.exemptAllPrMilestones = false; + }); + + describe.each` + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${true} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${true} + `( + 'when $name', + ({isPullRequest, milestone, shouldStale}: ITestData): void => { + beforeEach((): void => { + setTestIssueList(isPullRequest, milestone); + setProcessor(); + }); + + test(`should${ + shouldStale ? '' : ' not' + } be marked as stale`, async () => { + expect.assertions(3); + + await processor.processIssues(1); + + expect(processor.staleIssues.length).toStrictEqual( + shouldStale ? 1 : 0 + ); + expect(processor.closedIssues.length).toStrictEqual(0); + expect(processor.removedLabelIssues.length).toStrictEqual(0); + }); + } + ); + + describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { + beforeEach((): void => { + opts.exemptMilestones = 'dummy-milestone'; + }); + + describe.each` + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} + ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} + ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + `( + 'when $name', + ({isPullRequest, milestone, shouldStale}: ITestData): void => { + beforeEach((): void => { + setTestIssueList(isPullRequest, milestone); + setProcessor(); + }); + + test(`should${ + shouldStale ? '' : ' not' + } be marked as stale`, async () => { + expect.assertions(3); + + await processor.processIssues(1); + + expect(processor.staleIssues.length).toStrictEqual( + shouldStale ? 1 : 0 + ); + expect(processor.closedIssues.length).toStrictEqual(0); + expect(processor.removedLabelIssues.length).toStrictEqual(0); + }); + } + ); + + describe('when all the issues milestones should exempt a specific milestone', (): void => { + beforeEach((): void => { + opts.exemptIssueMilestones = 'dummy-issue-milestone'; + }); + + describe.each` + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} + ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} + ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} + ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} + ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + `( + 'when $name', + ({isPullRequest, milestone, shouldStale}: ITestData): void => { + beforeEach((): void => { + setTestIssueList(isPullRequest, milestone); + setProcessor(); + }); + + test(`should${ + shouldStale ? '' : ' not' + } be marked as stale`, async () => { + expect.assertions(3); + + await processor.processIssues(1); + + expect(processor.staleIssues.length).toStrictEqual( + shouldStale ? 1 : 0 + ); + expect(processor.closedIssues.length).toStrictEqual(0); + expect(processor.removedLabelIssues.length).toStrictEqual(0); + }); + } + ); + }); + + describe('when all the pull requests milestones should exempt a specific milestone', (): void => { + beforeEach((): void => { + opts.exemptPrMilestones = 'dummy-pull-request-milestone'; + }); + + describe.each` + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} + ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} + ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} + ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} + ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} + `( + 'when $name', + ({isPullRequest, milestone, shouldStale}: ITestData): void => { + beforeEach((): void => { + setTestIssueList(isPullRequest, milestone); + setProcessor(); + }); + + test(`should${ + shouldStale ? '' : ' not' + } be marked as stale`, async () => { + expect.assertions(3); + + await processor.processIssues(1); + + expect(processor.staleIssues.length).toStrictEqual( + shouldStale ? 1 : 0 + ); + expect(processor.closedIssues.length).toStrictEqual(0); + expect(processor.removedLabelIssues.length).toStrictEqual(0); + }); + } + ); + }); + }); + + describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { + beforeEach((): void => { + opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; + }); + + describe.each` + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} + ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} + ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + `( + 'when $name', + ({isPullRequest, milestone, shouldStale}: ITestData): void => { + beforeEach((): void => { + setTestIssueList(isPullRequest, milestone); + setProcessor(); + }); + + test(`should${ + shouldStale ? '' : ' not' + } be marked as stale`, async () => { + expect.assertions(3); + + await processor.processIssues(1); + + expect(processor.staleIssues.length).toStrictEqual( + shouldStale ? 1 : 0 + ); + expect(processor.closedIssues.length).toStrictEqual(0); + expect(processor.removedLabelIssues.length).toStrictEqual(0); + }); + } + ); + + describe('when all the issues milestones should exempt a specific milestone', (): void => { + beforeEach((): void => { + opts.exemptIssueMilestones = + 'dummy-issue-milestone1, dummy-issue-milestone2'; + }); + + describe.each` + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} + ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} + ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} + ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} + ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + `( + 'when $name', + ({isPullRequest, milestone, shouldStale}: ITestData): void => { + beforeEach((): void => { + setTestIssueList(isPullRequest, milestone); + setProcessor(); + }); + + test(`should${ + shouldStale ? '' : ' not' + } be marked as stale`, async () => { + expect.assertions(3); + + await processor.processIssues(1); + + expect(processor.staleIssues.length).toStrictEqual( + shouldStale ? 1 : 0 + ); + expect(processor.closedIssues.length).toStrictEqual(0); + expect(processor.removedLabelIssues.length).toStrictEqual(0); + }); + } + ); + }); + + describe('when all the pull requests milestones should exempt a specific milestone', (): void => { + beforeEach((): void => { + opts.exemptPrMilestones = + 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; + }); + + describe.each` + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} + ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} + ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} + ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} + ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} + `( + 'when $name', + ({isPullRequest, milestone, shouldStale}: ITestData): void => { + beforeEach((): void => { + setTestIssueList(isPullRequest, milestone); + setProcessor(); + }); + + test(`should${ + shouldStale ? '' : ' not' + } be marked as stale`, async () => { + expect.assertions(3); + + await processor.processIssues(1); + + expect(processor.staleIssues.length).toStrictEqual( + shouldStale ? 1 : 0 + ); + expect(processor.closedIssues.length).toStrictEqual(0); + expect(processor.removedLabelIssues.length).toStrictEqual(0); + }); + } + ); + }); + }); + }); + + describe('when all the pull requests milestones should exempt', (): void => { + beforeEach((): void => { + opts.exemptAllPrMilestones = true; + }); + + describe.each` + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${true} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${false} `( 'when $name', @@ -1764,17 +906,19 @@ describe('milestones options', (): void => { } ); - describe('when all the issues milestones are not configured to exempt', (): void => { + describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { beforeEach((): void => { - opts.exemptAllIssueMilestones = undefined; + opts.exemptMilestones = 'dummy-milestone'; }); describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${false} + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} + ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${false} + ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} `( 'when $name', ({isPullRequest, milestone, shouldStale}: ITestData): void => { @@ -1799,19 +943,21 @@ describe('milestones options', (): void => { } ); - describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { + describe('when all the issues milestones should exempt a specific milestone', (): void => { beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone'; + opts.exemptIssueMilestones = 'dummy-issue-milestone'; }); describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} + ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} + ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${false} + ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${false} + ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} `( 'when $name', ({isPullRequest, milestone, shouldStale}: ITestData): void => { @@ -1835,101 +981,23 @@ describe('milestones options', (): void => { }); } ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = 'dummy-issue-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = 'dummy-pull-request-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); }); - describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { + describe('when all the pull requests milestones should exempt a specific milestone', (): void => { beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; + opts.exemptPrMilestones = 'dummy-pull-request-milestone'; }); describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} + ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} + ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${false} + ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} + ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} `( 'when $name', ({isPullRequest, milestone, shouldStale}: ITestData): void => { @@ -1953,102 +1021,22 @@ describe('milestones options', (): void => { }); } ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = - 'dummy-issue-milestone1, dummy-issue-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = - 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); }); }); - describe('when all the issues milestones should not exempt', (): void => { + describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { beforeEach((): void => { - opts.exemptAllIssueMilestones = false; + opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; }); describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${false} + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} + ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${false} + ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} `( 'when $name', ({isPullRequest, milestone, shouldStale}: ITestData): void => { @@ -2073,19 +1061,22 @@ describe('milestones options', (): void => { } ); - describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { + describe('when all the issues milestones should exempt a specific milestone', (): void => { beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone'; + opts.exemptIssueMilestones = + 'dummy-issue-milestone1, dummy-issue-milestone2'; }); describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} + ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} + ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${false} + ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${false} + ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} `( 'when $name', ({isPullRequest, milestone, shouldStale}: ITestData): void => { @@ -2109,101 +1100,24 @@ describe('milestones options', (): void => { }); } ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = 'dummy-issue-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} - ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = 'dummy-pull-request-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); }); - describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { + describe('when all the pull requests milestones should exempt a specific milestone', (): void => { beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; + opts.exemptPrMilestones = + 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; }); describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${true} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} + isPullRequest | milestone | name | shouldStale + ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} + ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} + ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} + ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} + ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} + ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${false} + ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} + ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} `( 'when $name', ({isPullRequest, milestone, shouldStale}: ITestData): void => { @@ -2227,1184 +1141,6 @@ describe('milestones options', (): void => { }); } ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = - 'dummy-issue-milestone1, dummy-issue-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${true} - ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${true} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = - 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${true} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - }); - - describe('when all the issues milestones should exempt', (): void => { - beforeEach((): void => { - opts.exemptAllIssueMilestones = true; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = 'dummy-issue-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = 'dummy-pull-request-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - - describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = - 'dummy-issue-milestone1, dummy-issue-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = - 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - }); - - describe('when all the pull requests milestones are not configured to exempt', (): void => { - beforeEach((): void => { - opts.exemptAllPrMilestones = undefined; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = 'dummy-issue-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = 'dummy-pull-request-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - - describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = - 'dummy-issue-milestone1, dummy-issue-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = - 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - }); - - describe('when all the pull requests milestones should not exempt', (): void => { - beforeEach((): void => { - opts.exemptAllPrMilestones = false; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = 'dummy-issue-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = 'dummy-pull-request-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - - describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${true} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = - 'dummy-issue-milestone1, dummy-issue-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${true} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = - 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${true} - ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${true} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - }); - - describe('when all the pull requests milestones should exempt', (): void => { - beforeEach((): void => { - opts.exemptAllPrMilestones = true; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues and pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = 'dummy-issue-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-issue-milestone'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-issue-milestone'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = 'dummy-pull-request-milestone'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-pull-request-milestone'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-milestone'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-pull-request-milestone'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - }); - - describe('when all the issues and pull requests milestones should exempt some milestones', (): void => { - beforeEach((): void => { - opts.exemptMilestones = 'dummy-milestone1, dummy-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - - describe('when all the issues milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptIssueMilestones = - 'dummy-issue-milestone1, dummy-issue-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-issue-milestone2'} | ${'the issue does have a milestone matching the specific issue exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-issue-milestone2'} | ${'the PR does have a milestone matching the specific issue exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); - - describe('when all the pull requests milestones should exempt a specific milestone', (): void => { - beforeEach((): void => { - opts.exemptPrMilestones = - 'dummy-pull-request-milestone1, dummy-pull-request-milestone2'; - }); - - describe.each` - isPullRequest | milestone | name | shouldStale - ${false} | ${''} | ${'the issue does not have a milestone'} | ${true} - ${false} | ${'dummy-milestone-not-exempted'} | ${'the issue does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-pull-request-milestone2'} | ${'the issue does have a milestone matching the specific pull request exempted one'} | ${false} - ${false} | ${'dummy-milestone2'} | ${'the issue does have a milestone matching the specific exempted one'} | ${false} - ${true} | ${''} | ${'the PR does not have a milestone'} | ${true} - ${true} | ${'dummy-milestone-not-exempted'} | ${'the PR does have a milestone but not matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-pull-request-milestone2'} | ${'the PR does have a milestone matching the specific pull request exempted one'} | ${false} - ${true} | ${'dummy-milestone2'} | ${'the PR does have a milestone matching the specific exempted one'} | ${false} - `( - 'when $name', - ({isPullRequest, milestone, shouldStale}: ITestData): void => { - beforeEach((): void => { - setTestIssueList(isPullRequest, milestone); - setProcessor(); - }); - - test(`should${ - shouldStale ? '' : ' not' - } be marked as stale`, async () => { - expect.assertions(3); - - await processor.processIssues(1); - - expect(processor.staleIssues.length).toStrictEqual( - shouldStale ? 1 : 0 - ); - expect(processor.closedIssues.length).toStrictEqual(0); - expect(processor.removedLabelIssues.length).toStrictEqual(0); - }); - } - ); - }); }); }); }); diff --git a/action.yml b/action.yml index d431807d..336357b9 100644 --- a/action.yml +++ b/action.yml @@ -72,17 +72,13 @@ inputs: description: 'The milestones that mean a pull request is exempt from being marked as stale. Separate multiple milestones with commas (eg. "milestone1,milestone2"). Override "exempt-milestones" option regarding only the pull requests.' default: '' required: false - exempt-all-milestones: - description: 'Exempt all issues and pull requests with milestones from being marked as stale. Default to false.' + exempt-all-issue-milestones: + description: 'Exempt all issues with milestones from being marked as stale. Default to false.' default: 'false' required: false - exempt-all-issue-milestones: - description: 'Exempt all issues with milestones from being marked as stale. Override "exempt-all-milestones" option regarding only the issues.' - default: '' - required: false exempt-all-pr-milestones: - description: 'Exempt all pull requests with milestones from being marked as stale. Override "exempt-all-milestones" option regarding only the pull requests.' - default: '' + description: 'Exempt all pull requests with milestones from being marked as stale. Default to false.' + default: 'false' required: false only-labels: description: 'Only issues or pull requests with all of these labels are checked if stale. Defaults to `` (disabled) and can be a comma-separated list of labels.' diff --git a/dist/index.js b/dist/index.js index 909d77e7..6ec6a080 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1315,36 +1315,20 @@ class Milestones { return false; } _shouldExemptAllIssueMilestones() { - if (this._options.exemptAllIssueMilestones === true) { + if (this._options.exemptAllIssueMilestones) { this._issueLogger.info(`The option ${this._issueLogger.createOptionLink(option_1.Option.ExemptAllIssueMilestones)} is enabled. Any milestone on this $$type will skip the stale process`); return true; } - else if (this._options.exemptAllIssueMilestones === false) { - this._issueLogger.info(`The option ${this._issueLogger.createOptionLink(option_1.Option.ExemptAllIssueMilestones)} is disabled. Only some specific milestones on this $$type will skip the stale process`); - return false; - } - this._logExemptAllMilestonesOption(); - return this._options.exemptAllMilestones; + this._issueLogger.info(`The option ${this._issueLogger.createOptionLink(option_1.Option.ExemptAllIssueMilestones)} is disabled. Only some specific milestones on this $$type will skip the stale process`); + return false; } _shouldExemptAllPullRequestMilestones() { - if (this._options.exemptAllPrMilestones === true) { + if (this._options.exemptAllPrMilestones) { this._issueLogger.info(`The option ${this._issueLogger.createOptionLink(option_1.Option.ExemptAllPrMilestones)} is enabled. Any milestone on this $$type will skip the stale process`); return true; } - else if (this._options.exemptAllPrMilestones === false) { - this._issueLogger.info(`The option ${this._issueLogger.createOptionLink(option_1.Option.ExemptAllPrMilestones)} is disabled. Only some specific milestones on this $$type will skip the stale process`); - return false; - } - this._logExemptAllMilestonesOption(); - return this._options.exemptAllMilestones; - } - _logExemptAllMilestonesOption() { - if (this._options.exemptAllMilestones) { - this._issueLogger.info(`The option ${this._issueLogger.createOptionLink(option_1.Option.ExemptAllMilestones)} is enabled. Any milestone on this $$type will skip the stale process`); - } - else { - this._issueLogger.info(`The option ${this._issueLogger.createOptionLink(option_1.Option.ExemptAllMilestones)} is disabled. Only some specific milestones on this $$type will skip the stale process`); - } + this._issueLogger.info(`The option ${this._issueLogger.createOptionLink(option_1.Option.ExemptAllPrMilestones)} is disabled. Only some specific milestones on this $$type will skip the stale process`); + return false; } _logSkip() { this._issueLogger.info(logger_service_1.LoggerService.white('└──'), 'Skip the milestones checks'); @@ -1814,7 +1798,6 @@ var Option; Option["ExemptMilestones"] = "exempt-milestones"; Option["ExemptIssueMilestones"] = "exempt-issue-milestones"; Option["ExemptPrMilestones"] = "exempt-pr-milestones"; - Option["ExemptAllMilestones"] = "exempt-all-milestones"; Option["ExemptAllIssueMilestones"] = "exempt-all-issue-milestones"; Option["ExemptAllPrMilestones"] = "exempt-all-pr-milestones"; Option["ExemptIssueAssignees"] = "exempt-issue-assignees"; @@ -2122,9 +2105,8 @@ function _getAndValidateArgs() { exemptMilestones: core.getInput('exempt-milestones'), exemptIssueMilestones: core.getInput('exempt-issue-milestones'), exemptPrMilestones: core.getInput('exempt-pr-milestones'), - exemptAllMilestones: core.getInput('exempt-all-milestones') === 'true', - exemptAllIssueMilestones: _toOptionalBoolean('exempt-all-issue-milestones'), - exemptAllPrMilestones: _toOptionalBoolean('exempt-all-pr-milestones'), + exemptAllIssueMilestones: core.getInput('exempt-all-issue-milestones') === 'true', + exemptAllPrMilestones: core.getInput('exempt-all-pr-milestones') === 'true', exemptIssueAssignees: core.getInput('exempt-issue-assignees'), exemptPrAssignees: core.getInput('exempt-pr-assignees'), exemptAllIssueAssignees: core.getInput('exempt-all-issue-assignees') === 'true', diff --git a/src/classes/issue.spec.ts b/src/classes/issue.spec.ts index 0dbe1b4c..b95a1e82 100644 --- a/src/classes/issue.spec.ts +++ b/src/classes/issue.spec.ts @@ -46,9 +46,8 @@ describe('Issue', (): void => { exemptMilestones: '', exemptIssueMilestones: '', exemptPrMilestones: '', - exemptAllMilestones: false, - exemptAllIssueMilestones: undefined, - exemptAllPrMilestones: undefined, + exemptAllIssueMilestones: false, + exemptAllPrMilestones: false, exemptIssueAssignees: '', exemptPrAssignees: '', exemptAllIssueAssignees: false, diff --git a/src/classes/milestones.spec.ts b/src/classes/milestones.spec.ts index bb87e8ff..1f6fa58b 100644 --- a/src/classes/milestones.spec.ts +++ b/src/classes/milestones.spec.ts @@ -1,798 +1,722 @@ -import {DefaultProcessorOptions} from '../../__tests__/constants/default-processor-options'; -import {generateIIssue} from '../../__tests__/functions/generate-iissue'; -import {IIssue} from '../interfaces/issue'; -import {IIssuesProcessorOptions} from '../interfaces/issues-processor-options'; -import {Issue} from './issue'; -import {Milestones} from './milestones'; - -describe('Milestones', (): void => { - let milestones: Milestones; - let optionsInterface: IIssuesProcessorOptions; - let issue: Issue; - let issueInterface: IIssue; - - beforeEach((): void => { - optionsInterface = {...DefaultProcessorOptions, exemptAllMilestones: false}; - issueInterface = generateIIssue(); - }); - - describe('shouldExemptMilestones()', (): void => { - describe('when the given issue is not a pull request', (): void => { - beforeEach((): void => { - issueInterface.pull_request = undefined; - }); - - describe('when the given options are not configured to exempt a milestone', (): void => { - beforeEach((): void => { - optionsInterface.exemptMilestones = ''; - }); - - describe('when the given options are not configured to exempt an issue milestone', (): void => { - beforeEach((): void => { - optionsInterface.exemptIssueMilestones = ''; - }); - - describe('when the given issue does not have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = undefined; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given issue does have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-title' - }; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - }); - - describe('when the given options are configured to exempt an issue milestone', (): void => { - beforeEach((): void => { - optionsInterface.exemptIssueMilestones = - 'dummy-exempt-issue-milestone'; - }); - - describe('when the given issue does not have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = undefined; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given issue does have a milestone different than the exempt issue milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-title' - }; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given issue does have a milestone equaling the exempt issue milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-exempt-issue-milestone' - }; - }); - - it('should return true', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(true); - }); - }); - }); - }); - - describe('when the given options are configured to exempt a milestone', (): void => { - beforeEach((): void => { - optionsInterface.exemptMilestones = 'dummy-exempt-milestone'; - }); - - describe('when the given options are not configured to exempt an issue milestone', (): void => { - beforeEach((): void => { - optionsInterface.exemptIssueMilestones = ''; - }); - - describe('when the given issue does not have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = undefined; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given issue does have a milestone different than the exempt milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-title' - }; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given issue does have a milestone equaling the exempt milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-exempt-milestone' - }; - }); - - it('should return true', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(true); - }); - }); - }); - - describe('when the given options are configured to exempt an issue milestone', (): void => { - beforeEach((): void => { - optionsInterface.exemptIssueMilestones = - 'dummy-exempt-issue-milestone'; - }); - - describe('when the given issue does not have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = undefined; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given issue does have a milestone different than the exempt issue milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-title' - }; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given issue does have a milestone equaling the exempt issue milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-exempt-issue-milestone' - }; - }); - - it('should return true', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(true); - }); - }); - - describe('when the given issue does have a milestone different than the exempt milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-title' - }; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given issue does have a milestone equaling the exempt milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-exempt-milestone' - }; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - }); - }); - - describe('when the given options are configured to exempt all milestones', (): void => { - beforeEach((): void => { - optionsInterface.exemptAllMilestones = true; - }); - - describe('when the given issue does not have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = undefined; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given issue does have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-exempt-issue-milestone' - }; - }); - - it('should return true', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(true); - }); - }); - - describe('when the given options are not configured to exempt all issue milestones', (): void => { - beforeEach((): void => { - optionsInterface.exemptAllIssueMilestones = false; - }); - - describe('when the given issue does not have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = undefined; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given issue does have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-exempt-milestone' - }; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - }); - - describe('when the given options are configured to exempt all issue milestones', (): void => { - beforeEach((): void => { - optionsInterface.exemptAllIssueMilestones = true; - }); - - describe('when the given issue does not have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = undefined; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given issue does have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-exempt-issue-milestone' - }; - }); - - it('should return true', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(true); - }); - }); - }); - }); - }); - - describe('when the given issue is a pull request', (): void => { - beforeEach((): void => { - issueInterface.pull_request = {}; - }); - - describe('when the given options are not configured to exempt a milestone', (): void => { - beforeEach((): void => { - optionsInterface.exemptMilestones = ''; - }); - - describe('when the given options are not configured to exempt a pull request milestone', (): void => { - beforeEach((): void => { - optionsInterface.exemptPrMilestones = ''; - }); - - describe('when the given pull request does not have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = undefined; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given pull request does have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-title' - }; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - }); - - describe('when the given options are configured to exempt a pull request milestone', (): void => { - beforeEach((): void => { - optionsInterface.exemptPrMilestones = 'dummy-exempt-pr-milestone'; - }); - - describe('when the given pull request does not have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = undefined; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given pull request does have a milestone different than the exempt pull request milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-title' - }; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given pull request does have a milestone equaling the exempt pull request milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-exempt-pr-milestone' - }; - }); - - it('should return true', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(true); - }); - }); - }); - }); - - describe('when the given options are configured to exempt a milestone', (): void => { - beforeEach((): void => { - optionsInterface.exemptMilestones = 'dummy-exempt-milestone'; - }); - - describe('when the given options are not configured to exempt a pull request milestone', (): void => { - beforeEach((): void => { - optionsInterface.exemptPrMilestones = ''; - }); - - describe('when the given pull request does not have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = undefined; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given pull request does have a milestone different than the exempt milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-title' - }; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given pull request does have a milestone equaling the exempt milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-exempt-milestone' - }; - }); - - it('should return true', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(true); - }); - }); - }); - - describe('when the given options are configured to exempt a pull request milestone', (): void => { - beforeEach((): void => { - optionsInterface.exemptPrMilestones = 'dummy-exempt-pr-milestone'; - }); - - describe('when the given pull request does not have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = undefined; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given pull request does have a milestone different than the exempt pull request milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-title' - }; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given pull request does have a milestone equaling the exempt pull request milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-exempt-pr-milestone' - }; - }); - - it('should return true', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(true); - }); - }); - - describe('when the given pull request does have a milestone different than the exempt milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-title' - }; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given pull request does have a milestone equaling the exempt milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-exempt-milestone' - }; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - }); - }); - - describe('when the given options are configured to exempt all milestones', (): void => { - beforeEach((): void => { - optionsInterface.exemptAllMilestones = true; - }); - - describe('when the given pull request does not have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = undefined; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given pull request does have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-exempt-pr-milestone' - }; - }); - - it('should return true', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(true); - }); - }); - - describe('when the given options are not configured to exempt all pull request milestones', (): void => { - beforeEach((): void => { - optionsInterface.exemptAllPrMilestones = false; - }); - - describe('when the given pull request does not have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = undefined; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given pull request does have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-exempt-milestone' - }; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - }); - - describe('when the given options are configured to exempt all pull request milestones', (): void => { - beforeEach((): void => { - optionsInterface.exemptAllPrMilestones = true; - }); - - describe('when the given pull request does not have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = undefined; - }); - - it('should return false', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(false); - }); - }); - - describe('when the given pull request does have a milestone', (): void => { - beforeEach((): void => { - issueInterface.milestone = { - title: 'dummy-exempt-pr-milestone' - }; - }); - - it('should return true', (): void => { - expect.assertions(1); - issue = new Issue(optionsInterface, issueInterface); - milestones = new Milestones(optionsInterface, issue); - - const result = milestones.shouldExemptMilestones(); - - expect(result).toStrictEqual(true); - }); - }); - }); - }); - }); - }); -}); +import {DefaultProcessorOptions} from '../../__tests__/constants/default-processor-options'; +import {generateIIssue} from '../../__tests__/functions/generate-iissue'; +import {IIssue} from '../interfaces/issue'; +import {IIssuesProcessorOptions} from '../interfaces/issues-processor-options'; +import {Issue} from './issue'; +import {Milestones} from './milestones'; + +describe('Milestones', (): void => { + let milestones: Milestones; + let optionsInterface: IIssuesProcessorOptions; + let issue: Issue; + let issueInterface: IIssue; + + beforeEach((): void => { + optionsInterface = { + ...DefaultProcessorOptions, + exemptAllIssueAssignees: false, + exemptAllPrMilestones: false + }; + issueInterface = generateIIssue(); + }); + + describe('shouldExemptMilestones()', (): void => { + describe('when the given issue is not a pull request', (): void => { + beforeEach((): void => { + issueInterface.pull_request = undefined; + }); + + describe('when the given options are not configured to exempt a milestone', (): void => { + beforeEach((): void => { + optionsInterface.exemptMilestones = ''; + }); + + describe('when the given options are not configured to exempt an issue milestone', (): void => { + beforeEach((): void => { + optionsInterface.exemptIssueMilestones = ''; + }); + + describe('when the given issue does not have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = undefined; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given issue does have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-title' + }; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + }); + + describe('when the given options are configured to exempt an issue milestone', (): void => { + beforeEach((): void => { + optionsInterface.exemptIssueMilestones = + 'dummy-exempt-issue-milestone'; + }); + + describe('when the given issue does not have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = undefined; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given issue does have a milestone different than the exempt issue milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-title' + }; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given issue does have a milestone equaling the exempt issue milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-exempt-issue-milestone' + }; + }); + + it('should return true', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(true); + }); + }); + }); + }); + + describe('when the given options are configured to exempt a milestone', (): void => { + beforeEach((): void => { + optionsInterface.exemptMilestones = 'dummy-exempt-milestone'; + }); + + describe('when the given options are not configured to exempt an issue milestone', (): void => { + beforeEach((): void => { + optionsInterface.exemptIssueMilestones = ''; + }); + + describe('when the given issue does not have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = undefined; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given issue does have a milestone different than the exempt milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-title' + }; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given issue does have a milestone equaling the exempt milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-exempt-milestone' + }; + }); + + it('should return true', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(true); + }); + }); + }); + + describe('when the given options are configured to exempt an issue milestone', (): void => { + beforeEach((): void => { + optionsInterface.exemptIssueMilestones = + 'dummy-exempt-issue-milestone'; + }); + + describe('when the given issue does not have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = undefined; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given issue does have a milestone different than the exempt issue milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-title' + }; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given issue does have a milestone equaling the exempt issue milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-exempt-issue-milestone' + }; + }); + + it('should return true', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(true); + }); + }); + + describe('when the given issue does have a milestone different than the exempt milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-title' + }; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given issue does have a milestone equaling the exempt milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-exempt-milestone' + }; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + }); + }); + + describe('when the given options are not configured to exempt all issue milestones', (): void => { + beforeEach((): void => { + optionsInterface.exemptAllIssueMilestones = false; + }); + + describe('when the given issue does not have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = undefined; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given issue does have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-exempt-milestone' + }; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + }); + + describe('when the given options are configured to exempt all issue milestones', (): void => { + beforeEach((): void => { + optionsInterface.exemptAllIssueMilestones = true; + }); + + describe('when the given issue does not have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = undefined; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given issue does have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-exempt-issue-milestone' + }; + }); + + it('should return true', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(true); + }); + }); + }); + }); + + describe('when the given issue is a pull request', (): void => { + beforeEach((): void => { + issueInterface.pull_request = {}; + }); + + describe('when the given options are not configured to exempt a milestone', (): void => { + beforeEach((): void => { + optionsInterface.exemptMilestones = ''; + }); + + describe('when the given options are not configured to exempt a pull request milestone', (): void => { + beforeEach((): void => { + optionsInterface.exemptPrMilestones = ''; + }); + + describe('when the given pull request does not have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = undefined; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given pull request does have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-title' + }; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + }); + + describe('when the given options are configured to exempt a pull request milestone', (): void => { + beforeEach((): void => { + optionsInterface.exemptPrMilestones = 'dummy-exempt-pr-milestone'; + }); + + describe('when the given pull request does not have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = undefined; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given pull request does have a milestone different than the exempt pull request milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-title' + }; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given pull request does have a milestone equaling the exempt pull request milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-exempt-pr-milestone' + }; + }); + + it('should return true', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(true); + }); + }); + }); + }); + + describe('when the given options are configured to exempt a milestone', (): void => { + beforeEach((): void => { + optionsInterface.exemptMilestones = 'dummy-exempt-milestone'; + }); + + describe('when the given options are not configured to exempt a pull request milestone', (): void => { + beforeEach((): void => { + optionsInterface.exemptPrMilestones = ''; + }); + + describe('when the given pull request does not have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = undefined; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given pull request does have a milestone different than the exempt milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-title' + }; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given pull request does have a milestone equaling the exempt milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-exempt-milestone' + }; + }); + + it('should return true', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(true); + }); + }); + }); + + describe('when the given options are configured to exempt a pull request milestone', (): void => { + beforeEach((): void => { + optionsInterface.exemptPrMilestones = 'dummy-exempt-pr-milestone'; + }); + + describe('when the given pull request does not have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = undefined; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given pull request does have a milestone different than the exempt pull request milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-title' + }; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given pull request does have a milestone equaling the exempt pull request milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-exempt-pr-milestone' + }; + }); + + it('should return true', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(true); + }); + }); + + describe('when the given pull request does have a milestone different than the exempt milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-title' + }; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given pull request does have a milestone equaling the exempt milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-exempt-milestone' + }; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + }); + }); + + describe('when the given options are not configured to exempt all pull request milestones', (): void => { + beforeEach((): void => { + optionsInterface.exemptAllPrMilestones = false; + }); + + describe('when the given pull request does not have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = undefined; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given pull request does have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-exempt-milestone' + }; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + }); + + describe('when the given options are configured to exempt all pull request milestones', (): void => { + beforeEach((): void => { + optionsInterface.exemptAllPrMilestones = true; + }); + + describe('when the given pull request does not have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = undefined; + }); + + it('should return false', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(false); + }); + }); + + describe('when the given pull request does have a milestone', (): void => { + beforeEach((): void => { + issueInterface.milestone = { + title: 'dummy-exempt-pr-milestone' + }; + }); + + it('should return true', (): void => { + expect.assertions(1); + issue = new Issue(optionsInterface, issueInterface); + milestones = new Milestones(optionsInterface, issue); + + const result = milestones.shouldExemptMilestones(); + + expect(result).toStrictEqual(true); + }); + }); + }); + }); + }); +}); diff --git a/src/classes/milestones.ts b/src/classes/milestones.ts index db002ea4..05122b68 100644 --- a/src/classes/milestones.ts +++ b/src/classes/milestones.ts @@ -1,297 +1,273 @@ -import deburr from 'lodash.deburr'; -import {Option} from '../enums/option'; -import {wordsToList} from '../functions/words-to-list'; -import {IIssuesProcessorOptions} from '../interfaces/issues-processor-options'; -import {Issue} from './issue'; -import {IssueLogger} from './loggers/issue-logger'; -import {LoggerService} from '../services/logger.service'; - -type CleanMilestone = string; - -export class Milestones { - private static _cleanMilestone(milestone: Readonly): CleanMilestone { - return deburr(milestone.toLowerCase()); - } - - private readonly _options: IIssuesProcessorOptions; - private readonly _issue: Issue; - private readonly _issueLogger: IssueLogger; - - constructor(options: Readonly, issue: Issue) { - this._options = options; - this._issue = issue; - this._issueLogger = new IssueLogger(issue); - } - - shouldExemptMilestones(): boolean { - if (!this._issue.milestone) { - this._issueLogger.info('This $$type has no milestone'); - this._logSkip(); - - return false; - } - - if (this._shouldExemptAllMilestones()) { - this._issueLogger.info( - LoggerService.white('└──'), - 'Skipping this $$type because it has a milestone' - ); - - return true; - } - - const exemptMilestones: string[] = this._getExemptMilestones(); - - if (exemptMilestones.length === 0) { - this._issueLogger.info( - LoggerService.white('├──'), - `No milestone option was specified to skip the stale process for this $$type` - ); - this._logSkip(); - - return false; - } - - this._issueLogger.info( - LoggerService.white('├──'), - `Found ${LoggerService.cyan(exemptMilestones.length)} milestone${ - exemptMilestones.length > 1 ? 's' : '' - } that can exempt stale on this $$type` - ); - - const hasExemptMilestone: boolean = exemptMilestones.some( - (exemptMilestone: Readonly): boolean => - this._hasMilestone(exemptMilestone) - ); - - if (!hasExemptMilestone) { - this._issueLogger.info( - LoggerService.white('├──'), - 'No milestone on this $$type can exempt the stale process' - ); - this._logSkip(); - } else { - this._issueLogger.info( - LoggerService.white('└──'), - 'Skipping this $$type because it has an exempt milestone' - ); - } - - return hasExemptMilestone; - } - - private _getExemptMilestones(): string[] { - return this._issue.isPullRequest - ? this._getExemptPullRequestMilestones() - : this._getExemptIssueMilestones(); - } - - private _getExemptIssueMilestones(): string[] { - if (this._options.exemptIssueMilestones === '') { - this._issueLogger.info( - LoggerService.white('├──'), - `The option ${this._issueLogger.createOptionLink( - Option.ExemptIssueMilestones - )} is disabled. No specific milestone can skip the stale process for this $$type` - ); - - if (this._options.exemptMilestones === '') { - this._issueLogger.info( - LoggerService.white('├──'), - `The option ${this._issueLogger.createOptionLink( - Option.ExemptMilestones - )} is disabled. No specific milestone can skip the stale process for this $$type` - ); - - return []; - } - - const exemptMilestones: string[] = wordsToList( - this._options.exemptMilestones - ); - - this._issueLogger.info( - LoggerService.white('├──'), - `The option ${this._issueLogger.createOptionLink( - Option.ExemptMilestones - )} is set. ${LoggerService.cyan(exemptMilestones.length)} milestone${ - exemptMilestones.length === 1 ? '' : 's' - } can skip the stale process for this $$type` - ); - - return exemptMilestones; - } - - const exemptMilestones: string[] = wordsToList( - this._options.exemptIssueMilestones - ); - - this._issueLogger.info( - LoggerService.white('├──'), - `The option ${this._issueLogger.createOptionLink( - Option.ExemptIssueMilestones - )} is set. ${LoggerService.cyan(exemptMilestones.length)} milestone${ - exemptMilestones.length === 1 ? '' : 's' - } can skip the stale process for this $$type` - ); - - return exemptMilestones; - } - - private _getExemptPullRequestMilestones(): string[] { - if (this._options.exemptPrMilestones === '') { - this._issueLogger.info( - LoggerService.white('├──'), - `The option ${this._issueLogger.createOptionLink( - Option.ExemptPrMilestones - )} is disabled. No specific milestone can skip the stale process for this $$type` - ); - - if (this._options.exemptMilestones === '') { - this._issueLogger.info( - LoggerService.white('├──'), - `The option ${this._issueLogger.createOptionLink( - Option.ExemptMilestones - )} is disabled. No specific milestone can skip the stale process for this $$type` - ); - - return []; - } - - const exemptMilestones: string[] = wordsToList( - this._options.exemptMilestones - ); - - this._issueLogger.info( - LoggerService.white('├──'), - `The option ${this._issueLogger.createOptionLink( - Option.ExemptMilestones - )} is set. ${LoggerService.cyan(exemptMilestones.length)} milestone${ - exemptMilestones.length === 1 ? '' : 's' - } can skip the stale process for this $$type` - ); - - return exemptMilestones; - } - - const exemptMilestones: string[] = wordsToList( - this._options.exemptPrMilestones - ); - - this._issueLogger.info( - LoggerService.white('├──'), - `The option ${this._issueLogger.createOptionLink( - Option.ExemptPrMilestones - )} is set. ${LoggerService.cyan(exemptMilestones.length)} milestone${ - exemptMilestones.length === 1 ? '' : 's' - } can skip the stale process for this $$type` - ); - - return exemptMilestones; - } - - private _hasMilestone(milestone: Readonly): boolean { - if (!this._issue.milestone) { - return false; - } - - const cleanMilestone: CleanMilestone = - Milestones._cleanMilestone(milestone); - - const isSameMilestone: boolean = - cleanMilestone === - Milestones._cleanMilestone(this._issue.milestone.title); - - if (isSameMilestone) { - this._issueLogger.info( - LoggerService.white('├──'), - `The milestone "${LoggerService.cyan( - milestone - )}" is set on this $$type and is an exempt milestone` - ); - } - - return isSameMilestone; - } - - private _shouldExemptAllMilestones(): boolean { - if (this._issue.milestone) { - return this._issue.isPullRequest - ? this._shouldExemptAllPullRequestMilestones() - : this._shouldExemptAllIssueMilestones(); - } - - return false; - } - - private _shouldExemptAllIssueMilestones(): boolean { - if (this._options.exemptAllIssueMilestones === true) { - this._issueLogger.info( - `The option ${this._issueLogger.createOptionLink( - Option.ExemptAllIssueMilestones - )} is enabled. Any milestone on this $$type will skip the stale process` - ); - - return true; - } else if (this._options.exemptAllIssueMilestones === false) { - this._issueLogger.info( - `The option ${this._issueLogger.createOptionLink( - Option.ExemptAllIssueMilestones - )} is disabled. Only some specific milestones on this $$type will skip the stale process` - ); - - return false; - } - - this._logExemptAllMilestonesOption(); - - return this._options.exemptAllMilestones; - } - - private _shouldExemptAllPullRequestMilestones(): boolean { - if (this._options.exemptAllPrMilestones === true) { - this._issueLogger.info( - `The option ${this._issueLogger.createOptionLink( - Option.ExemptAllPrMilestones - )} is enabled. Any milestone on this $$type will skip the stale process` - ); - - return true; - } else if (this._options.exemptAllPrMilestones === false) { - this._issueLogger.info( - `The option ${this._issueLogger.createOptionLink( - Option.ExemptAllPrMilestones - )} is disabled. Only some specific milestones on this $$type will skip the stale process` - ); - - return false; - } - - this._logExemptAllMilestonesOption(); - - return this._options.exemptAllMilestones; - } - - private _logExemptAllMilestonesOption(): void { - if (this._options.exemptAllMilestones) { - this._issueLogger.info( - `The option ${this._issueLogger.createOptionLink( - Option.ExemptAllMilestones - )} is enabled. Any milestone on this $$type will skip the stale process` - ); - } else { - this._issueLogger.info( - `The option ${this._issueLogger.createOptionLink( - Option.ExemptAllMilestones - )} is disabled. Only some specific milestones on this $$type will skip the stale process` - ); - } - } - - private _logSkip(): void { - this._issueLogger.info( - LoggerService.white('└──'), - 'Skip the milestones checks' - ); - } -} +import deburr from 'lodash.deburr'; +import {Option} from '../enums/option'; +import {wordsToList} from '../functions/words-to-list'; +import {IIssuesProcessorOptions} from '../interfaces/issues-processor-options'; +import {Issue} from './issue'; +import {IssueLogger} from './loggers/issue-logger'; +import {LoggerService} from '../services/logger.service'; + +type CleanMilestone = string; + +export class Milestones { + private static _cleanMilestone(milestone: Readonly): CleanMilestone { + return deburr(milestone.toLowerCase()); + } + + private readonly _options: IIssuesProcessorOptions; + private readonly _issue: Issue; + private readonly _issueLogger: IssueLogger; + + constructor(options: Readonly, issue: Issue) { + this._options = options; + this._issue = issue; + this._issueLogger = new IssueLogger(issue); + } + + shouldExemptMilestones(): boolean { + if (!this._issue.milestone) { + this._issueLogger.info('This $$type has no milestone'); + this._logSkip(); + + return false; + } + + if (this._shouldExemptAllMilestones()) { + this._issueLogger.info( + LoggerService.white('└──'), + 'Skipping this $$type because it has a milestone' + ); + + return true; + } + + const exemptMilestones: string[] = this._getExemptMilestones(); + + if (exemptMilestones.length === 0) { + this._issueLogger.info( + LoggerService.white('├──'), + `No milestone option was specified to skip the stale process for this $$type` + ); + this._logSkip(); + + return false; + } + + this._issueLogger.info( + LoggerService.white('├──'), + `Found ${LoggerService.cyan(exemptMilestones.length)} milestone${ + exemptMilestones.length > 1 ? 's' : '' + } that can exempt stale on this $$type` + ); + + const hasExemptMilestone: boolean = exemptMilestones.some( + (exemptMilestone: Readonly): boolean => + this._hasMilestone(exemptMilestone) + ); + + if (!hasExemptMilestone) { + this._issueLogger.info( + LoggerService.white('├──'), + 'No milestone on this $$type can exempt the stale process' + ); + this._logSkip(); + } else { + this._issueLogger.info( + LoggerService.white('└──'), + 'Skipping this $$type because it has an exempt milestone' + ); + } + + return hasExemptMilestone; + } + + private _getExemptMilestones(): string[] { + return this._issue.isPullRequest + ? this._getExemptPullRequestMilestones() + : this._getExemptIssueMilestones(); + } + + private _getExemptIssueMilestones(): string[] { + if (this._options.exemptIssueMilestones === '') { + this._issueLogger.info( + LoggerService.white('├──'), + `The option ${this._issueLogger.createOptionLink( + Option.ExemptIssueMilestones + )} is disabled. No specific milestone can skip the stale process for this $$type` + ); + + if (this._options.exemptMilestones === '') { + this._issueLogger.info( + LoggerService.white('├──'), + `The option ${this._issueLogger.createOptionLink( + Option.ExemptMilestones + )} is disabled. No specific milestone can skip the stale process for this $$type` + ); + + return []; + } + + const exemptMilestones: string[] = wordsToList( + this._options.exemptMilestones + ); + + this._issueLogger.info( + LoggerService.white('├──'), + `The option ${this._issueLogger.createOptionLink( + Option.ExemptMilestones + )} is set. ${LoggerService.cyan(exemptMilestones.length)} milestone${ + exemptMilestones.length === 1 ? '' : 's' + } can skip the stale process for this $$type` + ); + + return exemptMilestones; + } + + const exemptMilestones: string[] = wordsToList( + this._options.exemptIssueMilestones + ); + + this._issueLogger.info( + LoggerService.white('├──'), + `The option ${this._issueLogger.createOptionLink( + Option.ExemptIssueMilestones + )} is set. ${LoggerService.cyan(exemptMilestones.length)} milestone${ + exemptMilestones.length === 1 ? '' : 's' + } can skip the stale process for this $$type` + ); + + return exemptMilestones; + } + + private _getExemptPullRequestMilestones(): string[] { + if (this._options.exemptPrMilestones === '') { + this._issueLogger.info( + LoggerService.white('├──'), + `The option ${this._issueLogger.createOptionLink( + Option.ExemptPrMilestones + )} is disabled. No specific milestone can skip the stale process for this $$type` + ); + + if (this._options.exemptMilestones === '') { + this._issueLogger.info( + LoggerService.white('├──'), + `The option ${this._issueLogger.createOptionLink( + Option.ExemptMilestones + )} is disabled. No specific milestone can skip the stale process for this $$type` + ); + + return []; + } + + const exemptMilestones: string[] = wordsToList( + this._options.exemptMilestones + ); + + this._issueLogger.info( + LoggerService.white('├──'), + `The option ${this._issueLogger.createOptionLink( + Option.ExemptMilestones + )} is set. ${LoggerService.cyan(exemptMilestones.length)} milestone${ + exemptMilestones.length === 1 ? '' : 's' + } can skip the stale process for this $$type` + ); + + return exemptMilestones; + } + + const exemptMilestones: string[] = wordsToList( + this._options.exemptPrMilestones + ); + + this._issueLogger.info( + LoggerService.white('├──'), + `The option ${this._issueLogger.createOptionLink( + Option.ExemptPrMilestones + )} is set. ${LoggerService.cyan(exemptMilestones.length)} milestone${ + exemptMilestones.length === 1 ? '' : 's' + } can skip the stale process for this $$type` + ); + + return exemptMilestones; + } + + private _hasMilestone(milestone: Readonly): boolean { + if (!this._issue.milestone) { + return false; + } + + const cleanMilestone: CleanMilestone = + Milestones._cleanMilestone(milestone); + + const isSameMilestone: boolean = + cleanMilestone === + Milestones._cleanMilestone(this._issue.milestone.title); + + if (isSameMilestone) { + this._issueLogger.info( + LoggerService.white('├──'), + `The milestone "${LoggerService.cyan( + milestone + )}" is set on this $$type and is an exempt milestone` + ); + } + + return isSameMilestone; + } + + private _shouldExemptAllMilestones(): boolean { + if (this._issue.milestone) { + return this._issue.isPullRequest + ? this._shouldExemptAllPullRequestMilestones() + : this._shouldExemptAllIssueMilestones(); + } + + return false; + } + + private _shouldExemptAllIssueMilestones(): boolean { + if (this._options.exemptAllIssueMilestones) { + this._issueLogger.info( + `The option ${this._issueLogger.createOptionLink( + Option.ExemptAllIssueMilestones + )} is enabled. Any milestone on this $$type will skip the stale process` + ); + + return true; + } + + this._issueLogger.info( + `The option ${this._issueLogger.createOptionLink( + Option.ExemptAllIssueMilestones + )} is disabled. Only some specific milestones on this $$type will skip the stale process` + ); + + return false; + } + + private _shouldExemptAllPullRequestMilestones(): boolean { + if (this._options.exemptAllPrMilestones) { + this._issueLogger.info( + `The option ${this._issueLogger.createOptionLink( + Option.ExemptAllPrMilestones + )} is enabled. Any milestone on this $$type will skip the stale process` + ); + + return true; + } + + this._issueLogger.info( + `The option ${this._issueLogger.createOptionLink( + Option.ExemptAllPrMilestones + )} is disabled. Only some specific milestones on this $$type will skip the stale process` + ); + + return false; + } + + private _logSkip(): void { + this._issueLogger.info( + LoggerService.white('└──'), + 'Skip the milestones checks' + ); + } +} diff --git a/src/enums/option.ts b/src/enums/option.ts index a69e19c6..3f957409 100644 --- a/src/enums/option.ts +++ b/src/enums/option.ts @@ -31,7 +31,6 @@ export enum Option { ExemptMilestones = 'exempt-milestones', ExemptIssueMilestones = 'exempt-issue-milestones', ExemptPrMilestones = 'exempt-pr-milestones', - ExemptAllMilestones = 'exempt-all-milestones', ExemptAllIssueMilestones = 'exempt-all-issue-milestones', ExemptAllPrMilestones = 'exempt-all-pr-milestones', ExemptIssueAssignees = 'exempt-issue-assignees', diff --git a/src/interfaces/issues-processor-options.ts b/src/interfaces/issues-processor-options.ts index 9817cb69..b44804e9 100644 --- a/src/interfaces/issues-processor-options.ts +++ b/src/interfaces/issues-processor-options.ts @@ -35,9 +35,8 @@ export interface IIssuesProcessorOptions { exemptMilestones: string; exemptIssueMilestones: string; exemptPrMilestones: string; - exemptAllMilestones: boolean; - exemptAllIssueMilestones: boolean | undefined; - exemptAllPrMilestones: boolean | undefined; + exemptAllIssueMilestones: boolean; + exemptAllPrMilestones: boolean; exemptIssueAssignees: string; exemptPrAssignees: string; exemptAllIssueAssignees: boolean; diff --git a/src/main.ts b/src/main.ts index d9d29879..469bdebe 100644 --- a/src/main.ts +++ b/src/main.ts @@ -72,9 +72,9 @@ function _getAndValidateArgs(): IIssuesProcessorOptions { exemptMilestones: core.getInput('exempt-milestones'), exemptIssueMilestones: core.getInput('exempt-issue-milestones'), exemptPrMilestones: core.getInput('exempt-pr-milestones'), - exemptAllMilestones: core.getInput('exempt-all-milestones') === 'true', - exemptAllIssueMilestones: _toOptionalBoolean('exempt-all-issue-milestones'), - exemptAllPrMilestones: _toOptionalBoolean('exempt-all-pr-milestones'), + exemptAllIssueMilestones: + core.getInput('exempt-all-issue-milestones') === 'true', + exemptAllPrMilestones: core.getInput('exempt-all-pr-milestones') === 'true', exemptIssueAssignees: core.getInput('exempt-issue-assignees'), exemptPrAssignees: core.getInput('exempt-pr-assignees'), exemptAllIssueAssignees: