0576628d67223d6c43f604bd502975455325628a
[WebKit-https.git] / Websites / perf.webkit.org / server-tests / api-build-requests-tests.js
1 'use strict';
2
3 let assert = require('assert');
4 let TestServer = require('./resources/test-server.js');
5
6 describe('/api/build-requests', function () {
7     this.timeout(10000);
8     TestServer.inject();
9
10     it('should return "TriggerableNotFound" when the database is empty', function (done) {
11         TestServer.remoteAPI().getJSON('/api/build-requests/build-webkit').then(function (content) {
12             assert.equal(content['status'], 'TriggerableNotFound');
13             done();
14         }).catch(done);
15     });
16
17     it('should return an empty list when there are no build requests', function (done) {
18         TestServer.database().connect().then(function () {
19             return TestServer.database().insert('build_triggerables', {name: 'build-webkit'});
20         }).then(function () {
21             return TestServer.remoteAPI().getJSON('/api/build-requests/build-webkit');
22         }).then(function (content) {
23             assert.equal(content['status'], 'OK');
24             assert.deepEqual(content['buildRequests'], []);
25             assert.deepEqual(content['rootSets'], []);
26             assert.deepEqual(content['roots'], []);
27             assert.deepEqual(Object.keys(content).sort(), ['buildRequests', 'rootSets', 'roots', 'status']);
28             done();
29         }).catch(done);
30     });
31
32     function addMockData(db)
33     {
34         return Promise.all([
35             db.insert('build_triggerables', {id: 1, name: 'build-webkit'}),
36             db.insert('repositories', {id: 9, name: 'OS X'}),
37             db.insert('repositories', {id: 11, name: 'WebKit'}),
38             db.insert('commits', {id: 87832, repository: 9, revision: '10.11 15A284'}),
39             db.insert('commits', {id: 93116, repository: 11, revision: '191622', time: new Date(1445945816878)}),
40             db.insert('commits', {id: 96336, repository: 11, revision: '192736', time: new Date(1448225325650)}),
41             db.insert('platforms', {id: 65, name: 'some platform'}),
42             db.insert('tests', {id: 200, name: 'some test'}),
43             db.insert('test_metrics', {id: 300, test: 200, name: 'some metric'}),
44             db.insert('root_sets', {id: 401}),
45             db.insert('roots', {set: 401, commit: 87832}),
46             db.insert('roots', {set: 401, commit: 93116}),
47             db.insert('root_sets', {id: 402}),
48             db.insert('roots', {set: 402, commit: 87832}),
49             db.insert('roots', {set: 402, commit: 96336}),
50             db.insert('analysis_tasks', {id: 500, platform: 65, metric: 300, name: 'some task'}),
51             db.insert('analysis_test_groups', {id: 600, task: 500, name: 'some test group'}),
52             db.insert('build_requests', {id: 700, triggerable: 1, platform: 65, test: 200, group: 600, order: 0, root_set: 401}),
53             db.insert('build_requests', {id: 701, triggerable: 1, platform: 65, test: 200, group: 600, order: 1, root_set: 402}),
54             db.insert('build_requests', {id: 702, triggerable: 1, platform: 65, test: 200, group: 600, order: 2, root_set: 401}),
55             db.insert('build_requests', {id: 703, triggerable: 1, platform: 65, test: 200, group: 600, order: 3, root_set: 402}),
56         ]);
57     }
58
59     it('should return build requets associated with a given triggerable with appropriate roots and rootSets', function (done) {
60         let db = TestServer.database();
61         db.connect().then(function () {
62             return addMockData(db);
63         }).then(function () {
64             return TestServer.remoteAPI().getJSONWithStatus('/api/build-requests/build-webkit');
65         }).then(function (content) {
66             assert.deepEqual(Object.keys(content).sort(), ['buildRequests', 'rootSets', 'roots', 'status']);
67
68             assert.equal(content['rootSets'].length, 2);
69             assert.equal(content['rootSets'][0].id, 401);
70             assert.deepEqual(content['rootSets'][0].roots, ['87832', '93116']);
71             assert.equal(content['rootSets'][1].id, 402);
72             assert.deepEqual(content['rootSets'][1].roots, ['87832', '96336']);
73
74             assert.equal(content['roots'].length, 3);
75             assert.equal(content['roots'][0].id, 87832);
76             assert.equal(content['roots'][0].repository, '9');
77             assert.equal(content['roots'][0].revision, '10.11 15A284');
78             assert.equal(content['roots'][1].id, 93116);
79             assert.equal(content['roots'][1].repository, '11');
80             assert.equal(content['roots'][1].revision, '191622');
81             assert.equal(content['roots'][2].id, 96336);
82             assert.equal(content['roots'][2].repository, '11');
83             assert.equal(content['roots'][2].revision, '192736');
84
85             assert.equal(content['buildRequests'].length, 4);
86             assert.deepEqual(content['buildRequests'][0].id, 700);
87             assert.deepEqual(content['buildRequests'][0].order, 0);
88             assert.deepEqual(content['buildRequests'][0].platform, '65');
89             assert.deepEqual(content['buildRequests'][0].rootSet, 401);
90             assert.deepEqual(content['buildRequests'][0].status, 'pending');
91             assert.deepEqual(content['buildRequests'][0].test, '200');
92
93             assert.deepEqual(content['buildRequests'][1].id, 701);
94             assert.deepEqual(content['buildRequests'][1].order, 1);
95             assert.deepEqual(content['buildRequests'][1].platform, '65');
96             assert.deepEqual(content['buildRequests'][1].rootSet, 402);
97             assert.deepEqual(content['buildRequests'][1].status, 'pending');
98             assert.deepEqual(content['buildRequests'][1].test, '200');
99
100             assert.deepEqual(content['buildRequests'][2].id, 702);
101             assert.deepEqual(content['buildRequests'][2].order, 2);
102             assert.deepEqual(content['buildRequests'][2].platform, '65');
103             assert.deepEqual(content['buildRequests'][2].rootSet, 401);
104             assert.deepEqual(content['buildRequests'][2].status, 'pending');
105             assert.deepEqual(content['buildRequests'][2].test, '200');
106
107             assert.deepEqual(content['buildRequests'][3].id, 703);
108             assert.deepEqual(content['buildRequests'][3].order, 3);
109             assert.deepEqual(content['buildRequests'][3].platform, '65');
110             assert.deepEqual(content['buildRequests'][3].rootSet, 402);
111             assert.deepEqual(content['buildRequests'][3].status, 'pending');
112             assert.deepEqual(content['buildRequests'][3].test, '200');
113             done();
114         }).catch(done);
115     });
116
117     it('should return support useLegacyIdResolution option', function (done) {
118         let db = TestServer.database();
119         db.connect().then(function () {
120             return addMockData(db);
121         }).then(function () {
122             return TestServer.remoteAPI().getJSONWithStatus('/api/build-requests/build-webkit?useLegacyIdResolution=true');
123         }).then(function (content) {
124             assert.deepEqual(Object.keys(content).sort(), ['buildRequests', 'rootSets', 'roots', 'status']);
125
126             assert.equal(content['rootSets'].length, 2);
127             assert.equal(content['rootSets'][0].id, 401);
128             assert.deepEqual(content['rootSets'][0].roots, ['87832', '93116']);
129             assert.equal(content['rootSets'][1].id, 402);
130             assert.deepEqual(content['rootSets'][1].roots, ['87832', '96336']);
131
132             assert.equal(content['roots'].length, 3);
133             assert.equal(content['roots'][0].id, 87832);
134             assert.equal(content['roots'][0].repository, 'OS X');
135             assert.equal(content['roots'][0].revision, '10.11 15A284');
136             assert.equal(content['roots'][1].id, 93116);
137             assert.equal(content['roots'][1].repository, 'WebKit');
138             assert.equal(content['roots'][1].revision, '191622');
139             assert.equal(content['roots'][2].id, 96336);
140             assert.equal(content['roots'][2].repository, 'WebKit');
141             assert.equal(content['roots'][2].revision, '192736');
142
143             assert.equal(content['buildRequests'].length, 4);
144             assert.deepEqual(content['buildRequests'][0].id, 700);
145             assert.deepEqual(content['buildRequests'][0].order, 0);
146             assert.deepEqual(content['buildRequests'][0].platform, 'some platform');
147             assert.deepEqual(content['buildRequests'][0].rootSet, 401);
148             assert.deepEqual(content['buildRequests'][0].status, 'pending');
149             assert.deepEqual(content['buildRequests'][0].test, ['some test']);
150
151             assert.deepEqual(content['buildRequests'][1].id, 701);
152             assert.deepEqual(content['buildRequests'][1].order, 1);
153             assert.deepEqual(content['buildRequests'][1].platform, 'some platform');
154             assert.deepEqual(content['buildRequests'][1].rootSet, 402);
155             assert.deepEqual(content['buildRequests'][1].status, 'pending');
156             assert.deepEqual(content['buildRequests'][1].test, ['some test']);
157
158             assert.deepEqual(content['buildRequests'][2].id, 702);
159             assert.deepEqual(content['buildRequests'][2].order, 2);
160             assert.deepEqual(content['buildRequests'][2].platform, 'some platform');
161             assert.deepEqual(content['buildRequests'][2].rootSet, 401);
162             assert.deepEqual(content['buildRequests'][2].status, 'pending');
163             assert.deepEqual(content['buildRequests'][2].test, ['some test']);
164
165             assert.deepEqual(content['buildRequests'][3].id, 703);
166             assert.deepEqual(content['buildRequests'][3].order, 3);
167             assert.deepEqual(content['buildRequests'][3].platform, 'some platform');
168             assert.deepEqual(content['buildRequests'][3].rootSet, 402);
169             assert.deepEqual(content['buildRequests'][3].status, 'pending');
170             assert.deepEqual(content['buildRequests'][3].test, ['some test']);
171             done();
172         }).catch(done);
173     });
174
175 });