import * as path from 'path';
import { expect } from 'chai';
import {
  loadCachedTestBed,
  takeScreenshot, TestBed,
} from '../../../puppeteer-tests/util';

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

  beforeEach(async () => {
    await testBed.page.goto(`${testBed.baseUrl}/dist/fiddle-sk.html`, { waitUntil: 'networkidle0' });
    await testBed.page.setViewport({ width: 1024, height: 1400 });
  });

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

  describe('screenshots', () => {
    it('shows the default view', async () => {
      await testBed.page.click('#mode_start');
      await testBed.page.waitForSelector('#mode_complete pre');
      await takeScreenshot(testBed.page, 'fiddle', 'mode_start');
    });
    it('displays clickable errors', async () => {
      await testBed.page.click('#mode_after_run_errors');
      await testBed.page.waitForSelector('#mode_complete pre');
      await takeScreenshot(testBed.page, 'fiddle', 'mode_after_run_errors');
    });
    it('displays images on a successful run', async () => {
      await testBed.page.click('#mode_after_run_success');
      await testBed.page.waitForSelector('#mode_complete pre');
      await takeScreenshot(testBed.page, 'fiddle', 'mode_after_run_success');
    });
    it('displays videos on a successful run', async () => {
      await testBed.page.click('#mode_animation');
      await testBed.page.waitForSelector('#mode_complete pre');
      await takeScreenshot(testBed.page, 'fiddle', 'mode_animation');
    });
    it('has a reduced UI when in basic/embedded mode', async () => {
      await testBed.page.click('#mode_basic');
      await testBed.page.waitForSelector('#mode_complete pre');
      await takeScreenshot(testBed.page, 'fiddle', 'mode_basic');
    });
    it('correctly displays text only results', async () => {
      await testBed.page.click('#mode_text');
      await testBed.page.waitForSelector('#mode_complete pre');
      await takeScreenshot(testBed.page, 'fiddle', 'mode_text');
    });
  });
});
