OLD | NEW |
| (Empty) |
1 <!-- | |
2 Copyright 2014 The Chromium Authors. All rights reserved. | |
3 Use of this source code is governed by a BSD-style license that can be | |
4 found in the LICENSE file. | |
5 --> | |
6 | |
7 <link rel="import" href="../ct-failure-group.html"> | |
8 | |
9 <script> | |
10 (function () { | |
11 | |
12 var assert = chai.assert; | |
13 | |
14 describe('ct-sheriff-failure-group', function() { | |
15 | |
16 beforeEach(function() { | |
17 localStorage.removeItem('CTFailureGroupAnnotations'); | |
18 }); | |
19 | |
20 var key = 0; | |
21 function newFailureWithAnnotation(annotation, isTreeCloser) { | |
22 return new CTStepFailure('step', 'reason', [ | |
23 {key: String(key++), annotation: annotation, isTreeCloser: isTreeCloser} | |
24 ]); | |
25 } | |
26 | |
27 describe('category', function() { | |
28 it('should be "default" by default', function() { | |
29 var group = new CTFailureGroup('', new CTStepFailureGroupData([])); | |
30 assert.equal(group.category, 'default'); | |
31 }); | |
32 | |
33 it('should be "snoozed" when snoozed', function() { | |
34 var group = new CTFailureGroup('', new CTStepFailureGroupData( | |
35 [newFailureWithAnnotation({snoozeTime: Date.now() + 1000 * 1000})])); | |
36 assert.equal(group.category, 'snoozed'); | |
37 }); | |
38 | |
39 it('should be "failedOnce" when there is only one failure', function() { | |
40 var failure = newFailureWithAnnotation(); | |
41 failure.resultNodesByBuilder = {some_key: {failingBuildCount: 1}} | |
42 var group = new CTFailureGroup('', new CTStepFailureGroupData( | |
43 [failure])); | |
44 assert.equal(group.category, 'failedOnce'); | |
45 }); | |
46 | |
47 it('should be "failedOnce" when each failure only failed once', function() { | |
48 var failure = newFailureWithAnnotation(); | |
49 failure.resultNodesByBuilder = {some_key: {failingBuildCount: 1}} | |
50 var failure2 = newFailureWithAnnotation(); | |
51 failure2.resultNodesByBuilder = {some_key: {failingBuildCount: 1}} | |
52 var group = new CTFailureGroup('', new CTStepFailureGroupData( | |
53 [failure, failure2])); | |
54 assert.equal(group.category, 'failedOnce'); | |
55 }); | |
56 | |
57 it('should not be "failedOnce" when there is more than one failure', functio
n() { | |
58 var failure = newFailureWithAnnotation(); | |
59 failure.resultNodesByBuilder = {some_key: {failingBuildCount: 1}, | |
60 other_key: {failingBuildCount: 1}} | |
61 var group = new CTFailureGroup('', new CTStepFailureGroupData( | |
62 [failure])); | |
63 assert.equal(group.category, 'default'); | |
64 }); | |
65 | |
66 it('treeCloser should win over failedOnce', function() { | |
67 var failure = newFailureWithAnnotation(); | |
68 failure.resultNodesByBuilder = {some_key: {failingBuildCount: 1, isTreeClo
ser: true}} | |
69 var group = new CTFailureGroup('', new CTStepFailureGroupData( | |
70 [failure])); | |
71 assert.equal(group.category, 'treeCloser'); | |
72 }); | |
73 | |
74 it('snoozed should win over treeCloser', function() { | |
75 var failure = newFailureWithAnnotation({snoozeTime: Date.now() + 1000 * 10
00}, true); | |
76 var group = new CTFailureGroup('', new CTStepFailureGroupData( | |
77 [failure])); | |
78 assert.equal(group.category, 'snoozed'); | |
79 }); | |
80 }); | |
81 | |
82 describe('snooze', function() { | |
83 it('should set isSnoozed', function(done) { | |
84 var group = new CTFailureGroup('', new CTStepFailureGroupData([newFailureW
ithAnnotation()])); | |
85 group.snoozeUntil(Date.now() + 1000 * 1000).then(function() { | |
86 assert.isTrue(group.isSnoozed); | |
87 done(); | |
88 }); | |
89 }); | |
90 }); | |
91 | |
92 describe('unsnooze', function() { | |
93 it('should clear isSnoozed', function(done) { | |
94 var group = new CTFailureGroup('', new CTStepFailureGroupData([newFailureW
ithAnnotation()])); | |
95 group.snoozeUntil(Date.now() + 1000 * 1000).then(function() { | |
96 group.unsnooze().then(function() { | |
97 assert.isFalse(group.isSnoozed); | |
98 done(); | |
99 }); | |
100 }); | |
101 }); | |
102 }); | |
103 | |
104 describe('setBug', function() { | |
105 it('should store the bug', function(done) { | |
106 var group = new CTFailureGroup('', new CTStepFailureGroupData([newFailureW
ithAnnotation()])); | |
107 group.setBug('123').then(function() { | |
108 assert.equal(group.bug, 'https://crbug.com/123'); | |
109 assert.equal(group._annotation.bug, 'https://crbug.com/123'); | |
110 assert.equal(group.bugLabel, 'Bug 123'); | |
111 done(); | |
112 }); | |
113 }); | |
114 | |
115 it('should support URLs', function(done) { | |
116 var group = new CTFailureGroup('', new CTStepFailureGroupData([newFailureW
ithAnnotation()])); | |
117 group.setBug('https://foobar.com/?id=876&x=y').then(function() { | |
118 assert.equal(group.bug, 'https://foobar.com/?id=876&x=y'); | |
119 assert.equal(group._annotation.bug, 'https://foobar.com/?id=876&x=y'); | |
120 assert.equal(group.bugLabel, 'Bug 876'); | |
121 done(); | |
122 }); | |
123 }); | |
124 }); | |
125 | |
126 describe('clearBug', function() { | |
127 it('should work', function(done) { | |
128 var group = new CTFailureGroup('', new CTStepFailureGroupData([])); | |
129 group.setBug('123').then(function() { | |
130 group.clearBug().then(function() { | |
131 assert.isUndefined(group.bug); | |
132 assert.isUndefined(group.bugLabel); | |
133 assert.notProperty(group._annotation, 'bug'); | |
134 done(); | |
135 }); | |
136 }); | |
137 }); | |
138 }); | |
139 | |
140 describe('annotations', function() { | |
141 it('should have sensible defaults', function() { | |
142 var group = new CTFailureGroup('', new CTStepFailureGroupData([])); | |
143 assert.deepEqual(group._annotation, {}); | |
144 assert.isFalse(group.isSnoozed); | |
145 assert.isUndefined(group.bug); | |
146 assert.isUndefined(group.bugLabel); | |
147 }); | |
148 | |
149 it('should compute properties', function() { | |
150 var group = new CTFailureGroup('', new CTStepFailureGroupData([newFailureW
ithAnnotation( | |
151 {snoozeTime: Date.now() + 1000 * 1000, bug: 'https://crbug.com/123'})]
)); | |
152 assert.isTrue(group.isSnoozed); | |
153 assert.equal(group.bug, 'https://crbug.com/123'); | |
154 }); | |
155 | |
156 it('should ignore snoozeTime unless it is present on all alerts', function()
{ | |
157 var notSnoozedMultipleAlerts = new CTFailureGroup('', new CTStepFailureGro
upData([ | |
158 new CTStepFailure('step', 'reason', [ | |
159 {key: 'a', annotation: {snoozeTime: Date.now() + 1000 * 1000}}, | |
160 {key: 'b',}, | |
161 ]) | |
162 ])); | |
163 var notSnoozedMultipleFailures = new CTFailureGroup('', new CTStepFailureG
roupData([ | |
164 new CTStepFailure('step', 'reason', [ | |
165 {key: 'a', annotation: {snoozeTime: Date.now() + 1000 * 1000}}, | |
166 ]), | |
167 new CTStepFailure('step', 'reason', [ | |
168 {key: 'b'}, | |
169 ]), | |
170 ])); | |
171 var snoozedMultipleAlerts = new CTFailureGroup('', new CTStepFailureGroupD
ata([ | |
172 new CTStepFailure('step', 'reason', [ | |
173 {key: 'a', annotation: {snoozeTime: Date.now() + 1000 * 1000}}, | |
174 {key: 'b', annotation: {snoozeTime: Date.now() + 1000 * 1000}}, | |
175 ]) | |
176 ])); | |
177 var snoozedMultipleFailures = new CTFailureGroup('', new CTStepFailureGrou
pData([ | |
178 new CTStepFailure('step', 'reason', [ | |
179 {key: 'a', annotation: {snoozeTime: Date.now() + 1000 * 1000}}, | |
180 ]), | |
181 new CTStepFailure('step', 'reason', [ | |
182 {key: 'b', annotation: {snoozeTime: Date.now() + 1000 * 1000}}, | |
183 ]), | |
184 ])); | |
185 assert.isFalse(notSnoozedMultipleAlerts.isSnoozed); | |
186 assert.isFalse(notSnoozedMultipleFailures.isSnoozed); | |
187 assert.isTrue(snoozedMultipleAlerts.isSnoozed); | |
188 assert.isTrue(snoozedMultipleFailures.isSnoozed); | |
189 }); | |
190 | |
191 it('should use the earliest snoozeTime of all alerts', function() { | |
192 var timeFuture = Date.now() + 1000 * 1000; | |
193 var timePast = Date.now() - 1000 * 1000; | |
194 | |
195 var notSnoozed = new CTFailureGroup('', new CTStepFailureGroupData([ | |
196 new CTStepFailure('step', 'reason', [ | |
197 {key: 'a', annotation: {snoozeTime: timeFuture}}, | |
198 {key: 'b', annotation: {snoozeTime: timePast}}, | |
199 ]) | |
200 ])); | |
201 | |
202 assert.isFalse(notSnoozed.isSnoozed); | |
203 }); | |
204 | |
205 it('should be persisted', function(done) { | |
206 var group = new CTFailureGroup('', new CTStepFailureGroupData( | |
207 [newFailureWithAnnotation(), newFailureWithAnnotation()])); | |
208 group.snoozeUntil(123).then(function() { | |
209 group.setBug('456').then(function() { | |
210 CTFailureGroup.fetchAnnotations().then(function(annotations) { | |
211 assert.deepEqual(annotations[group.data.failures[0].keys()[0]], {sno
ozeTime: 123, bug: 'https://crbug.com/456'}); | |
212 assert.deepEqual(annotations[group.data.failures[1].keys()[0]], {sno
ozeTime: 123, bug: 'https://crbug.com/456'}); | |
213 done(); | |
214 }); | |
215 }); | |
216 }); | |
217 }); | |
218 }); | |
219 }); | |
220 | |
221 })() | |
222 </script> | |
OLD | NEW |