<!DOCTYPE html>
<!--
@license
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/custom-elements-es5-adapter.js"></script>

<script src="/bower_components/webcomponentsjs/webcomponents-lite.js"></script>
<script src="/bower_components/web-component-tester/browser.js"></script>
<link rel="import" href="../../../test/common-test-setup.html"/>
<script src="../../../scripts/util.js"></script>
<script src="gr-reviewer-updates-parser.js"></script>

<script>
  suite('gr-reviewer-updates-parser tests', () => {
    let sandbox;
    let instance;

    setup(() => {
      sandbox = sinon.sandbox.create();
    });

    teardown(() => {
      sandbox.restore();
    });

    test('ignores changes without messages', () => {
      const change = {};
      sandbox.stub(
          GrReviewerUpdatesParser.prototype, '_filterRemovedMessages');
      sandbox.stub(
          GrReviewerUpdatesParser.prototype, '_groupUpdates');
      sandbox.stub(
          GrReviewerUpdatesParser.prototype, '_formatUpdates');
      assert.strictEqual(GrReviewerUpdatesParser.parse(change), change);
      assert.isFalse(
          GrReviewerUpdatesParser.prototype._filterRemovedMessages.called);
      assert.isFalse(
          GrReviewerUpdatesParser.prototype._groupUpdates.called);
      assert.isFalse(
          GrReviewerUpdatesParser.prototype._formatUpdates.called);
    });

    test('ignores changes without reviewer updates', () => {
      const change = {
        messages: [],
      };
      sandbox.stub(
          GrReviewerUpdatesParser.prototype, '_filterRemovedMessages');
      sandbox.stub(
          GrReviewerUpdatesParser.prototype, '_groupUpdates');
      sandbox.stub(
          GrReviewerUpdatesParser.prototype, '_formatUpdates');
      assert.strictEqual(GrReviewerUpdatesParser.parse(change), change);
      assert.isFalse(
          GrReviewerUpdatesParser.prototype._filterRemovedMessages.called);
      assert.isFalse(
          GrReviewerUpdatesParser.prototype._groupUpdates.called);
      assert.isFalse(
          GrReviewerUpdatesParser.prototype._formatUpdates.called);
    });

    test('ignores changes with empty reviewer updates', () => {
      const change = {
        messages: [],
        reviewer_updates: [],
      };
      sandbox.stub(
          GrReviewerUpdatesParser.prototype, '_filterRemovedMessages');
      sandbox.stub(
          GrReviewerUpdatesParser.prototype, '_groupUpdates');
      sandbox.stub(
          GrReviewerUpdatesParser.prototype, '_formatUpdates');
      assert.strictEqual(GrReviewerUpdatesParser.parse(change), change);
      assert.isFalse(
          GrReviewerUpdatesParser.prototype._filterRemovedMessages.called);
      assert.isFalse(
          GrReviewerUpdatesParser.prototype._groupUpdates.called);
      assert.isFalse(
          GrReviewerUpdatesParser.prototype._formatUpdates.called);
    });

    test('filter removed messages', () => {
      const 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', () => {
      const reviewer1 = {_account_id: 1};
      const reviewer2 = {_account_id: 2};
      const date1 = '2017-01-26 12:11:50.000000000';
      const date2 = '2017-01-26 12:11:55.000000000'; // Within threshold.
      const date3 = '2017-01-26 12:33:50.000000000';
      const date4 = '2017-01-26 12:44:50.000000000';
      const makeItem = function(state, reviewer, opt_date, opt_author) {
        return {
          reviewer,
          updated: opt_date || date1,
          updated_by: opt_author || reviewer1,
          state,
        };
      };
      let 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', () => {
      const reviewer1 = {_account_id: 1};
      const reviewer2 = {_account_id: 2};
      const makeItem = function(prev, state, opt_reviewer) {
        return {
          reviewer: opt_reviewer || reviewer1,
          prev_state: prev,
          state,
        };
      };
      const makeUpdate = function(items) {
        return {
          author: reviewer1,
          updated: '',
          updates: items,
        };
      };
      const 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);

      let 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]);
    });

    test('_advanceUpdates', () => {
      const T0 = util.parseDate('2017-02-17 19:04:18.000000000').getTime();
      const tplus = delta => new Date(T0 + delta)
          .toISOString()
          .replace('T', ' ')
          .replace('Z', '000000');
      const change = {
        reviewer_updates: [{
          date: tplus(0),
          type: 'REVIEWER_UPDATE',
          updates: [{
            message: 'same time update',
          }],
        }, {
          date: tplus(200),
          type: 'REVIEWER_UPDATE',
          updates: [{
            message: 'update within threshold',
          }],
        }, {
          date: tplus(600),
          type: 'REVIEWER_UPDATE',
          updates: [{
            message: 'update between messages',
          }],
        }, {
          date: tplus(1000),
          type: 'REVIEWER_UPDATE',
          updates: [{
            message: 'late update',
          }],
        }],
        messages: [{
          id: '6734489eb9d642de28dbf2bcf9bda875923800d8',
          date: tplus(0),
          message: 'Uploaded patch set 1.',
        }, {
          id: '6734489eb9d642de28dbf2bcf9bda875923800d8',
          date: tplus(800),
          message: 'Uploaded patch set 2.',
        }],
      };
      instance = new GrReviewerUpdatesParser(change);
      instance._advanceUpdates();
      const updates = instance.result.reviewer_updates;
      assert.isBelow(util.parseDate(updates[0].date).getTime(), T0);
      assert.isBelow(util.parseDate(updates[1].date).getTime(), T0);
      assert.equal(updates[2].date, tplus(100));
      assert.equal(updates[3].date, tplus(500));
    });
  });
</script>
