From de5b67bb2fbdb6db5fef25361d216603209b87df Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Wed, 28 Oct 2020 16:25:45 +0800 Subject: [PATCH] test: add file list render test cases --- __tests__/cases/homepage.not-render.ts | 2 +- __tests__/cases/project-page.gitako.ts | 22 +++++++++++++++++++-- __tests__/cases/pull-request-page.gitako.ts | 13 ++++++++++++ __tests__/utils.ts | 22 ++++++++++++++++++++- 4 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 __tests__/cases/pull-request-page.gitako.ts diff --git a/__tests__/cases/homepage.not-render.ts b/__tests__/cases/homepage.not-render.ts index d75e7ca..43cbac6 100644 --- a/__tests__/cases/homepage.not-render.ts +++ b/__tests__/cases/homepage.not-render.ts @@ -4,6 +4,6 @@ describe(`in GitHub homepage`, () => { beforeAll(() => page.goto('https://github.com')) it('should not render Gitako', async () => { - expectToNotFind('.gitako-side-bar .gitako-position-wrapper') + await expectToNotFind('.gitako-side-bar .gitako-position-wrapper') }) }) diff --git a/__tests__/cases/project-page.gitako.ts b/__tests__/cases/project-page.gitako.ts index 1ebfb54..00deeaf 100644 --- a/__tests__/cases/project-page.gitako.ts +++ b/__tests__/cases/project-page.gitako.ts @@ -1,9 +1,27 @@ -import { expectToFind } from '../utils' +import { expectToFind, expectToNotFind, scroll } from '../utils' describe(`in Gitako project page`, () => { beforeAll(() => page.goto('https://github.com/EnixCoda/Gitako')) it('should render Gitako', async () => { - expectToFind('.gitako-side-bar .gitako-position-wrapper') + await expectToFind('.gitako-side-bar .gitako-position-wrapper') + }) + + it('should render file list', async () => { + await expectToFind('.gitako-side-bar .files .node-item') + }) + + it('should render while scroll', async () => { + const filesEle = await page.waitForSelector('.gitako-side-bar .files') + // node of tsconfig.json should NOT be rendered before scroll down + await expectToNotFind('.gitako-side-bar .files a[title="tsconfig.json"]') + const box = await filesEle.boundingBox() + if (box) { + await page.mouse.move(box.x + 40, box.y + 40) + await scroll({ totalDistance: 100, duration: 5000 }) + + // node of tsconfig.json should be rendered now + await expectToFind('.gitako-side-bar .files a[title="tsconfig.json"]') + } }) }) diff --git a/__tests__/cases/pull-request-page.gitako.ts b/__tests__/cases/pull-request-page.gitako.ts new file mode 100644 index 0000000..4658ea1 --- /dev/null +++ b/__tests__/cases/pull-request-page.gitako.ts @@ -0,0 +1,13 @@ +import { expectToFind } from '../utils' + +describe(`in Gitako project page`, () => { + beforeAll(() => page.goto('https://github.com/EnixCoda/Gitako/pull/71')) + + it('should render Gitako', async () => { + await expectToFind('.gitako-side-bar .gitako-position-wrapper') + }) + + it('should render file list', async () => { + await expectToFind('.gitako-side-bar .files .node-item') + }) +}) diff --git a/__tests__/utils.ts b/__tests__/utils.ts index 01099c2..6bd566f 100644 --- a/__tests__/utils.ts +++ b/__tests__/utils.ts @@ -1,7 +1,27 @@ export async function expectToFind(selector: string) { - await expect(await page.waitForSelector(selector)).not.toBeNull() + await expect(page.waitForSelector(selector)).resolves.not.toBeNull() } export async function expectToNotFind(selector: string) { await expect(page.waitForSelector(selector, { timeout: 1000 })).rejects.toThrow() } + +export function sleep(timeout: number) { + return new Promise(resolve => setTimeout(resolve, timeout)) +} + +export async function scroll({ + totalDistance, + step = 1, + duration = 500, +}: { + totalDistance: number + step?: number + duration?: number +}) { + let distance = 0 + while ((distance += step) < totalDistance) { + await (page.mouse as any).wheel({ deltaY: step }) + await sleep((duration * step) / totalDistance) + } +}