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('skip-tasks-sk', () => {
  let testBed: TestBed;
  before(async () => {
    testBed = await loadCachedTestBed();
  });

  beforeEach(async () => {
    await testBed.page.goto(testBed.baseUrl);
    await testBed.page.setViewport({ width: 550, height: 550 });
    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.$$('skip-tasks-sk')).to.have.length(1);
  });

  describe('screenshots', () => {
    it('starting point', async () => {
      await takeScreenshot(
        testBed.page,
        'task-scheduler',
        'skip-tasks-sk_start',
      );
      // 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',
        'skip-tasks-sk_start-dark',
      );
    });
    it('adds a rule', async () => {
      await testBed.page.click('add-icon-sk');
      await testBed.page.type('#input-name', 'New Rule');
      await testBed.page.type('#input-task-specs input', '.*');
      // TODO(borenet): I would like to use a commit range here, but I was
      // unable to automate the checking of the checkbox and subsequent
      // rendering of the new input field.
      await testBed.page.type('#input-range-start', 'abc123');
      await testBed.page.type(
        '#input-description',
        'This is a detailed description of the rule.',
      );
      await takeScreenshot(
        testBed.page,
        'task-scheduler',
        'skip-tasks-sk_adding-rule',
      );
      await testBed.page.click('#add-button');
      await takeScreenshot(
        testBed.page,
        'task-scheduler',
        'skip-tasks-sk_added-rule',
      );
    });
  });
});
