blob: 1ae04a0fe597dae181a66cbe01a20c54a4ceb18b [file] [log] [blame]
Viktar Donich95c868e2017-01-18 22:22:15 -08001<!DOCTYPE html>
2<!--
3Copyright (C) 2017 The Android Open Source Project
4
5Licensed under the Apache License, Version 2.0 (the "License");
6you may not use this file except in compliance with the License.
7You may obtain a copy of the License at
8
9http://www.apache.org/licenses/LICENSE-2.0
10
11Unless required by applicable law or agreed to in writing, software
12distributed under the License is distributed on an "AS IS" BASIS,
13WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14See the License for the specific language governing permissions and
15limitations under the License.
16-->
17
18<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
19<title>gr-reviewer-updates-parser</title>
20
Viktar Donich29e1ce52017-03-28 17:02:44 -070021<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
Viktar Donich95c868e2017-01-18 22:22:15 -080022<script src="../../../bower_components/web-component-tester/browser.js"></script>
23
24<link rel="import" href="../../../bower_components/iron-test-helpers/iron-test-helpers.html">
25
26<script src="../../../scripts/util.js"></script>
27<script src="gr-reviewer-updates-parser.js"></script>
28
29<script>
30 suite('gr-reviewer-updates-parser tests', function() {
31 var sandbox;
32 var instance;
33
34 setup(function() {
35 sandbox = sinon.sandbox.create();
36 });
37
38 teardown(function() {
39 sandbox.restore();
40 });
41
Viktar Donich0f1296ff2017-02-02 12:39:52 -080042 test('ignores changes without messages', function() {
43 var change = {};
44 sandbox.stub(
45 GrReviewerUpdatesParser.prototype, '_filterRemovedMessages');
46 sandbox.stub(
47 GrReviewerUpdatesParser.prototype, '_groupUpdates');
48 sandbox.stub(
49 GrReviewerUpdatesParser.prototype, '_formatUpdates');
50 assert.strictEqual(GrReviewerUpdatesParser.parse(change), change);
51 assert.isFalse(
52 GrReviewerUpdatesParser.prototype._filterRemovedMessages.called);
53 assert.isFalse(
54 GrReviewerUpdatesParser.prototype._groupUpdates.called);
55 assert.isFalse(
56 GrReviewerUpdatesParser.prototype._formatUpdates.called);
57 });
58
59 test('ignores changes without reviewer updates', function() {
60 var change = {
61 messages: [],
62 };
63 sandbox.stub(
64 GrReviewerUpdatesParser.prototype, '_filterRemovedMessages');
65 sandbox.stub(
66 GrReviewerUpdatesParser.prototype, '_groupUpdates');
67 sandbox.stub(
68 GrReviewerUpdatesParser.prototype, '_formatUpdates');
69 assert.strictEqual(GrReviewerUpdatesParser.parse(change), change);
70 assert.isFalse(
71 GrReviewerUpdatesParser.prototype._filterRemovedMessages.called);
72 assert.isFalse(
73 GrReviewerUpdatesParser.prototype._groupUpdates.called);
74 assert.isFalse(
75 GrReviewerUpdatesParser.prototype._formatUpdates.called);
76 });
77
78 test('ignores changes with empty reviewer updates', function() {
79 var change = {
80 messages: [],
81 reviewer_updates: [],
82 };
83 sandbox.stub(
84 GrReviewerUpdatesParser.prototype, '_filterRemovedMessages');
85 sandbox.stub(
86 GrReviewerUpdatesParser.prototype, '_groupUpdates');
87 sandbox.stub(
88 GrReviewerUpdatesParser.prototype, '_formatUpdates');
89 assert.strictEqual(GrReviewerUpdatesParser.parse(change), change);
90 assert.isFalse(
91 GrReviewerUpdatesParser.prototype._filterRemovedMessages.called);
92 assert.isFalse(
93 GrReviewerUpdatesParser.prototype._groupUpdates.called);
94 assert.isFalse(
95 GrReviewerUpdatesParser.prototype._formatUpdates.called);
96 });
97
Viktar Donich95c868e2017-01-18 22:22:15 -080098 test('filter removed messages', function() {
99 var change = {
100 messages: [
101 {
102 message: 'msg1',
103 tag: 'autogenerated:gerrit:deleteReviewer',
104 },
105 {
106 message: 'msg2',
107 tag: 'foo',
108 }
109 ],
110 };
111 instance = new GrReviewerUpdatesParser(change);
112 instance._filterRemovedMessages();
113 assert.deepEqual(instance.result, {
114 messages: [{
115 message: 'msg2',
116 tag: 'foo',
117 }],
118 });
119 });
120
121 test('group reviewer updates', function() {
122 var reviewer1 = {_account_id: 1};
123 var reviewer2 = {_account_id: 2};
124 var date1 = '2017-01-26 12:11:50.000000000';
125 var date2 = '2017-01-26 12:11:55.000000000'; // Within threshold.
126 var date3 = '2017-01-26 12:33:50.000000000';
127 var date4 = '2017-01-26 12:44:50.000000000';
128 var makeItem = function(state, reviewer, opt_date, opt_author) {
129 return {
130 reviewer: reviewer,
131 updated: opt_date || date1,
132 updated_by: opt_author || reviewer1,
133 state: state,
134 };
135 };
136 var change = {
137 reviewer_updates: [
138 makeItem('REVIEWER', reviewer1), // New group.
139 makeItem('CC', reviewer2), // Appended.
140 makeItem('REVIEWER', reviewer2, date2), // Overrides previous one.
141
142 makeItem('CC', reviewer1, date2, reviewer2), // New group.
143
144 makeItem('REMOVED', reviewer2, date3), // Group has no state change.
145 makeItem('REVIEWER', reviewer2, date3),
146
147 makeItem('CC', reviewer1, date4), // No change, removed.
148 makeItem('REVIEWER', reviewer1, date4), // Forms new group
149 makeItem('REMOVED', reviewer2, date4), // Should be grouped.
150 ],
151 };
152
153 instance = new GrReviewerUpdatesParser(change);
154 instance._groupUpdates();
155 change = instance.result;
156
157 assert.equal(change.reviewer_updates.length, 3);
158 assert.equal(change.reviewer_updates[0].updates.length, 2);
159 assert.equal(change.reviewer_updates[1].updates.length, 1);
160 assert.equal(change.reviewer_updates[2].updates.length, 2);
161
162 assert.equal(change.reviewer_updates[0].date, date1);
163 assert.deepEqual(change.reviewer_updates[0].author, reviewer1);
164 assert.deepEqual(change.reviewer_updates[0].updates, [
165 {
166 reviewer: reviewer1,
167 state: 'REVIEWER',
168 },
169 {
170 reviewer: reviewer2,
171 state: 'REVIEWER',
172 },
173 ]);
174
175 assert.equal(change.reviewer_updates[1].date, date2);
176 assert.deepEqual(change.reviewer_updates[1].author, reviewer2);
177 assert.deepEqual(change.reviewer_updates[1].updates, [
178 {
179 reviewer: reviewer1,
180 state: 'CC',
181 prev_state: 'REVIEWER',
182 },
183 ]);
184
185 assert.equal(change.reviewer_updates[2].date, date4);
186 assert.deepEqual(change.reviewer_updates[2].author, reviewer1);
187 assert.deepEqual(change.reviewer_updates[2].updates, [
188 {
189 reviewer: reviewer1,
190 prev_state: 'CC',
191 state: 'REVIEWER',
192 },
193 {
194 reviewer: reviewer2,
195 prev_state: 'REVIEWER',
196 state: 'REMOVED',
197 },
198 ]);
199 });
200
201 test('format reviewer updates', function() {
202 var reviewer1 = {_account_id: 1};
203 var reviewer2 = {_account_id: 2};
204 var makeItem = function(prev, state, opt_reviewer) {
205 return {
206 reviewer: opt_reviewer || reviewer1,
207 prev_state: prev,
208 state: state,
209 };
210 };
211 var makeUpdate = function(items) {
212 return {
213 author: reviewer1,
214 updated: '',
215 updates: items,
216 };
217 };
218 var change = {
219 reviewer_updates: [
220 makeUpdate([
221 makeItem(undefined, 'CC'),
222 makeItem(undefined, 'CC', reviewer2)
223 ]),
224 makeUpdate([
225 makeItem('CC', 'REVIEWER'),
226 makeItem('REVIEWER', 'REMOVED'),
227 makeItem('REMOVED', 'REVIEWER'),
228 makeItem(undefined, 'REVIEWER', reviewer2),
229 ]),
230 ],
231 };
232
233 instance = new GrReviewerUpdatesParser(change);
234 instance._formatUpdates();
235
236 assert.equal(change.reviewer_updates.length, 2);
237 assert.equal(change.reviewer_updates[0].updates.length, 1);
238 assert.equal(change.reviewer_updates[1].updates.length, 3);
239
240 var items = change.reviewer_updates[0].updates;
241 assert.equal(items[0].message, 'added to CC: ');
242 assert.deepEqual(items[0].reviewers, [reviewer1, reviewer2]);
243
244 items = change.reviewer_updates[1].updates;
245 assert.equal(items[0].message, 'moved from CC to REVIEWER: ');
246 assert.deepEqual(items[0].reviewers, [reviewer1]);
247 assert.equal(items[1].message, 'removed from REVIEWER: ');
248 assert.deepEqual(items[1].reviewers, [reviewer1]);
249 assert.equal(items[2].message, 'added to REVIEWER: ');
250 assert.deepEqual(items[2].reviewers, [reviewer1, reviewer2]);
251 });
252 });
253</script>