<!DOCTYPE html>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
<script src="imports.js"></script>
<script src="webcomponentsjs/webcomponents-lite.js"></script>
<link rel="import" href="polymer/polymer.html">

<title>gr-checks-item</title>
<link rel="import" href="webcomponent_lib/gr-checks-item.html">

<test-fixture id="basic">
  <template is="dom-template">
    <gr-checks-item
      check="{{check}}"
      retry-check="[[retryCheck]]">
    </gr-checks-item>
  </template>
</test-fixture>

<script>
  suite('gr-checks-item tests', () => {
    let element;
    let sandbox;
    let retryCheckSpy;

    setup((done) => {
      sandbox = sinon.sandbox.create();
      retryCheckSpy = sinon.stub();
      retryCheckSpy.returns(Promise.resolve());

      element = fixture('basic', {
        retryCheck: retryCheckSpy,
        check: {
          checkId: 'test-check-id',
          logUrl: 'http://example.com/test-log-url',
          startTime: "2019-02-06T22:25:19.269Z",
          finishTime: "2019-02-06T22:25:44.574Z",
        },
      });
      flush(done);
    });

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

    test('renders the status', () => {
      const status = element.$$('td:nth-child(3) > gr-checks-status');
      assert.exists(status);
    });

    test('renders the checking system', () => {
      const checkingSystem = element.$$('td:nth-child(4)');
      assert.equal(checkingSystem .textContent.trim(), "Check System");
    });

    test('renders the run date', () => {
      const name = element.$$('td:nth-child(5)');
      assert.equal(name .textContent.trim(), "2/6/2019");
    });

    suite('duration', () => {
      test('renders the run duration', () => {
        const name = element.$$('td:nth-child(6)');
        assert.equal(name .textContent.trim(), "25 sec");
      });

      test('renders 0 sec when the start and end time are the same', () => {
        element.check = {
          checkId: 'test-check-id',
          logUrl: 'http://example.com/test-log-url',
          startTime: "2019-02-06T22:25:19.269Z",
          finishTime: "2019-02-06T22:25:19.269Z",
        };
        const name = element.$$('td:nth-child(6)');
        assert.equal(name .textContent.trim(), "0 sec");
      });
    });

    test('renders a link to the log', () => {
      const logLink = element.$$('td:nth-child(7) > a');
      assert.equal(logLink.getAttribute('href'), "http://example.com/test-log-url");
      assert.equal(logLink.textContent.trim(), "View log");
    });

    suite('retryCheck', () => {
      let retryCheckLink;

      setup(() => {
        retryCheckLink = element.$$('td:nth-child(7) > gr-button');
      });

      test('shows a link to the log url', () => {
        assert.equal(retryCheckLink.textContent.trim(), "Re-run");
      });

      test('clicking on the link calls the retryCheck property', () => {
        assert.isFalse(retryCheckSpy.called);
        retryCheckLink.click();
        assert.isTrue(retryCheckSpy.called);
      });
    });
  });
</script>
