-
Notifications
You must be signed in to change notification settings - Fork 116
/
Copy pathci_start.test.js
106 lines (91 loc) · 3.16 KB
/
ci_start.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import assert from 'assert';
import sinon from 'sinon';
import FormData from 'form-data';
import {
RunPRJob,
CI_CRUMB_URL,
CI_PR_URL
} from '../../lib/ci/run_ci.js';
import TestCLI from '../fixtures/test_cli.js';
describe('Jenkins', () => {
const owner = 'nodejs';
const repo = 'node-auto-test';
const prid = 123456;
const crumb = 'asdf1234';
before(() => {
sinon.stub(FormData.prototype, 'append').callsFake(function(key, value) {
assert.strictEqual(key, 'json');
const { parameter } = JSON.parse(value);
const expectedParameters = {
CERTIFY_SAFE: 'on',
TARGET_GITHUB_ORG: owner,
TARGET_REPO_NAME: repo,
PR_ID: prid,
REBASE_ONTO: '<pr base branch>',
DESCRIPTION_SETTER_DESCRIPTION: ''
};
for (const { name, value } of parameter) {
assert.strictEqual(value, expectedParameters[name]);
delete expectedParameters[name];
}
assert.strictEqual(Object.keys(expectedParameters).length, 0);
this._validated = true;
return FormData.prototype.append.wrappedMethod.bind(this)(key, value);
});
});
after(() => {
sinon.restore();
});
it('should fail if starting node-pull-request throws', async() => {
const cli = new TestCLI();
const request = {
text: sinon.stub().throws(),
json: sinon.stub().withArgs(CI_CRUMB_URL)
.returns(Promise.resolve({ crumb }))
};
const jobRunner = new RunPRJob(cli, request, owner, repo, prid);
assert.strictEqual(await jobRunner.start(), false);
});
it('should return false if crumb fails', async() => {
const cli = new TestCLI();
const request = {
json: sinon.stub().throws()
};
const jobRunner = new RunPRJob(cli, request, owner, repo, prid);
assert.strictEqual(await jobRunner.start(), false);
});
it('should start node-pull-request', async() => {
const cli = new TestCLI();
const request = {
fetch: sinon.stub()
.callsFake((url, { method, headers, body }) => {
assert.strictEqual(url, CI_PR_URL);
assert.strictEqual(method, 'POST');
assert.deepStrictEqual(headers, { 'Jenkins-Crumb': crumb });
assert.ok(body._validated);
return Promise.resolve({ status: 201 });
}),
json: sinon.stub().withArgs(CI_CRUMB_URL)
.returns(Promise.resolve({ crumb }))
};
const jobRunner = new RunPRJob(cli, request, owner, repo, prid);
assert.ok(await jobRunner.start());
});
it('should return false if node-pull-request not started', async() => {
const cli = new TestCLI();
const request = {
fetch: sinon.stub()
.callsFake((url, { method, headers, body }) => {
assert.strictEqual(url, CI_PR_URL);
assert.strictEqual(method, 'POST');
assert.deepStrictEqual(headers, { 'Jenkins-Crumb': crumb });
assert.ok(body._validated);
return Promise.resolve({ status: 401 });
}),
json: sinon.stub().withArgs(CI_CRUMB_URL)
.returns(Promise.resolve({ crumb }))
};
const jobRunner = new RunPRJob(cli, request, owner, repo, prid);
assert.strictEqual(await jobRunner.start(), false);
});
});