<!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">
<meta charset="utf-8">
<title>gr-reviewer-updates-parser</title>

<script src="/node_modules/@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js"></script>

<script src="/node_modules/@webcomponents/webcomponentsjs/webcomponents-lite.js"></script>
<script src="/components/wct-browser-legacy/browser.js"></script>
<script type="module">
import '../../../test/common-test-setup.js';
import {GrReviewerUpdatesParser} from './gr-reviewer-updates-parser.js';
import {util} from '../../../scripts/util.js';

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>
