<!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-checkers-list-view</title>
<link rel="import" href="gr-checkers-list.html">

<!-- Gr-overlay does not exist in the test framework
It is expected to be provided by Gerrit core -->
<dom-module id="gr-overlay">
  <template>
  </template>
  <script>
    readyToTest().then(() => {
      Polymer({
        is: 'gr-overlay',
        refit() {},
        open() { return Promise.resolve({}); },
      });
    });
  </script>
</dom-module>

<test-fixture id="basic">
  <template is="dom-template">
    <gr-checkers-list
      plugin-rest-api="[[pluginRestApi]]"
    >
    </gr-checkers-list>
</template>
</test-fixture>

<script>
  const CHECKERS = [
    {
      uuid: 'C:D',
      name: 'A',
      description: 'B',
      repository: 'Backend',
      status: 'ENABLED',
      blocking: [

      ],
      query: 'status:open',
      created: '2019-07-25 13:08:43.000000000',
      updated: '2019-07-25 13:08:43.000000000',
    },
    {
      uuid: 'aa:bb',
      name: 'n1',
      description: 'd1',
      repository: 'All-Users',
      status: 'ENABLED',
      blocking: [

      ],
      query: 'status:open',
      created: '2019-07-29 13:07:17.000000000',
      updated: '2019-07-29 13:07:17.000000000',
    },
    {
      uuid: 'adsf:asdasdas',
      name: 'ds',
      description: 's',
      repository: 'Scripts',
      status: 'ENABLED',
      blocking: [

      ],
      query: 'status:open',
      created: '2019-07-29 13:28:09.000000000',
      updated: '2019-07-29 13:28:09.000000000',
    },
    {
      uuid: 'ijkl:mnop',
      name: 'abcd',
      description: 'efgh',
      repository: 'All-Projects',
      status: 'ENABLED',
      blocking: [

      ],
      query: 'status:open',
      created: '2019-07-29 09:33:25.000000000',
      updated: '2019-07-29 09:33:25.000000000',
    },
    {
      uuid: 'ngfnf:mhghgnhghn',
      name: 'nbvfg',
      description: 'fjhgj',
      repository: 'All-Users',
      status: 'ENABLED',
      blocking: [

      ],
      query: 'status:open',
      created: '2019-08-06 14:21:34.000000000',
      updated: '2019-08-06 14:21:34.000000000',
    },
    {
      uuid: 'sdfsdf--:sdfsdf333',
      name: 'sdfsdf',
      description: 'sdfsdfsd',
      repository: 'Scripts',
      status: 'ENABLED',
      blocking: [

      ],
      query: 'status:open',
      created: '2019-07-30 13:00:19.000000000',
      updated: '2019-07-30 13:00:19.000000000',
    },
    {
      uuid: 'test:checker1',
      name: 'Unit Tests',
      description: 'Random description that should be improved at some point',
      repository: 'Backend',
      status: 'ENABLED',
      blocking: [

      ],
      query: 'status:open',
      created: '2019-07-22 13:16:52.000000000',
      updated: '2019-07-22 14:21:14.000000000',
    },
    {
      uuid: 'test:checker2',
      name: 'Code Style',
      repository: 'Backend',
      status: 'ENABLED',
      blocking: [

      ],
      query: 'status:open',
      created: '2019-07-22 13:26:56.000000000',
      updated: '2019-07-22 13:26:56.000000000',
    },
    {
      uuid: 'xddf:sdfsdfsdf',
      name: 'sdfsdf',
      description: 'sdfsdf',
      repository: 'Scripts',
      status: 'ENABLED',
      blocking: [

      ],
      query: 'status:open',
      created: '2019-07-29 14:11:59.000000000',
      updated: '2019-07-29 14:11:59.000000000',
    },
    {
      uuid: 'zxczxc:bnvnbvnbvn',
      name: 'zxc',
      description: 'zxc',
      repository: 'Scripts',
      status: 'ENABLED',
      blocking: [

      ],
      query: 'status:open',
      created: '2019-07-29 14:00:24.000000000',
      updated: '2019-07-29 14:00:24.000000000',
    },
    {
      uuid: 'zxczxc:sdfsdf',
      name: 'zxc',
      description: 'zxc',
      repository: 'Scripts',
      status: 'ENABLED',
      blocking: [

      ],
      query: 'status:open',
      created: '2019-07-29 13:30:47.000000000',
      updated: '2019-07-29 13:30:47.000000000',
    },
  ];
</script>

<script>
  suite('gr-checkers-list tests', async () => {
    await readyToTest();
    let element;
    let sandbox;
    let fetchJSONSpy; let fetchJSONResolve;

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

      fetchJSONSpy = sinon.stub();
      const fetchJSONPromise = new Promise((resolve, reject) => {
        fetchJSONResolve = resolve;
      });
      fetchJSONSpy.returns(fetchJSONPromise);

      const pluginRestApi = {
        fetchJSON: fetchJSONSpy,
      };

      element = fixture('basic', {
        pluginRestApi,
      });
      flush(done);
    });

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

    test('renders checker list table headings', () => {
      const checkersList = element.$$('table');
      const headings = checkersList.firstElementChild.firstElementChild.
          children;
      const expectedHeadings = ['Checker Name', 'Repository', 'Status',
        'Required', 'Checker Description', 'Edit'];
      for (let i = 0; i < headings.length; i++) {
        assert(headings[i].innerText === expectedHeadings[i]);
      }
    });

    test('create checker button renders', () => {
      assert(element.querySelector('#createNewContainer'));
      const button = element.querySelector('#createNewContainer')
          .querySelector('gr-button');
      assert(button);
      assert(button.innerText === 'Create New');
    });

    suite('with checkers', () => {
      setup(done => {
        fetchJSONResolve(CHECKERS);
        element._showConfigureOverlay();
        flush(done);
      });
      test('renders correct number of checkers', () => {
        const checkers = element.$$('table > tbody:nth-child(2)')
            .querySelectorAll('tr');
        assert(checkers.length === CHECKERS.length);
      });
      test('renders correct checkers', () => {
        const checkers = element.$$('table > tbody:nth-child(2)')
            .querySelectorAll('tr');
        for (let i = 0; i < checkers.length; i++) {
          const checkerDetails = checkers[i].querySelectorAll('td');
          assert(CHECKERS[i].name === checkerDetails[0].innerText);
          assert(CHECKERS[i].repository === checkerDetails[1].innerText);
          const status = CHECKERS[i].status || 'NO';
          assert(status === checkerDetails[2].innerText);
          const checkerRequired = (CHECKERS[i].blocking &&
                                   CHECKERS[i].blocking.length > 0)
            ? 'YES': 'NO';
          assert(checkerRequired === checkerDetails[3].innerText);
          const description = CHECKERS[i].description || '';
          assert(description === checkerDetails[4].innerText);
        }
      });
    });
  });
</script>
