<!DOCTYPE html>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
<script src="/bower_components/web-component-tester/browser.js"></script>

<link rel="import" href="/bower_components/polymer/polymer.html">
<script src="test-pre-setup.js"></script>

<title>gr-checks-chip-view</title>
<link rel="import" href="gr-checks-chip-view.html">

<test-fixture id="basic">
  <template is="dom-template">
    <gr-checks-chip-view change="[[change]]" revision="[[revision]]" get-checks="[[getChecks]]"></gr-checks-chip-view>
  </template>
</test-fixture>

<script>
  const CHECK1 = {
    checkId: 'test-check-id',
    log: 'http://example.com/test-log-url',
    started: '2019-02-06T22:25:19.269Z',
    finished: '2019-02-06T22:25:44.574Z',
    state: 'SUCCESSFUL',
  };

  const CHECK2 = {
    checkId: 'test-check-id-2',
    log: 'http://example.com/test-log-url',
    started: '2019-02-06T22:25:19.269Z',
    finished: '2019-02-06T22:25:44.574Z',
    state: 'FAILED',
  };

  suite('gr-checks-chip-view tests', async () => {
    await readyToTest();
    let element;
    let sandbox;
    let getChecksSpy;

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

      getChecksSpy = sinon.stub();
      getChecksSpy.returns(Promise.resolve([CHECK1, CHECK2, CHECK1]));

      element = fixture('basic', {
        getChecks: getChecksSpy,
        change: {
          _number: 314,
          current_revision: 'abcd',
          revisions: {
            abcd: {
              _number: 271,
            },
          },
        },
        revision: {
          _number: 271,
        },
      });
      flush(done);
    });

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

    test('renders the checks prefix', () => {
      assert.include(element.textContent.trim(), 'Checks:');
    });

    test('updating revision does not update getChecks call', done => {
      element.revision = {_number: 272};
      flush(() => {
        assert.isFalse(getChecksSpy.calledWith(314, 272));
        done();
      });
    });

    suite('builds chip contents', () => {
      test('queries the checks', () => {
        assert.isTrue(getChecksSpy.called);
        assert.isTrue(getChecksSpy.calledWith(314, 271));
      });

      test('renders the text of failed checks', () => {
        const chip = element.$$('.chip');
        assert.equal(chip.textContent.trim(), '1 of 3 checks failed');
      });
    });
  });
</script>
