/**
 * @license
 * Copyright 2021 The Go Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style
 * license that can be found in the LICENSE file.
 */

import { Page } from 'puppeteer';

import './global-types';
import * as pg from './helpers/page';
import * as unit from './helpers/unit.page';
import { testcases } from './unit.testcases';

let page: Page;

beforeAll(async () => {
  page = await pg.newPage();
  await page.setViewport({ height: 2732, width: 500 });
});

afterAll(async () => {
  await page.close();
});

testcases('$name', async ({ path }) => {
  await page.goto(path);
  await prepare(page);
  const image = await page.screenshot();

  // eslint-disable-next-line jest/no-standalone-expect
  expect(image).toMatchImageSnapshot();
});

test('no page errors', () => {
  expect(pageErrors).toHaveLength(0);
});

async function prepare(page: Page): Promise<void> {
  await unit.prepare(page);
  await pg.$eval(page, '.Documentation-index', el => el.remove());
}
