<!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>
