From 7368ddf7fac405d81fda4b669f197cae46a192b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Thu, 4 Feb 2021 10:29:14 +0100 Subject: [PATCH 1/2] Fixed should be stale condition When different stale period is used for issues and pull requests, this code uses wrong one. This was probably missed in https://github.com/actions/stale/pull/224 Fixes #299 --- src/IssueProcessor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/IssueProcessor.ts b/src/IssueProcessor.ts index f1c2d93db..f74260db7 100644 --- a/src/IssueProcessor.ts +++ b/src/IssueProcessor.ts @@ -273,7 +273,7 @@ export class IssueProcessor { // should this issue be marked stale? const shouldBeStale = !IssueProcessor._updatedSince( issue.updated_at, - this.options.daysBeforeStale + daysBeforeStale ); // determine if this issue needs to be marked stale first From 1a27342a57390e787bc7ef9c0e3a3423b86b2ebc Mon Sep 17 00:00:00 2001 From: Geoffrey Testelin Date: Thu, 4 Feb 2021 20:26:54 +0100 Subject: [PATCH 2/2] Add tests for #299 --- __tests__/main.test.ts | 198 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) diff --git a/__tests__/main.test.ts b/__tests__/main.test.ts index aad95e563..6fea323a2 100644 --- a/__tests__/main.test.ts +++ b/__tests__/main.test.ts @@ -2262,3 +2262,201 @@ test('a PR with an exempted milestone and with an exempted issue milestone will expect(processor.closedIssues.length).toStrictEqual(0); expect(processor.removedLabelIssues.length).toStrictEqual(0); }); + +test('processing an issue opened since 2 days and with the option "daysBeforeIssueStale" at 3 will not make it stale', async () => { + expect.assertions(2); + const opts: IssueProcessorOptions = { + ...DefaultProcessorOptions, + daysBeforeStale: 10, + daysBeforeIssueStale: 3 + }; + let issueDate = new Date(); + issueDate.setDate(issueDate.getDate() - 2); + const TestIssueList: Issue[] = [ + generateIssue( + opts, + 1, + 'An issue with no label', + issueDate.toDateString(), + ) + ]; + const processor = new IssueProcessor( + opts, + async () => 'abot', + async p => (p == 1 ? TestIssueList : []), + async (num, dt) => [], + async (issue, label) => new Date().toDateString() + ); + + // process our fake issue list + await processor.processIssues(1); + + expect(processor.staleIssues.length).toEqual(0); + expect(processor.closedIssues.length).toEqual(0); +}); + +test('processing an issue opened since 2 days and with the option "daysBeforeIssueStale" at 2 will make it stale', async () => { + expect.assertions(2); + const opts: IssueProcessorOptions = { + ...DefaultProcessorOptions, + daysBeforeStale: 10, + daysBeforeIssueStale: 2 + }; + let issueDate = new Date(); + issueDate.setDate(issueDate.getDate() - 2); + const TestIssueList: Issue[] = [ + generateIssue( + opts, + 1, + 'An issue with no label', + issueDate.toDateString(), + ) + ]; + const processor = new IssueProcessor( + opts, + async () => 'abot', + async p => (p == 1 ? TestIssueList : []), + async (num, dt) => [], + async (issue, label) => new Date().toDateString() + ); + + // process our fake issue list + await processor.processIssues(1); + + expect(processor.staleIssues.length).toEqual(1); + expect(processor.closedIssues.length).toEqual(0); +}); + +test('processing an issue opened since 2 days and with the option "daysBeforeIssueStale" at 1 will make it stale', async () => { + expect.assertions(2); + const opts: IssueProcessorOptions = { + ...DefaultProcessorOptions, + daysBeforeStale: 10, + daysBeforeIssueStale: 1 + }; + let issueDate = new Date(); + issueDate.setDate(issueDate.getDate() - 2); + const TestIssueList: Issue[] = [ + generateIssue( + opts, + 1, + 'An issue with no label', + issueDate.toDateString(), + ) + ]; + const processor = new IssueProcessor( + opts, + async () => 'abot', + async p => (p == 1 ? TestIssueList : []), + async (num, dt) => [], + async (issue, label) => new Date().toDateString() + ); + + // process our fake issue list + await processor.processIssues(1); + + expect(processor.staleIssues.length).toEqual(1); + expect(processor.closedIssues.length).toEqual(0); +}); + +test('processing a pull request opened since 2 days and with the option "daysBeforePrStale" at 3 will not make it stale', async () => { + expect.assertions(2); + const opts: IssueProcessorOptions = { + ...DefaultProcessorOptions, + daysBeforeStale: 10, + daysBeforePrStale: 3 + }; + let issueDate = new Date(); + issueDate.setDate(issueDate.getDate() - 2); + const TestIssueList: Issue[] = [ + generateIssue( + opts, + 1, + 'A pull request with no label', + issueDate.toDateString(), + issueDate.toDateString(), + true + ) + ]; + const processor = new IssueProcessor( + opts, + async () => 'abot', + async p => (p == 1 ? TestIssueList : []), + async (num, dt) => [], + async (issue, label) => new Date().toDateString() + ); + + // process our fake issue list + await processor.processIssues(1); + + expect(processor.staleIssues.length).toEqual(0); + expect(processor.closedIssues.length).toEqual(0); +}); + +test('processing a pull request opened since 2 days and with the option "daysBeforePrStale" at 2 will make it stale', async () => { + expect.assertions(2); + const opts: IssueProcessorOptions = { + ...DefaultProcessorOptions, + daysBeforeStale: 10, + daysBeforePrStale: 2 + }; + let issueDate = new Date(); + issueDate.setDate(issueDate.getDate() - 2); + const TestIssueList: Issue[] = [ + generateIssue( + opts, + 1, + 'A pull request with no label', + issueDate.toDateString(), + issueDate.toDateString(), + true + ) + ]; + const processor = new IssueProcessor( + opts, + async () => 'abot', + async p => (p == 1 ? TestIssueList : []), + async (num, dt) => [], + async (issue, label) => new Date().toDateString() + ); + + // process our fake issue list + await processor.processIssues(1); + + expect(processor.staleIssues.length).toEqual(1); + expect(processor.closedIssues.length).toEqual(0); +}); + +test('processing a pull request opened since 2 days and with the option "daysBeforePrStale" at 1 will make it stale', async () => { + expect.assertions(2); + const opts: IssueProcessorOptions = { + ...DefaultProcessorOptions, + daysBeforeStale: 10, + daysBeforePrStale: 1 + }; + let issueDate = new Date(); + issueDate.setDate(issueDate.getDate() - 2); + const TestIssueList: Issue[] = [ + generateIssue( + opts, + 1, + 'A pull request with no label', + issueDate.toDateString(), + issueDate.toDateString(), + true + ) + ]; + const processor = new IssueProcessor( + opts, + async () => 'abot', + async p => (p == 1 ? TestIssueList : []), + async (num, dt) => [], + async (issue, label) => new Date().toDateString() + ); + + // process our fake issue list + await processor.processIssues(1); + + expect(processor.staleIssues.length).toEqual(1); + expect(processor.closedIssues.length).toEqual(0); +});