Fix failing tests (#266)

This commit is contained in:
Ross Brodbeck 2021-01-15 07:35:41 -05:00 committed by GitHub
parent b5b956deb3
commit 546a4e9fd6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 106 additions and 45 deletions

View File

@ -210,6 +210,7 @@ test('processing a stale issue containing a space in the label will close it', a
const processor = new IssueProcessor( const processor = new IssueProcessor(
opts, opts,
async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num, dt) => [],
async (issue, label) => new Date().toDateString() async (issue, label) => new Date().toDateString()
@ -240,6 +241,7 @@ test('processing a stale issue containing a slash in the label will close it', a
const processor = new IssueProcessor( const processor = new IssueProcessor(
opts, opts,
async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num, dt) => [],
async (issue, label) => new Date().toDateString() async (issue, label) => new Date().toDateString()
@ -430,8 +432,8 @@ test('stale closed prs will not be closed', async () => {
DefaultProcessorOptions, DefaultProcessorOptions,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
// process our fake issue list // process our fake issue list
@ -457,7 +459,7 @@ test('locked issues will not be marked stale', async () => {
const processor = new IssueProcessor( const processor = new IssueProcessor(
DefaultProcessorOptions, DefaultProcessorOptions,
async () => 'abot', async () => 'abot',
async p => p == 1 ? TestIssueList : [] async p => (p == 1 ? TestIssueList : [])
); );
// process our fake issue list // process our fake issue list
@ -484,8 +486,8 @@ test('stale locked issues will not be closed', async () => {
DefaultProcessorOptions, DefaultProcessorOptions,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
// process our fake issue list // process our fake issue list
@ -511,7 +513,7 @@ test('locked prs will not be marked stale', async () => {
const processor = new IssueProcessor( const processor = new IssueProcessor(
DefaultProcessorOptions, DefaultProcessorOptions,
async () => 'abot', async () => 'abot',
async p => p == 1 ? TestIssueList : [] async p => (p == 1 ? TestIssueList : [])
); );
// process our fake issue list // process our fake issue list
@ -538,8 +540,8 @@ test('stale locked prs will not be closed', async () => {
DefaultProcessorOptions, DefaultProcessorOptions,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
// process our fake issue list // process our fake issue list
@ -563,8 +565,8 @@ test('exempt issue labels will not be marked stale', async () => {
opts, opts,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
// process our fake issue list // process our fake issue list
@ -586,8 +588,8 @@ test('exempt issue labels will not be marked stale (multi issue label with space
opts, opts,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
// process our fake issue list // process our fake issue list
@ -609,8 +611,8 @@ test('exempt issue labels will not be marked stale (multi issue label)', async (
opts, opts,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
// process our fake issue list // process our fake issue list
@ -635,8 +637,8 @@ test('exempt pr labels will not be marked stale', async () => {
opts, opts,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
// process our fake issue list // process our fake issue list
@ -661,8 +663,8 @@ test('stale issues should not be closed if days is set to -1', async () => {
opts, opts,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
// process our fake issue list // process our fake issue list
@ -690,8 +692,8 @@ test('stale label should be removed if a comment was added to a stale issue', as
opts, opts,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [{user: {login: 'notme', type: 'User'}}], // return a fake comment to indicate there was an update async (num: number, dt: string) => [{user: {login: 'notme', type: 'User'}}], // return a fake comment to indicate there was an update
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
// process our fake issue list // process our fake issue list
@ -721,8 +723,8 @@ test('stale label should not be removed if a comment was added by the bot (and t
opts, opts,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [{user: {login: 'abot', type: 'User'}}], // return a fake comment to indicate there was an update by the bot async (num: number, dt: string) => [{user: {login: 'abot', type: 'User'}}], // return a fake comment to indicate there was an update by the bot
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
// process our fake issue list // process our fake issue list
@ -752,9 +754,10 @@ test('stale label containing a space should be removed if a comment was added to
const processor = new IssueProcessor( const processor = new IssueProcessor(
opts, opts,
async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [{user: {login: 'notme', type: 'User'}}], // return a fake comment to indicate there was an update async (num: number, dt: string) => [{user: {login: 'notme', type: 'User'}}], // return a fake comment to indicate there was an update
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
// process our fake issue list // process our fake issue list
@ -818,8 +821,8 @@ test('stale issues should be closed if the closed nubmer of days (additive) is a
opts, opts,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
// process our fake issue list // process our fake issue list
@ -883,8 +886,8 @@ test('skips stale message on issues when skip-stale-issue-message is set', async
opts, opts,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
// for sake of testing, mocking private function // for sake of testing, mocking private function
@ -928,8 +931,8 @@ test('skips stale message on prs when skip-stale-pr-message is set', async () =>
opts, opts,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
// for sake of testing, mocking private function // for sake of testing, mocking private function
@ -974,8 +977,8 @@ test('not providing state takes precedence over skipStaleIssueMessage', async ()
opts, opts,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
await processor.processIssues(1); await processor.processIssues(1);
@ -1008,8 +1011,8 @@ test('not providing stalePrMessage takes precedence over skipStalePrMessage', as
opts, opts,
async () => 'abot', async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
await processor.processIssues(1); await processor.processIssues(1);
@ -1035,9 +1038,10 @@ test('git branch is deleted when option is enabled', async () => {
const processor = new IssueProcessor( const processor = new IssueProcessor(
opts, opts,
async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
await processor.processIssues(1); await processor.processIssues(1);
@ -1063,9 +1067,10 @@ test('git branch is not deleted when issue is not pull request', async () => {
const processor = new IssueProcessor( const processor = new IssueProcessor(
opts, opts,
async () => 'abot',
async p => (p == 1 ? TestIssueList : []), async p => (p == 1 ? TestIssueList : []),
async (num, dt) => [], async (num: number, dt: string) => [],
async (issue, label) => new Date().toDateString() async (issue: Issue, label: string) => new Date().toDateString()
); );
await processor.processIssues(1); await processor.processIssues(1);

63
dist/index.js vendored
View File

@ -49,6 +49,7 @@ class IssueProcessor {
this.operationsLeft = 0; this.operationsLeft = 0;
this.staleIssues = []; this.staleIssues = [];
this.closedIssues = []; this.closedIssues = [];
this.deletedBranchIssues = [];
this.removedLabelIssues = []; this.removedLabelIssues = [];
this.options = options; this.options = options;
this.operationsLeft = options.operationsPerRun; this.operationsLeft = options.operationsPerRun;
@ -119,6 +120,12 @@ class IssueProcessor {
} }
// does this issue have a stale label? // does this issue have a stale label?
let isStale = is_labeled_1.isLabeled(issue, staleLabel); let isStale = is_labeled_1.isLabeled(issue, staleLabel);
if (isStale) {
core.info(`This issue has a stale label`);
}
else {
core.info(`This issue hasn't a stale label`);
}
// should this issue be marked stale? // should this issue be marked stale?
const shouldBeStale = !IssueProcessor.updatedSince(issue.updated_at, this.options.daysBeforeStale); const shouldBeStale = !IssueProcessor.updatedSince(issue.updated_at, this.options.daysBeforeStale);
// determine if this issue needs to be marked stale first // determine if this issue needs to be marked stale first
@ -162,6 +169,11 @@ class IssueProcessor {
if (!issueHasComments && !issueHasUpdate) { if (!issueHasComments && !issueHasUpdate) {
core.info(`Closing ${issueType} because it was last updated on ${issue.updated_at}`); core.info(`Closing ${issueType} because it was last updated on ${issue.updated_at}`);
yield this.closeIssue(issue, closeMessage, closeLabel); yield this.closeIssue(issue, closeMessage, closeLabel);
if (this.options.deleteBranch && issue.pull_request) {
core.info(`Deleting branch for #${issue.number} as delete-branch option was specified`);
yield this.deleteBranch(issue);
this.deletedBranchIssues.push(issue);
}
} }
else { else {
core.info(`Stale ${issueType} is not old enough to close yet (hasComments? ${issueHasComments}, hasUpdate? ${issueHasUpdate})`); core.info(`Stale ${issueType} is not old enough to close yet (hasComments? ${issueHasComments}, hasUpdate? ${issueHasUpdate})`);
@ -325,12 +337,56 @@ class IssueProcessor {
} }
}); });
} }
getPullRequest(pullNumber) {
return __awaiter(this, void 0, void 0, function* () {
this.operationsLeft -= 1;
try {
const pullRequest = yield this.client.pulls.get({
owner: github_1.context.repo.owner,
repo: github_1.context.repo.repo,
pull_number: pullNumber
});
return pullRequest.data;
}
catch (error) {
core.error(`Error getting pull request ${pullNumber}: ${error.message}`);
}
});
}
// Delete the branch on closed pull request
deleteBranch(issue) {
return __awaiter(this, void 0, void 0, function* () {
core.info(`Delete branch from closed issue #${issue.number} - ${issue.title}`);
if (this.options.debugOnly) {
return;
}
const pullRequest = yield this.getPullRequest(issue.number);
if (!pullRequest) {
core.info(`Not deleting branch as pull request not found for issue ${issue.number}`);
return;
}
const branch = pullRequest.head.ref;
core.info(`Deleting branch ${branch} from closed issue #${issue.number}`);
this.operationsLeft -= 1;
try {
yield this.client.git.deleteRef({
owner: github_1.context.repo.owner,
repo: github_1.context.repo.repo,
ref: `heads/${branch}`
});
}
catch (error) {
core.error(`Error deleting branch ${branch} from issue #${issue.number}: ${error.message}`);
}
});
}
// Remove a label from an issue // Remove a label from an issue
removeLabel(issue, label) { removeLabel(issue, label) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
core.info(`Removing label from issue #${issue.number}`); core.info(`Removing label "${label}" from issue #${issue.number}`);
this.removedLabelIssues.push(issue); this.removedLabelIssues.push(issue);
this.operationsLeft -= 1; this.operationsLeft -= 1;
// @todo remove the debug only to be able to test the code below
if (this.options.debugOnly) { if (this.options.debugOnly) {
return; return;
} }
@ -339,7 +395,7 @@ class IssueProcessor {
owner: github_1.context.repo.owner, owner: github_1.context.repo.owner,
repo: github_1.context.repo.repo, repo: github_1.context.repo.repo,
issue_number: issue.number, issue_number: issue.number,
name: encodeURIComponent(label) // A label can have a "?" in the name name: label
}); });
} }
catch (error) { catch (error) {
@ -517,7 +573,8 @@ function getAndValidateArgs() {
debugOnly: core.getInput('debug-only') === 'true', debugOnly: core.getInput('debug-only') === 'true',
ascending: core.getInput('ascending') === 'true', ascending: core.getInput('ascending') === 'true',
skipStalePrMessage: core.getInput('skip-stale-pr-message') === 'true', skipStalePrMessage: core.getInput('skip-stale-pr-message') === 'true',
skipStaleIssueMessage: core.getInput('skip-stale-issue-message') === 'true' skipStaleIssueMessage: core.getInput('skip-stale-issue-message') === 'true',
deleteBranch: core.getInput('delete-branch') === 'true'
}; };
for (const numberInput of [ for (const numberInput of [
'days-before-stale', 'days-before-stale',

View File

@ -309,8 +309,7 @@ export class IssueProcessor {
const comments = await this.listIssueComments(issue.number, sinceDate); const comments = await this.listIssueComments(issue.number, sinceDate);
const filteredComments = comments.filter( const filteredComments = comments.filter(
comment => comment => comment.user.type === 'User' && comment.user.login !== actor
comment.user.type === 'User' && comment.user.login !== actor
); );
core.info( core.info(
@ -347,10 +346,10 @@ export class IssueProcessor {
try { try {
actor = await this.client.users.getAuthenticated(); actor = await this.client.users.getAuthenticated();
} catch (error) { } catch (error) {
return context.actor return context.actor;
} }
return actor.data.login return actor.data.login;
} }
// grab issues from github in baches of 100 // grab issues from github in baches of 100