| <!DOCTYPE html> |
| <!-- |
| Copyright (C) 2017 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes"> |
| <title>gr-reviewer-updates-parser</title> |
| |
| <script src="../../../bower_components/webcomponentsjs/webcomponents.min.js"></script> |
| <script src="../../../bower_components/web-component-tester/browser.js"></script> |
| |
| <link rel="import" href="../../../bower_components/iron-test-helpers/iron-test-helpers.html"> |
| |
| <script src="../../../scripts/util.js"></script> |
| <script src="gr-reviewer-updates-parser.js"></script> |
| |
| <script> |
| suite('gr-reviewer-updates-parser tests', function() { |
| var sandbox; |
| var instance; |
| |
| setup(function() { |
| sandbox = sinon.sandbox.create(); |
| }); |
| |
| teardown(function() { |
| sandbox.restore(); |
| }); |
| |
| test('filter removed messages', function() { |
| var change = { |
| messages: [ |
| { |
| message: 'msg1', |
| tag: 'autogenerated:gerrit:deleteReviewer', |
| }, |
| { |
| message: 'msg2', |
| tag: 'foo', |
| } |
| ], |
| }; |
| instance = new GrReviewerUpdatesParser(change); |
| instance._filterRemovedMessages(); |
| assert.deepEqual(instance.result, { |
| messages: [{ |
| message: 'msg2', |
| tag: 'foo', |
| }], |
| }); |
| }); |
| |
| test('group reviewer updates', function() { |
| var reviewer1 = {_account_id: 1}; |
| var reviewer2 = {_account_id: 2}; |
| var date1 = '2017-01-26 12:11:50.000000000'; |
| var date2 = '2017-01-26 12:11:55.000000000'; // Within threshold. |
| var date3 = '2017-01-26 12:33:50.000000000'; |
| var date4 = '2017-01-26 12:44:50.000000000'; |
| var makeItem = function(state, reviewer, opt_date, opt_author) { |
| return { |
| reviewer: reviewer, |
| updated: opt_date || date1, |
| updated_by: opt_author || reviewer1, |
| state: state, |
| }; |
| }; |
| var change = { |
| reviewer_updates: [ |
| makeItem('REVIEWER', reviewer1), // New group. |
| makeItem('CC', reviewer2), // Appended. |
| makeItem('REVIEWER', reviewer2, date2), // Overrides previous one. |
| |
| makeItem('CC', reviewer1, date2, reviewer2), // New group. |
| |
| makeItem('REMOVED', reviewer2, date3), // Group has no state change. |
| makeItem('REVIEWER', reviewer2, date3), |
| |
| makeItem('CC', reviewer1, date4), // No change, removed. |
| makeItem('REVIEWER', reviewer1, date4), // Forms new group |
| makeItem('REMOVED', reviewer2, date4), // Should be grouped. |
| ], |
| }; |
| |
| instance = new GrReviewerUpdatesParser(change); |
| instance._groupUpdates(); |
| change = instance.result; |
| |
| assert.equal(change.reviewer_updates.length, 3); |
| assert.equal(change.reviewer_updates[0].updates.length, 2); |
| assert.equal(change.reviewer_updates[1].updates.length, 1); |
| assert.equal(change.reviewer_updates[2].updates.length, 2); |
| |
| assert.equal(change.reviewer_updates[0].date, date1); |
| assert.deepEqual(change.reviewer_updates[0].author, reviewer1); |
| assert.deepEqual(change.reviewer_updates[0].updates, [ |
| { |
| reviewer: reviewer1, |
| state: 'REVIEWER', |
| }, |
| { |
| reviewer: reviewer2, |
| state: 'REVIEWER', |
| }, |
| ]); |
| |
| assert.equal(change.reviewer_updates[1].date, date2); |
| assert.deepEqual(change.reviewer_updates[1].author, reviewer2); |
| assert.deepEqual(change.reviewer_updates[1].updates, [ |
| { |
| reviewer: reviewer1, |
| state: 'CC', |
| prev_state: 'REVIEWER', |
| }, |
| ]); |
| |
| assert.equal(change.reviewer_updates[2].date, date4); |
| assert.deepEqual(change.reviewer_updates[2].author, reviewer1); |
| assert.deepEqual(change.reviewer_updates[2].updates, [ |
| { |
| reviewer: reviewer1, |
| prev_state: 'CC', |
| state: 'REVIEWER', |
| }, |
| { |
| reviewer: reviewer2, |
| prev_state: 'REVIEWER', |
| state: 'REMOVED', |
| }, |
| ]); |
| }); |
| |
| test('format reviewer updates', function() { |
| var reviewer1 = {_account_id: 1}; |
| var reviewer2 = {_account_id: 2}; |
| var makeItem = function(prev, state, opt_reviewer) { |
| return { |
| reviewer: opt_reviewer || reviewer1, |
| prev_state: prev, |
| state: state, |
| }; |
| }; |
| var makeUpdate = function(items) { |
| return { |
| author: reviewer1, |
| updated: '', |
| updates: items, |
| }; |
| }; |
| var change = { |
| reviewer_updates: [ |
| makeUpdate([ |
| makeItem(undefined, 'CC'), |
| makeItem(undefined, 'CC', reviewer2) |
| ]), |
| makeUpdate([ |
| makeItem('CC', 'REVIEWER'), |
| makeItem('REVIEWER', 'REMOVED'), |
| makeItem('REMOVED', 'REVIEWER'), |
| makeItem(undefined, 'REVIEWER', reviewer2), |
| ]), |
| ], |
| }; |
| |
| instance = new GrReviewerUpdatesParser(change); |
| instance._formatUpdates(); |
| |
| assert.equal(change.reviewer_updates.length, 2); |
| assert.equal(change.reviewer_updates[0].updates.length, 1); |
| assert.equal(change.reviewer_updates[1].updates.length, 3); |
| |
| var items = change.reviewer_updates[0].updates; |
| assert.equal(items[0].message, 'added to CC: '); |
| assert.deepEqual(items[0].reviewers, [reviewer1, reviewer2]); |
| |
| items = change.reviewer_updates[1].updates; |
| assert.equal(items[0].message, 'moved from CC to REVIEWER: '); |
| assert.deepEqual(items[0].reviewers, [reviewer1]); |
| assert.equal(items[1].message, 'removed from REVIEWER: '); |
| assert.deepEqual(items[1].reviewers, [reviewer1]); |
| assert.equal(items[2].message, 'added to REVIEWER: '); |
| assert.deepEqual(items[2].reviewers, [reviewer1, reviewer2]); |
| }); |
| }); |
| </script> |