import * as path from 'path';
import { expect } from 'chai';
import {
  loadCachedTestBed, takeScreenshot, TestBed,
} from '../../../puppeteer-tests/util';
import { ThemeChooserSk } from '../../../infra-sk/modules/theme-chooser-sk/theme-chooser-sk';

describe('job-search-sk', () => {
  let testBed: TestBed;
  before(async () => {
    testBed = await loadCachedTestBed(
        path.join(__dirname, '..', '..', 'webpack.config.ts')
    );
  });

  beforeEach(async () => {
    await testBed.page.goto(`${testBed.baseUrl}/dist/job-search-sk.html`);
    await testBed.page.setViewport({ width: 2200, height: 500 });
    await testBed.page.evaluate((_) => {
      (<ThemeChooserSk>(
        document.getElementsByTagName('theme-chooser-sk')[0]
      )).darkmode = false;
    });
  });

  it('should render the demo page (smoke test)', async () => {
    expect(await testBed.page.$$('job-search-sk')).to.have.length(1);
  });

  describe('screenshots', () => {
    it('select search terms and search', async () => {
      await takeScreenshot(
        testBed.page,
        'task-scheduler',
        'job-search-sk-searching-initial'
      );
      await testBed.page.click('select');
      await takeScreenshot(
        testBed.page,
        'task-scheduler',
        'job-search-sk-searching-selecting'
      );
      await testBed.page.select('select', 'name');
      await takeScreenshot(
        testBed.page,
        'task-scheduler',
        'job-search-sk-searching-selected'
      );
      await testBed.page.type('#name', 'ABCDEF');
      await takeScreenshot(
        testBed.page,
        'task-scheduler',
        'job-search-sk-searching-type'
      );
      await testBed.page.click('button.search');
      await takeScreenshot(
        testBed.page,
        'task-scheduler',
        'job-search-sk-searching-results'
      );

      // Take a screenshot in dark mode.
      await testBed.page.evaluate((_) => {
        (<ThemeChooserSk>(
          document.getElementsByTagName('theme-chooser-sk')[0]
        )).darkmode = true;
      });
      await takeScreenshot(
        testBed.page,
        'task-scheduler',
        'job-search-sk-searching-results-dark'
      );
    });

    it('deletes search terms', async () => {
      await testBed.page.select('select', 'name');
      await testBed.page.type('#name', 'ABCDEF');
      await testBed.page.select('select', 'revision');
      await testBed.page.type(
        '#revision',
        '9883def4f8661f8eec4ccbae2e34d7fcb14bf65d'
      );
      await testBed.page.click('button.delete');
      await takeScreenshot(
        testBed.page,
        'task-scheduler',
        'job-search-sk-deleted-search-term'
      );
    });

    it('cancels a job', async () => {
      await testBed.page.click('button.search');
      await takeScreenshot(
        testBed.page,
        'task-scheduler',
        'job-search-sk-cancel-before'
      );
      await testBed.page.click('td > button.cancel');
      await takeScreenshot(
        testBed.page,
        'task-scheduler',
        'job-search-sk-cancel-after'
      );
    });

    it('cancels all jobs', async () => {
      await testBed.page.click('button.search');
      await takeScreenshot(
        testBed.page,
        'task-scheduler',
        'job-search-sk-cancel-all-before'
      );
      await testBed.page.click('th > button.cancel');
      await takeScreenshot(
        testBed.page,
        'task-scheduler',
        'job-search-sk-cancel-all-after'
      );
    });
  });
});
