<!DOCTYPE html>
<!--
Copyright (C) 2015 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-patch-range-select</title>

<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
<script src="../../../bower_components/web-component-tester/browser.js"></script>
<link rel="import" href="../../../test/common-test-setup.html"/>
<script src="../../../bower_components/page/page.js"></script>

<link rel="import" href="gr-patch-range-select.html">

<script>void(0);</script>

<test-fixture id="basic">
  <template>
    <gr-patch-range-select auto></gr-patch-range-select>
  </template>
</test-fixture>

<script>
  suite('gr-patch-range-select tests', () => {
    let element;
    let sandbox;

    setup(() => {
      element = fixture('basic');
      sandbox = sinon.sandbox.create();
    });

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

    test('enabled/disabled options', () => {
      const patchRange = {
        basePatchNum: 'PARENT',
        patchNum: '3',
      };
      const sortedRevisions = [
        {_number: 1},
        {_number: 2},
        {_number: element.EDIT_NAME, basePatchNum: 2},
        {_number: 3},
      ];
      for (const patchNum of ['1', '2', '3']) {
        assert.isFalse(element._computeRightDisabled(patchNum,
            patchRange.basePatchNum, sortedRevisions));
      }
      for (const patchNum of ['PARENT', '1', '2']) {
        assert.isFalse(element._computeLeftDisabled(patchNum,
            patchRange.patchNum, sortedRevisions));
      }
      assert.isTrue(element._computeLeftDisabled('3', patchRange.patchNum));

      patchRange.basePatchNum = element.EDIT_NAME;
      assert.isTrue(element._computeLeftDisabled('3', patchRange.patchNum,
          sortedRevisions));
      assert.isTrue(element._computeRightDisabled('1', patchRange.basePatchNum,
          sortedRevisions));
      assert.isTrue(element._computeRightDisabled('2', patchRange.basePatchNum,
          sortedRevisions));
      assert.isFalse(element._computeRightDisabled('3', patchRange.basePatchNum,
          sortedRevisions));
      assert.isTrue(element._computeRightDisabled(element.EDIT_NAME,
          patchRange.basePatchNum, sortedRevisions));
    });

    test('_updateSelected called with subproperty changes', () => {
      sandbox.stub(element, '_updateSelected');
      element.patchRange = {patchNum: 1, basePatchNum: 'PARENT'};
      assert.equal(element._updateSelected.callCount, 1);

      element.set('patchRange.patchNum', 2);
      assert.equal(element._updateSelected.callCount, 2);

      element.set('patchRange.basePatchNum', 1);
      assert.equal(element._updateSelected.callCount, 3);
    });

    test('_computeLeftDisabled called when patchNum updates', () => {
      element.revisions = [
        {commit: {}},
        {commit: {}},
        {commit: {}},
        {commit: {}},
      ];
      element.availablePatches = [
        {num: 1},
        {num: 2},
        {num: 3},
        {num: 'edit'},
      ];
      element.patchRange = {patchNum: 2, basePatchNum: 'PARENT'};
      flushAsynchronousOperations();

      // Should be recomputed for each available patch
      sandbox.stub(element, '_computeLeftDisabled');
      element.set('patchRange.patchNum', '1');
      assert.equal(element._computeLeftDisabled.callCount, 4);
    });

    test('_computeRightDisabled called when basePatchNum updates', () => {
      element.revisions = [
        {commit: {}},
        {commit: {}},
        {commit: {}},
        {commit: {}},
      ];
      element.availablePatches = [
        {num: 1},
        {num: 2},
        {num: 3},
        {num: 'edit'},
      ];
      element.patchRange = {patchNum: 2, basePatchNum: 'PARENT'};
      flushAsynchronousOperations();

      // Should be recomputed for each available patch
      sandbox.stub(element, '_computeRightDisabled');
      element.set('patchRange.basePatchNum', '1');
      assert.equal(element._computeRightDisabled.callCount, 4);
    });


    test('changes in patch range fire event', done => {
      sandbox.stub(element, '_computeLeftDisabled').returns(false);
      sandbox.stub(element, '_computeRightDisabled').returns(false);
      const patchRangeChangedStub = sandbox.stub();
      element.addEventListener('patch-range-change', patchRangeChangedStub);

      const leftSelectEl = element.$.leftPatchSelect;
      const rightSelectEl = element.$.rightPatchSelect;
      const blurSpy = sandbox.spy(leftSelectEl, 'blur');
      element.changeNum = '42';
      element.path = 'path/to/file.txt';
      element.availablePatches =
          [{num: '1'}, {num: '2'}, {num: '3'}, {num: 'edit'}];
      element.patchRange = {
        basePatchNum: 'PARENT',
        patchNum: '3',
      };
      flushAsynchronousOperations();

      let numEvents = 0;
      leftSelectEl.addEventListener('change', e => {
        numEvents++;
        if (numEvents === 1) {
          assert.deepEqual(patchRangeChangedStub.lastCall.args[0].detail,
              {rightPatch: '3', leftPatch: 'PARENT'});
          leftSelectEl.nativeSelect.value = 'edit';
          element.fire('change', {}, {node: leftSelectEl});
          assert(blurSpy.called, 'Dropdown should be blurred after selection');
        } else if (numEvents === 2) {
          assert.deepEqual(patchRangeChangedStub.lastCall.args[0].detail,
              {rightPatch: '3', leftPatch: 'edit'});
          rightSelectEl.nativeSelect.value = '1';
          element.fire('change', {}, {node: rightSelectEl});
        }
      });
      rightSelectEl.addEventListener('change', e => {
        assert.deepEqual(patchRangeChangedStub.lastCall.args[0].detail,
            {rightPatch: '1', leftPatch: 'edit'});
        done();
      });
      leftSelectEl.nativeSelect.value = 'PARENT';
      rightSelectEl.nativeSelect.value = '3';
      element.fire('change', {}, {node: leftSelectEl});
    });

    test('diff against dropdown', done => {
      element.revisions = [
        {commit: {}},
        {commit: {}},
        {commit: {}},
        {commit: {}},
      ];
      element.availablePatches = [
        {num: 1},
        {num: 2},
        {num: 3},
        {num: 'edit'},
      ];
      element.patchRange = {
        basePatchNum: 'PARENT',
        patchNum: '3',
      };

      const patchRangeChangedStub = sandbox.stub();
      element.addEventListener('patch-range-change', patchRangeChangedStub);

      flush(() => {
        const selectEl = element.$.leftPatchSelect;
        assert.equal(selectEl.nativeSelect.value, 'PARENT');
        assert.isTrue(element.$$('#leftPatchSelect option[value="3"]')
            .hasAttribute('disabled'));
        selectEl.addEventListener('change', () => {
          assert.equal(selectEl.nativeSelect.value, 'edit');
          assert.deepEqual(patchRangeChangedStub.lastCall.args[0].detail,
              {leftPatch: 'edit', rightPatch: '3'});
          done();
        });
        selectEl.nativeSelect.value = 'edit';
        element.fire('change', {}, {node: selectEl.nativeSelect});
      });
    });

    test('filesWeblinks', () => {
      element.filesWeblinks = {
        meta_a: [
          {
            name: 'foo',
            url: 'f.oo',
          },
        ],
        meta_b: [
          {
            name: 'bar',
            url: 'ba.r',
          },
        ],
      };
      flushAsynchronousOperations();
      const domApi = Polymer.dom(element.root);
      assert.equal(
          domApi.querySelector('a[href="f.oo"]').textContent, 'foo');
      assert.equal(
          domApi.querySelector('a[href="ba.r"]').textContent, 'bar');
    });

    test('_computePatchSetCommentsString', () => {
      // Test string with unresolved comments.
      comments = {
        foo: [{
          id: '27dcee4d_f7b77cfa',
          message: 'test',
          patch_set: 1,
          unresolved: true,
        }],
        bar: [{
          id: '27dcee4d_f7b77cfa',
          message: 'test',
          patch_set: 1,
        },
        {
          id: '27dcee4d_f7b77cfa',
          message: 'test',
          patch_set: 1,
        }],
        abc: [],
      };

      assert.equal(element._computePatchSetCommentsString(comments, 1),
          '(3 comments, 1 unresolved)');

      // Test string with no unresolved comments.
      delete comments['foo'];
      assert.equal(element._computePatchSetCommentsString(comments, 1),
          '(2 comments)');

      // Test string with no comments.
      delete comments['bar'];
      assert.equal(element._computePatchSetCommentsString(comments, 1), '');
    });
  });
</script>
