Add the support for scheduling a A/B testing with a patch.
[WebKit-https.git] / Websites / perf.webkit.org / unit-tests / build-request-tests.js
1 'use strict';
2
3 const assert = require('assert');
4
5 require('../tools/js/v3-models.js');
6 let MockModels = require('./resources/mock-v3-models.js').MockModels;
7
8 function sampleBuildRequestData()
9 {
10     return {
11         "buildRequests": [{
12             "id": "16985",
13             "triggerable": "3",
14             "test": "844",
15             "platform": "31",
16             "testGroup": "2128",
17             "order": "0",
18             "commitSet": "4255",
19             "status": "pending",
20             "url": null,
21             "build": null,
22             "createdAt": 1458688514000
23         }],
24         "commitSets": [{
25             "id": "4255",
26             "revisionItems": [{"commit": "87832"}, {"commit": "93116"}],
27             "customRoots": [],
28         }, {
29             "id": "4256",
30             "revisionItems": [{"commit": "87832"}, {"commit": "96336"}],
31             "customRoots": [],
32         }],
33         "commits": [{
34             "id": "87832",
35             "repository": "9",
36             "revision": "10.11 15A284",
37             "time": 0
38         }, {
39             "id": "93116",
40             "repository": "11",
41             "revision": "191622",
42             "time": 1445945816878
43         }, {
44             "id": "87832",
45             "repository": "9",
46             "revision": "10.11 15A284",
47             "time": 0
48         }, {
49             "id": "96336",
50             "repository": "11",
51             "revision": "192736",
52             "time": 1448225325650
53         }],
54         "uploadedFiles": [],
55         "status": "OK"
56     };
57 }
58
59 describe('BuildRequest', function () {
60     MockModels.inject();
61
62     describe('waitingTime', function () {
63         it('should return "0 minutes" when the reference time is identically equal to createdAt', function () {
64             const data = sampleBuildRequestData();
65             const now = Date.now();
66             data.buildRequests[0].createdAt = now;
67             const request = BuildRequest.constructBuildRequestsFromData(data)[0];
68             assert.equal(request.waitingTime(now), '0 minutes');
69         });
70
71         it('should return "1 minute" when the reference time is exactly one minute head of createdAt', function () {
72             const data = sampleBuildRequestData();
73             const now = Date.now();
74             data.buildRequests[0].createdAt = now - 60 * 1000;
75             const request = BuildRequest.constructBuildRequestsFromData(data)[0];
76             assert.equal(request.waitingTime(now), '1 minute');
77         });
78
79         it('should return "1 minute" when the reference time is 75 seconds head of createdAt', function () {
80             const data = sampleBuildRequestData();
81             const now = Date.now();
82             data.buildRequests[0].createdAt = now - 75 * 1000;
83             const request = BuildRequest.constructBuildRequestsFromData(data)[0];
84             assert.equal(request.waitingTime(now), '1 minute');
85         });
86
87         it('should return "2 minutes" when the reference time is 118 seconds head of createdAt', function () {
88             const data = sampleBuildRequestData();
89             const now = Date.now();
90             data.buildRequests[0].createdAt = now - 118 * 1000;
91             const request = BuildRequest.constructBuildRequestsFromData(data)[0];
92             assert.equal(request.waitingTime(now), '2 minutes');
93         });
94
95         it('should return "75 minutes" when the reference time is 75 minutes ahead of createdAt', function () {
96             const data = sampleBuildRequestData();
97             const now = Date.now();
98             data.buildRequests[0].createdAt = now - 75 * 60 * 1000;
99             const request = BuildRequest.constructBuildRequestsFromData(data)[0];
100             assert.equal(request.waitingTime(now), '75 minutes');
101         });
102
103         it('should return "1 hour 58 minutes" when the reference time is 118 minutes ahead of createdAt', function () {
104             const data = sampleBuildRequestData();
105             const now = Date.now();
106             data.buildRequests[0].createdAt = now - 118 * 60 * 1000;
107             const request = BuildRequest.constructBuildRequestsFromData(data)[0];
108             assert.equal(request.waitingTime(now), '1 hour 58 minutes');
109         });
110
111         it('should return "3 hours 2 minutes" when the reference time is 182 minutes ahead of createdAt', function () {
112             const data = sampleBuildRequestData();
113             const now = Date.now();
114             data.buildRequests[0].createdAt = now - 182 * 60 * 1000;
115             const request = BuildRequest.constructBuildRequestsFromData(data)[0];
116             assert.equal(request.waitingTime(now), '3 hours 2 minutes');
117         });
118
119         it('should return "27 hours 14 minutes" when the reference time is 27 hours 14 minutes ahead of createdAt', function () {
120             const data = sampleBuildRequestData();
121             const now = Date.now();
122             data.buildRequests[0].createdAt = now - (27 * 3600 + 14 * 60) * 1000;
123             const request = BuildRequest.constructBuildRequestsFromData(data)[0];
124             assert.equal(request.waitingTime(now), '27 hours 14 minutes');
125         });
126
127         it('should return "2 days 3 hours" when the reference time is 51 hours 14 minutes ahead of createdAt', function () {
128             const data = sampleBuildRequestData();
129             const now = Date.now();
130             data.buildRequests[0].createdAt = now - (51 * 3600 + 14 * 60) * 1000;
131             const request = BuildRequest.constructBuildRequestsFromData(data)[0];
132             assert.equal(request.waitingTime(now), '2 days 3 hours');
133         });
134
135         it('should return "2 days 0 hours" when the reference time is 48 hours 1 minutes ahead of createdAt', function () {
136             const data = sampleBuildRequestData();
137             const now = Date.now();
138             data.buildRequests[0].createdAt = now - (48 * 3600 + 1 * 60) * 1000;
139             const request = BuildRequest.constructBuildRequestsFromData(data)[0];
140             assert.equal(request.waitingTime(now), '2 days 0 hours');
141         });
142
143         it('should return "2 days 2 hours" when the reference time is 49 hours 59 minutes ahead of createdAt', function () {
144             const data = sampleBuildRequestData();
145             const now = Date.now();
146             data.buildRequests[0].createdAt = now - (49 * 3600 + 59 * 60) * 1000;
147             const request = BuildRequest.constructBuildRequestsFromData(data)[0];
148             assert.equal(request.waitingTime(now), '2 days 2 hours');
149         });
150
151         it('should return "2 weeks 6 days" when the reference time is 20 days 5 hours 21 minutes ahead of createdAt', function () {
152             const data = sampleBuildRequestData();
153             const now = Date.now();
154             data.buildRequests[0].createdAt = now - ((20 * 24 + 5) * 3600 + 21 * 60) * 1000;
155             const request = BuildRequest.constructBuildRequestsFromData(data)[0];
156             assert.equal(request.waitingTime(now), '2 weeks 6 days');
157         });
158
159     });
160
161 });