mirror of
https://github.com/actions/stale.git
synced 2026-01-01 04:48:17 +00:00
* feat(exempt): add new options to exempt the milestones closes #270 * test(milestones): add coverage * test(issue): add coverage * chore(rebase): fix all errors due to the rebase also made some changes regarding the change I made with the lint scripts and prettier. I did not saw that some scripts were already here and I created to more to keep the old ones as well * test(milestone): add coverage * chore(index): update index * fix(checks): remove checks over optional number options the code was actually handling the case where the values are NaN so it's fine
597 lines
20 KiB
TypeScript
597 lines
20 KiB
TypeScript
import {IIssue} from '../interfaces/issue';
|
|
import {IssueProcessorOptions} from '../IssueProcessor';
|
|
import {Issue} from './issue';
|
|
import {Milestones} from './milestones';
|
|
|
|
describe('Milestones', (): void => {
|
|
let milestones: Milestones;
|
|
let optionsInterface: IssueProcessorOptions;
|
|
let issue: Issue;
|
|
let issueInterface: IIssue;
|
|
|
|
beforeEach((): void => {
|
|
optionsInterface = {
|
|
ascending: false,
|
|
closeIssueLabel: '',
|
|
closeIssueMessage: '',
|
|
closePrLabel: '',
|
|
closePrMessage: '',
|
|
daysBeforeClose: 0,
|
|
daysBeforeIssueClose: 0,
|
|
daysBeforeIssueStale: 0,
|
|
daysBeforePrClose: 0,
|
|
daysBeforePrStale: 0,
|
|
daysBeforeStale: 0,
|
|
debugOnly: false,
|
|
deleteBranch: false,
|
|
exemptIssueLabels: '',
|
|
exemptPrLabels: '',
|
|
onlyLabels: '',
|
|
operationsPerRun: 0,
|
|
removeStaleWhenUpdated: false,
|
|
repoToken: '',
|
|
skipStaleIssueMessage: false,
|
|
skipStalePrMessage: false,
|
|
staleIssueLabel: '',
|
|
staleIssueMessage: '',
|
|
stalePrLabel: '',
|
|
stalePrMessage: '',
|
|
startDate: undefined,
|
|
exemptIssueMilestones: '',
|
|
exemptPrMilestones: '',
|
|
exemptMilestones: ''
|
|
};
|
|
issueInterface = {
|
|
created_at: '',
|
|
locked: false,
|
|
milestone: undefined,
|
|
number: 0,
|
|
pull_request: undefined,
|
|
state: '',
|
|
title: '',
|
|
updated_at: '',
|
|
labels: []
|
|
};
|
|
});
|
|
|
|
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 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 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 a pull request milestone', (): void => {
|
|
beforeEach((): void => {
|
|
optionsInterface.exemptPrMilestones = 'dummy-exempt-pr-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 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 issue 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 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 a pull request milestone', (): void => {
|
|
beforeEach((): void => {
|
|
optionsInterface.exemptPrMilestones = 'dummy-exempt-pr-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 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 issue 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 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);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|