mirror of
https://github.com/n8n-io/n8n.git
synced 2026-05-12 16:10:30 +02:00
148 lines
3.7 KiB
JavaScript
148 lines
3.7 KiB
JavaScript
import { describe, it, mock, before } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { readPrLabels } from './github-helpers.mjs';
|
|
|
|
/**
|
|
* Run these tests by running
|
|
*
|
|
* node --test --experimental-test-module-mocks ./.github/scripts/cleanup-release-branch.test.mjs
|
|
* */
|
|
|
|
// mock.module must be called before the module under test is imported,
|
|
// because static imports are hoisted and resolve before any code runs.
|
|
mock.module('./github-helpers.mjs', {
|
|
namedExports: {
|
|
ensureEnvVar: () => {}, // no-op
|
|
readPrLabels: (pr) => {
|
|
return readPrLabels(pr);
|
|
},
|
|
},
|
|
});
|
|
|
|
let pullRequestIsDismissedRelease;
|
|
before(async () => {
|
|
({ pullRequestIsDismissedRelease } = await import('./cleanup-release-branch.mjs'));
|
|
});
|
|
|
|
describe('pullRequestIsDismissedRelease', () => {
|
|
it('Recognizes classic dismissed pull request', () => {
|
|
const pullRequest = {
|
|
merged: false,
|
|
labels: ['release'],
|
|
base: {
|
|
ref: 'release/2.9.0',
|
|
},
|
|
head: {
|
|
ref: 'release-pr/2.9.0',
|
|
},
|
|
};
|
|
|
|
/** @type { import('./cleanup-release-branch.mjs').PullRequestCheckResult } */
|
|
const result = pullRequestIsDismissedRelease(pullRequest);
|
|
|
|
assert.equal(result.pass, true);
|
|
assert.equal(result.reason, undefined);
|
|
});
|
|
|
|
it("Doesn't pass PR with malformed head", () => {
|
|
const pullRequest = {
|
|
merged: false,
|
|
labels: ['release'],
|
|
base: {
|
|
ref: 'release/2.9.0',
|
|
},
|
|
head: {
|
|
ref: 'my-fork-release-pr/2.9.0',
|
|
},
|
|
};
|
|
|
|
/** @type { import('./cleanup-release-branch.mjs').PullRequestCheckResult } */
|
|
const result = pullRequestIsDismissedRelease(pullRequest);
|
|
|
|
assert.equal(result.pass, false);
|
|
assert.equal(result.reason, `Head ref '${pullRequest.head.ref}' is not release-pr/*`);
|
|
});
|
|
|
|
it("Doesn't pass PR with malformed base", () => {
|
|
const pullRequest = {
|
|
merged: false,
|
|
labels: ['release'],
|
|
base: {
|
|
ref: 'master',
|
|
},
|
|
head: {
|
|
ref: 'release-pr/2.9.0',
|
|
},
|
|
};
|
|
|
|
/** @type { import('./cleanup-release-branch.mjs').PullRequestCheckResult } */
|
|
const result = pullRequestIsDismissedRelease(pullRequest);
|
|
|
|
assert.equal(result.pass, false);
|
|
assert.equal(result.reason, `Base ref '${pullRequest.base.ref}' is not release/*`);
|
|
});
|
|
|
|
it("Doesn't pass merged PR's", () => {
|
|
const pullRequest = {
|
|
merged: true,
|
|
labels: ['release'],
|
|
base: {
|
|
ref: 'release/2.9.0',
|
|
},
|
|
head: {
|
|
ref: 'release-pr/2.9.0',
|
|
},
|
|
};
|
|
|
|
/** @type { import('./cleanup-release-branch.mjs').PullRequestCheckResult } */
|
|
const result = pullRequestIsDismissedRelease(pullRequest);
|
|
|
|
assert.equal(result.pass, false);
|
|
assert.equal(result.reason, `PR was merged`);
|
|
});
|
|
|
|
it("Doesn't pass on PR version mismatch", () => {
|
|
const pullRequest = {
|
|
merged: false,
|
|
labels: ['release'],
|
|
base: {
|
|
ref: 'release/2.9.0',
|
|
},
|
|
head: {
|
|
ref: 'release-pr/2.9.1',
|
|
},
|
|
};
|
|
|
|
/** @type { import('./cleanup-release-branch.mjs').PullRequestCheckResult } */
|
|
const result = pullRequestIsDismissedRelease(pullRequest);
|
|
|
|
assert.equal(result.pass, false);
|
|
assert.equal(
|
|
result.reason,
|
|
`Version mismatch: base='${pullRequest.base.ref.replace('release/', '')}' head='${pullRequest.head.ref.replace('release-pr/', '')}'`,
|
|
);
|
|
});
|
|
|
|
it("Doesn't pass a PR with missing 'release' label", () => {
|
|
const pullRequest = {
|
|
merged: false,
|
|
labels: ['release-pr', 'core-team'],
|
|
base: {
|
|
ref: 'release/2.9.0',
|
|
},
|
|
head: {
|
|
ref: 'release-pr/2.9.0',
|
|
},
|
|
};
|
|
|
|
/** @type { import('./cleanup-release-branch.mjs').PullRequestCheckResult } */
|
|
const result = pullRequestIsDismissedRelease(pullRequest);
|
|
|
|
assert.equal(result.pass, false);
|
|
assert.equal(
|
|
result.reason,
|
|
`Missing required label 'release' (labels: ${pullRequest.labels.join(', ')})`,
|
|
);
|
|
});
|
|
});
|