refactor: test directory structure (#1677)

This commit is contained in:
Himself65
2023-03-23 17:15:40 -05:00
committed by GitHub
parent 56acb2bdeb
commit 9eec8d0f1e
31 changed files with 149 additions and 130 deletions
+1 -1
View File
@@ -75,7 +75,7 @@ const nextConfig = {
'@affine/templates', '@affine/templates',
], ],
publicRuntimeConfig: { publicRuntimeConfig: {
PROJECT_NAME: process.env.npm_package_name, PROJECT_NAME: process.env.npm_package_name ?? 'AFFiNE',
BUILD_DATE: new Date().toISOString(), BUILD_DATE: new Date().toISOString(),
gitVersion: getGitVersion(), gitVersion: getGitVersion(),
hash: getCommitHash(), hash: getCommitHash(),
+1
View File
@@ -110,6 +110,7 @@ export const publicRuntimeConfigSchema = z.object({
enableIndexedDBProvider: z.boolean(), enableIndexedDBProvider: z.boolean(),
enableBroadCastChannelProvider: z.boolean(), enableBroadCastChannelProvider: z.boolean(),
prefetchWorkspace: z.boolean(), prefetchWorkspace: z.boolean(),
enableDebugPage: z.boolean(),
// expose internal api to globalThis, **development only** // expose internal api to globalThis, **development only**
exposeInternal: z.boolean(), exposeInternal: z.boolean(),
enableSubpage: z.boolean(), enableSubpage: z.boolean(),
+1 -1
View File
@@ -16,7 +16,7 @@ import type {
* See https://playwright.dev/docs/test-configuration. * See https://playwright.dev/docs/test-configuration.
*/ */
const config: PlaywrightTestConfig = { const config: PlaywrightTestConfig = {
testDir: './tests', testDir: './tests/parallels',
fullyParallel: true, fullyParallel: true,
timeout: process.env.CI ? 50_000 : 30_000, timeout: process.env.CI ? 50_000 : 30_000,
use: { use: {
+1
View File
@@ -9,6 +9,7 @@ export default function getConfig() {
serverAPI: 'http://localhost:3000/api', serverAPI: 'http://localhost:3000/api',
enableBroadCastChannelProvider: true, enableBroadCastChannelProvider: true,
enableIndexedDBProvider: true, enableIndexedDBProvider: true,
enableDebugPage: true,
prefetchWorkspace: false, prefetchWorkspace: false,
exposeInternal: true, exposeInternal: true,
enableSubpage: true, enableSubpage: true,
+3 -10
View File
@@ -1,13 +1,6 @@
import type { Page } from '@playwright/test'; import type { Page } from '@playwright/test';
import { test } from '@playwright/test';
interface IType { export async function openHomePage(page: Page) {
page: Page; await page.goto('http://localhost:8080');
} await page.waitForSelector('#__next');
export function loadPage() {
test.beforeEach(async ({ page }: IType) => {
await page.goto('http://localhost:8080');
// waiting for page loading end
await page.waitForSelector('#__next');
});
} }
@@ -1,12 +1,12 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { clickPageMoreActions } from './libs/page-logic'; import { clickPageMoreActions } from '../libs/page-logic';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
loadPage();
test.describe('Change page mode(Page or Edgeless)', () => { test.describe('Change page mode(Page or Edgeless)', () => {
test('Switch to edgeless by switch edgeless item', async ({ page }) => { test('Switch to edgeless by switch edgeless item', async ({ page }) => {
await openHomePage(page);
const btn = await page.getByTestId('switch-edgeless-mode-button'); const btn = await page.getByTestId('switch-edgeless-mode-button');
await btn.click(); await btn.click();
@@ -15,6 +15,7 @@ test.describe('Change page mode(Page or Edgeless)', () => {
}); });
test('Convert to edgeless by editor header items', async ({ page }) => { test('Convert to edgeless by editor header items', async ({ page }) => {
await openHomePage(page);
await clickPageMoreActions(page); await clickPageMoreActions(page);
const menusEdgelessItem = page.getByTestId('editor-option-menu-edgeless'); const menusEdgelessItem = page.getByTestId('editor-option-menu-edgeless');
await menusEdgelessItem.click({ delay: 100 }); await menusEdgelessItem.click({ delay: 100 });
@@ -1,12 +1,11 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
loadPage();
test.describe('Open contact us', () => { test.describe('Open contact us', () => {
test('Click right-bottom corner contact icon', async ({ page }) => { test('Click right-bottom corner contact icon', async ({ page }) => {
await openHomePage(page);
await page.locator('[data-testid=help-island]').click(); await page.locator('[data-testid=help-island]').click();
const rightBottomContactUs = page.locator( const rightBottomContactUs = page.locator(
'[data-testid=right-bottom-contact-us-icon]' '[data-testid=right-bottom-contact-us-icon]'
@@ -1,6 +1,6 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
test.describe('Debug page broadcast', () => { test.describe('Debug page broadcast', () => {
test('should broadcast a message to all debug pages', async ({ test('should broadcast a message to all debug pages', async ({
@@ -1,11 +1,7 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { test } from '../libs/playwright';
import { test } from './libs/playwright';
loadPage();
// ps aux | grep 8080
test.describe('exception page', () => { test.describe('exception page', () => {
test('visit 404 page', async ({ page }) => { test('visit 404 page', async ({ page }) => {
await page.goto('http://localhost:8080/404'); await page.goto('http://localhost:8080/404');
@@ -1,11 +1,7 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { test } from '../libs/playwright';
import { test } from './libs/playwright';
loadPage();
// ps aux | grep 8080
test.describe('invite code page', () => { test.describe('invite code page', () => {
test('the link has expired', async ({ page }) => { test('the link has expired', async ({ page }) => {
await page.goto('http://localhost:8080//invite/abc'); await page.goto('http://localhost:8080//invite/abc');
@@ -1,18 +1,18 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
loadPage();
test.describe('Layout ui', () => { test.describe('Layout ui', () => {
test('Collapse Sidebar', async ({ page }) => { test('Collapse Sidebar', async ({ page }) => {
await openHomePage(page);
await page.getByTestId('sliderBar-arrowButton-collapse').click(); await page.getByTestId('sliderBar-arrowButton-collapse').click();
const sliderBarArea = page.getByTestId('sliderBar'); const sliderBarArea = page.getByTestId('sliderBar');
await expect(sliderBarArea).not.toBeVisible(); await expect(sliderBarArea).not.toBeVisible();
}); });
test('Expand Sidebar', async ({ page }) => { test('Expand Sidebar', async ({ page }) => {
await openHomePage(page);
await page.getByTestId('sliderBar-arrowButton-collapse').click(); await page.getByTestId('sliderBar-arrowButton-collapse').click();
const sliderBarArea = page.getByTestId('sliderBar'); const sliderBarArea = page.getByTestId('sliderBar');
await expect(sliderBarArea).not.toBeVisible(); await expect(sliderBarArea).not.toBeVisible();
@@ -1,14 +1,13 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { newPage } from './libs/page-logic'; import { newPage } from '../libs/page-logic';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
import { assertCurrentWorkspaceFlavour } from './libs/workspace'; import { assertCurrentWorkspaceFlavour } from '../libs/workspace';
loadPage();
test.describe('Local first create page', () => { test.describe('Local first create page', () => {
test('should create a page with a local first avatar', async ({ page }) => { test('should create a page with a local first avatar', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await page.getByTestId('workspace-name').click(); await page.getByTestId('workspace-name').click();
await page.getByTestId('new-workspace').click({ delay: 50 }); await page.getByTestId('new-workspace').click({ delay: 50 });
@@ -1,16 +1,15 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { getBlockSuiteEditorTitle, newPage } from './libs/page-logic'; import { getBlockSuiteEditorTitle, newPage } from '../libs/page-logic';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
import { assertCurrentWorkspaceFlavour } from './libs/workspace'; import { assertCurrentWorkspaceFlavour } from '../libs/workspace';
loadPage();
test.describe('Local first delete page', () => { test.describe('Local first delete page', () => {
test('New a page , then delete it in all pages, permanently delete it', async ({ test('New a page , then delete it in all pages, permanently delete it', async ({
page, page,
}) => { }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await getBlockSuiteEditorTitle(page).click(); await getBlockSuiteEditorTitle(page).click();
await getBlockSuiteEditorTitle(page).fill('this is a new page to restore'); await getBlockSuiteEditorTitle(page).fill('this is a new page to restore');
@@ -1,16 +1,15 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
import { clickSideBarSettingButton } from './libs/sidebar'; import { clickSideBarSettingButton } from '../libs/sidebar';
import { assertCurrentWorkspaceFlavour } from './libs/workspace'; import { assertCurrentWorkspaceFlavour } from '../libs/workspace';
loadPage();
test.describe('Local first delete workspace', () => { test.describe('Local first delete workspace', () => {
test('New a workspace , then delete it in all workspaces, permanently delete it', async ({ test('New a workspace , then delete it in all workspaces, permanently delete it', async ({
page, page,
}) => { }) => {
await openHomePage(page);
await clickSideBarSettingButton(page); await clickSideBarSettingButton(page);
await page.getByTestId('delete-workspace-button').click(); await page.getByTestId('delete-workspace-button').click();
const workspaceNameDom = await page.getByTestId('workspace-name'); const workspaceNameDom = await page.getByTestId('workspace-name');
@@ -1,17 +1,17 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { import {
clickPageMoreActions, clickPageMoreActions,
getBlockSuiteEditorTitle, getBlockSuiteEditorTitle,
newPage, newPage,
} from './libs/page-logic'; } from '../libs/page-logic';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
import { assertCurrentWorkspaceFlavour } from './libs/workspace'; import { assertCurrentWorkspaceFlavour } from '../libs/workspace';
loadPage();
test.describe('Local first export page', () => { test.describe('Local first export page', () => {
test.skip('New a page ,then open it and export html', async ({ page }) => { test.skip('New a page ,then open it and export html', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await getBlockSuiteEditorTitle(page).click(); await getBlockSuiteEditorTitle(page).click();
await page await page
@@ -1,17 +1,17 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { import {
clickPageMoreActions, clickPageMoreActions,
getBlockSuiteEditorTitle, getBlockSuiteEditorTitle,
newPage, newPage,
} from './libs/page-logic'; } from '../libs/page-logic';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
import { assertCurrentWorkspaceFlavour } from './libs/workspace'; import { assertCurrentWorkspaceFlavour } from '../libs/workspace';
loadPage();
test.describe('Local first favorite and cancel favorite page', () => { test.describe('Local first favorite and cancel favorite page', () => {
test('New a page and open it ,then favorite it', async ({ page }) => { test('New a page and open it ,then favorite it', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await getBlockSuiteEditorTitle(page).click(); await getBlockSuiteEditorTitle(page).click();
await getBlockSuiteEditorTitle(page).fill('this is a new page to favorite'); await getBlockSuiteEditorTitle(page).fill('this is a new page to favorite');
@@ -28,6 +28,7 @@ test.describe('Local first favorite and cancel favorite page', () => {
await assertCurrentWorkspaceFlavour('local', page); await assertCurrentWorkspaceFlavour('local', page);
}); });
test('Cancel favorite', async ({ page }) => { test('Cancel favorite', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await getBlockSuiteEditorTitle(page).click(); await getBlockSuiteEditorTitle(page).click();
await getBlockSuiteEditorTitle(page).fill('this is a new page to favorite'); await getBlockSuiteEditorTitle(page).fill('this is a new page to favorite');
@@ -1,17 +1,17 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { import {
clickPageMoreActions, clickPageMoreActions,
getBlockSuiteEditorTitle, getBlockSuiteEditorTitle,
newPage, newPage,
} from './libs/page-logic'; } from '../libs/page-logic';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
import { assertCurrentWorkspaceFlavour } from './libs/workspace'; import { assertCurrentWorkspaceFlavour } from '../libs/workspace';
loadPage();
test.describe('Local first favorite items ui', () => { test.describe('Local first favorite items ui', () => {
test('Show favorite items in sidebar', async ({ page }) => { test('Show favorite items in sidebar', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await getBlockSuiteEditorTitle(page).click(); await getBlockSuiteEditorTitle(page).click();
await getBlockSuiteEditorTitle(page).fill('this is a new page to favorite'); await getBlockSuiteEditorTitle(page).fill('this is a new page to favorite');
@@ -35,6 +35,7 @@ test.describe('Local first favorite items ui', () => {
}); });
test('Show favorite items in favorite list', async ({ page }) => { test('Show favorite items in favorite list', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await getBlockSuiteEditorTitle(page).click(); await getBlockSuiteEditorTitle(page).click();
await getBlockSuiteEditorTitle(page).fill('this is a new page to favorite'); await getBlockSuiteEditorTitle(page).fill('this is a new page to favorite');
@@ -1,13 +1,13 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { getBlockSuiteEditorTitle, newPage } from './libs/page-logic'; import { getBlockSuiteEditorTitle, newPage } from '../libs/page-logic';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
import { assertCurrentWorkspaceFlavour } from './libs/workspace'; import { assertCurrentWorkspaceFlavour } from '../libs/workspace';
loadPage();
test.describe('local first new page', () => { test.describe('local first new page', () => {
test('click btn new page', async ({ page }) => { test('click btn new page', async ({ page }) => {
await openHomePage(page);
const originPageId = page.url().split('/').reverse()[0]; const originPageId = page.url().split('/').reverse()[0];
await newPage(page); await newPage(page);
const newPageId = page.url().split('/').reverse()[0]; const newPageId = page.url().split('/').reverse()[0];
@@ -16,6 +16,7 @@ test.describe('local first new page', () => {
}); });
test('click btn bew page and find it in all pages', async ({ page }) => { test('click btn bew page and find it in all pages', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await getBlockSuiteEditorTitle(page).click(); await getBlockSuiteEditorTitle(page).click();
await getBlockSuiteEditorTitle(page).fill('this is a new page'); await getBlockSuiteEditorTitle(page).fill('this is a new page');
@@ -1,13 +1,13 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { getBlockSuiteEditorTitle, newPage } from './libs/page-logic'; import { getBlockSuiteEditorTitle, newPage } from '../libs/page-logic';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
import { assertCurrentWorkspaceFlavour } from './libs/workspace'; import { assertCurrentWorkspaceFlavour } from '../libs/workspace';
loadPage();
test.describe('local first new page', () => { test.describe('local first new page', () => {
test('click btn bew page and open in tab', async ({ page }) => { test('click btn bew page and open in tab', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await getBlockSuiteEditorTitle(page).click(); await getBlockSuiteEditorTitle(page).click();
await getBlockSuiteEditorTitle(page).fill('this is a new page'); await getBlockSuiteEditorTitle(page).fill('this is a new page');
@@ -1,15 +1,15 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { getBlockSuiteEditorTitle, newPage } from './libs/page-logic'; import { getBlockSuiteEditorTitle, newPage } from '../libs/page-logic';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
import { assertCurrentWorkspaceFlavour } from './libs/workspace'; import { assertCurrentWorkspaceFlavour } from '../libs/workspace';
loadPage();
test.describe('Local first delete page', () => { test.describe('Local first delete page', () => {
test('New a page , then delete it in all pages, restore it', async ({ test('New a page , then delete it in all pages, restore it', async ({
page, page,
}) => { }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await getBlockSuiteEditorTitle(page).click(); await getBlockSuiteEditorTitle(page).click();
await getBlockSuiteEditorTitle(page).fill('this is a new page to restore'); await getBlockSuiteEditorTitle(page).fill('this is a new page to restore');
@@ -33,7 +33,8 @@ test.describe('Local first delete page', () => {
await page.getByRole('button', { name: 'Delete' }).click(); await page.getByRole('button', { name: 'Delete' }).click();
await page.getByRole('link', { name: 'Trash' }).click(); await page.getByRole('link', { name: 'Trash' }).click();
const trashPage = await page.url(); await page.waitForTimeout(50);
const trashPage = page.url();
// restore it // restore it
await page await page
.getByTestId('more-actions-' + newPageId) .getByTestId('more-actions-' + newPageId)
@@ -1,17 +1,17 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { import {
clickPageMoreActions, clickPageMoreActions,
getBlockSuiteEditorTitle, getBlockSuiteEditorTitle,
newPage, newPage,
} from './libs/page-logic'; } from '../libs/page-logic';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
import { assertCurrentWorkspaceFlavour } from './libs/workspace'; import { assertCurrentWorkspaceFlavour } from '../libs/workspace';
loadPage();
test.describe('Local first delete page', () => { test.describe('Local first delete page', () => {
test('New a page ,then open it and show delete modal', async ({ page }) => { test('New a page ,then open it and show delete modal', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await getBlockSuiteEditorTitle(page).click(); await getBlockSuiteEditorTitle(page).click();
await getBlockSuiteEditorTitle(page).fill('this is a new page to delete'); await getBlockSuiteEditorTitle(page).fill('this is a new page to delete');
@@ -33,6 +33,7 @@ test.describe('Local first delete page', () => {
test('New a page ,then go to all pages and show delete modal', async ({ test('New a page ,then go to all pages and show delete modal', async ({
page, page,
}) => { }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await getBlockSuiteEditorTitle(page).click(); await getBlockSuiteEditorTitle(page).click();
await getBlockSuiteEditorTitle(page).fill('this is a new page to delete'); await getBlockSuiteEditorTitle(page).fill('this is a new page to delete');
@@ -1,15 +1,15 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { getBlockSuiteEditorTitle, newPage } from './libs/page-logic'; import { getBlockSuiteEditorTitle, newPage } from '../libs/page-logic';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
import { assertCurrentWorkspaceFlavour } from './libs/workspace'; import { assertCurrentWorkspaceFlavour } from '../libs/workspace';
loadPage();
test.describe('Local first trash page', () => { test.describe('Local first trash page', () => {
test('New a page , then delete it in all pages, finally find it in trash', async ({ test('New a page , then delete it in all pages, finally find it in trash', async ({
page, page,
}) => { }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await getBlockSuiteEditorTitle(page).click(); await getBlockSuiteEditorTitle(page).click();
await getBlockSuiteEditorTitle(page).fill('this is a new page to delete'); await getBlockSuiteEditorTitle(page).fill('this is a new page to delete');
@@ -1,13 +1,13 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
import { clickSideBarAllPageButton } from './libs/sidebar'; import { clickSideBarAllPageButton } from '../libs/sidebar';
import { createWorkspace } from './libs/workspace'; import { createWorkspace } from '../libs/workspace';
loadPage();
test.describe('Local first workspace list', () => { test.describe('Local first workspace list', () => {
test('just one item in the workspace list at first', async ({ page }) => { test('just one item in the workspace list at first', async ({ page }) => {
await openHomePage(page);
const workspaceName = page.getByTestId('workspace-name'); const workspaceName = page.getByTestId('workspace-name');
await workspaceName.click(); await workspaceName.click();
expect( expect(
@@ -19,6 +19,7 @@ test.describe('Local first workspace list', () => {
}); });
test('create one workspace in the workspace list', async ({ page }) => { test('create one workspace in the workspace list', async ({ page }) => {
await openHomePage(page);
const newWorkspaceNameStr = 'New Workspace'; const newWorkspaceNameStr = 'New Workspace';
await createWorkspace({ name: newWorkspaceNameStr }, page); await createWorkspace({ name: newWorkspaceNameStr }, page);
@@ -46,6 +47,7 @@ test.describe('Local first workspace list', () => {
}); });
test('create multi workspace in the workspace list', async ({ page }) => { test('create multi workspace in the workspace list', async ({ page }) => {
await openHomePage(page);
await createWorkspace({ name: 'New Workspace 2' }, page); await createWorkspace({ name: 'New Workspace 2' }, page);
await createWorkspace({ name: 'New Workspace 3' }, page); await createWorkspace({ name: 'New Workspace 3' }, page);
@@ -1,14 +1,13 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
import { clickSideBarCurrentWorkspaceBanner } from './libs/sidebar'; import { clickSideBarCurrentWorkspaceBanner } from '../libs/sidebar';
import { assertCurrentWorkspaceFlavour } from './libs/workspace'; import { assertCurrentWorkspaceFlavour } from '../libs/workspace';
loadPage();
test.describe('Local first default workspace', () => { test.describe('Local first default workspace', () => {
test('preset workspace name', async ({ page }) => { test('preset workspace name', async ({ page }) => {
await openHomePage(page);
const workspaceName = page.getByTestId('workspace-name'); const workspaceName = page.getByTestId('workspace-name');
expect(await workspaceName.textContent()).toBe('Demo Workspace'); expect(await workspaceName.textContent()).toBe('Demo Workspace');
await assertCurrentWorkspaceFlavour('local', page); await assertCurrentWorkspaceFlavour('local', page);
@@ -23,6 +22,7 @@ test.describe('Local first default workspace', () => {
}); });
test.describe('Language switch', () => { test.describe('Language switch', () => {
test('Open language switch menu', async ({ page }) => { test('Open language switch menu', async ({ page }) => {
await openHomePage(page);
await clickSideBarCurrentWorkspaceBanner(page); await clickSideBarCurrentWorkspaceBanner(page);
const languageMenuButton = page.getByTestId('language-menu-button'); const languageMenuButton = page.getByTestId('language-menu-button');
await expect(languageMenuButton).toBeVisible(); await expect(languageMenuButton).toBeVisible();
@@ -1,13 +1,12 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
import { createWorkspace } from './libs/workspace'; import { createWorkspace } from '../libs/workspace';
loadPage();
test.describe('Open AFFiNE', () => { test.describe('Open AFFiNE', () => {
test('Open last workspace when back to affine', async ({ page }) => { test('Open last workspace when back to affine', async ({ page }) => {
await openHomePage(page);
await createWorkspace({ name: 'New Workspace 2' }, page); await createWorkspace({ name: 'New Workspace 2' }, page);
// FIXME: can not get when the new workspace is surely created, hack a timeout to wait // FIXME: can not get when the new workspace is surely created, hack a timeout to wait
// waiting for page loading end // waiting for page loading end
@@ -1,10 +1,9 @@
import { expect, type Page } from '@playwright/test'; import { expect, type Page } from '@playwright/test';
import { withCtrlOrMeta } from './libs/keyboard'; import { withCtrlOrMeta } from '../libs/keyboard';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { newPage } from './libs/page-logic'; import { newPage } from '../libs/page-logic';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
loadPage();
const openQuickSearchByShortcut = async (page: Page) => const openQuickSearchByShortcut = async (page: Page) =>
await withCtrlOrMeta(page, () => page.keyboard.press('k', { delay: 50 })); await withCtrlOrMeta(page, () => page.keyboard.press('k', { delay: 50 }));
@@ -32,6 +31,7 @@ async function titleIsFocused(page: Page) {
test.describe('Open quick search', () => { test.describe('Open quick search', () => {
test('Click slider bar button', async ({ page }) => { test('Click slider bar button', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
const quickSearchButton = page.locator( const quickSearchButton = page.locator(
'[data-testid=slider-bar-quick-search-button]' '[data-testid=slider-bar-quick-search-button]'
@@ -42,6 +42,7 @@ test.describe('Open quick search', () => {
}); });
test('Click arrowDown icon after title', async ({ page }) => { test('Click arrowDown icon after title', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
const quickSearchButton = page.locator( const quickSearchButton = page.locator(
'[data-testid=slider-bar-quick-search-button]' '[data-testid=slider-bar-quick-search-button]'
@@ -52,6 +53,7 @@ test.describe('Open quick search', () => {
}); });
test('Press the shortcut key cmd+k', async ({ page }) => { test('Press the shortcut key cmd+k', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
const quickSearch = page.locator('[data-testid=quickSearch]'); const quickSearch = page.locator('[data-testid=quickSearch]');
@@ -61,6 +63,7 @@ test.describe('Open quick search', () => {
test.describe('Add new page in quick search', () => { test.describe('Add new page in quick search', () => {
test('Create a new page without keyword', async ({ page }) => { test('Create a new page without keyword', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
const addNewPage = page.locator('[data-testid=quick-search-add-new-page]'); const addNewPage = page.locator('[data-testid=quick-search-add-new-page]');
@@ -70,6 +73,7 @@ test.describe('Add new page in quick search', () => {
}); });
test('Create a new page with keyword', async ({ page }) => { test('Create a new page with keyword', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
await page.keyboard.insertText('test123456'); await page.keyboard.insertText('test123456');
@@ -82,6 +86,7 @@ test.describe('Add new page in quick search', () => {
test.describe('Search and select', () => { test.describe('Search and select', () => {
test('Enter a keyword to search for', async ({ page }) => { test('Enter a keyword to search for', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
await page.keyboard.insertText('test123456'); await page.keyboard.insertText('test123456');
@@ -89,6 +94,7 @@ test.describe('Search and select', () => {
expect(actual).toBe('test123456'); expect(actual).toBe('test123456');
}); });
test('Create a new page and search this page', async ({ page }) => { test('Create a new page and search this page', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
await page.keyboard.insertText('test123456'); await page.keyboard.insertText('test123456');
@@ -119,6 +125,7 @@ test.describe('Disable search on 404 page', () => {
}); });
test.describe('Open quick search on the published page', () => { test.describe('Open quick search on the published page', () => {
test('Open quick search on local page', async ({ page }) => { test('Open quick search on local page', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
const publishedSearchResults = page.locator('[publishedSearchResults]'); const publishedSearchResults = page.locator('[publishedSearchResults]');
@@ -128,6 +135,7 @@ test.describe('Open quick search on the published page', () => {
test.describe('Focus event for quick search', () => { test.describe('Focus event for quick search', () => {
test('Autofocus input after opening quick search', async ({ page }) => { test('Autofocus input after opening quick search', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
const locator = page.locator('[cmdk-input]'); const locator = page.locator('[cmdk-input]');
@@ -135,6 +143,7 @@ test.describe('Focus event for quick search', () => {
await expect(locator).toBeFocused(); await expect(locator).toBeFocused();
}); });
test('Autofocus input after select', async ({ page }) => { test('Autofocus input after select', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
await page.keyboard.press('ArrowUp'); await page.keyboard.press('ArrowUp');
@@ -143,6 +152,7 @@ test.describe('Focus event for quick search', () => {
await expect(locator).toBeFocused(); await expect(locator).toBeFocused();
}); });
test('Focus title after creating a new page', async ({ page }) => { test('Focus title after creating a new page', async ({ page }) => {
await openHomePage(page);
await newPage(page); await newPage(page);
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
const addNewPage = page.locator('[data-testid=quick-search-add-new-page]'); const addNewPage = page.locator('[data-testid=quick-search-add-new-page]');
@@ -154,6 +164,7 @@ test.describe('Novice guidance for quick search', () => {
test('When opening the website for the first time, the first folding sidebar will appear novice guide', async ({ test('When opening the website for the first time, the first folding sidebar will appear novice guide', async ({
page, page,
}) => { }) => {
await openHomePage(page);
const quickSearchTips = page.locator('[data-testid=quick-search-tips]'); const quickSearchTips = page.locator('[data-testid=quick-search-tips]');
await expect(quickSearchTips).not.toBeVisible(); await expect(quickSearchTips).not.toBeVisible();
await page.getByTestId('sliderBar-arrowButton-collapse').click(); await page.getByTestId('sliderBar-arrowButton-collapse').click();
@@ -1,12 +1,11 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
loadPage();
test.describe('Shortcuts Modal', () => { test.describe('Shortcuts Modal', () => {
test('Open shortcuts modal', async ({ page }) => { test('Open shortcuts modal', async ({ page }) => {
await openHomePage(page);
await page.locator('[data-testid=help-island]').click(); await page.locator('[data-testid=help-island]').click();
const shortcutsIcon = page.locator('[data-testid=shortcuts-icon]'); const shortcutsIcon = page.locator('[data-testid=shortcuts-icon]');
@@ -1,12 +1,11 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
loadPage();
test.describe('subpage', () => { test.describe('subpage', () => {
test('Create subpage', async ({ page }) => { test('Create subpage', async ({ page }) => {
await openHomePage(page);
await page.getByTestId('sliderBar-arrowButton-collapse').click(); await page.getByTestId('sliderBar-arrowButton-collapse').click();
const sliderBarArea = page.getByTestId('sliderBar'); const sliderBarArea = page.getByTestId('sliderBar');
await expect(sliderBarArea).not.toBeVisible(); await expect(sliderBarArea).not.toBeVisible();
@@ -1,9 +1,7 @@
import { expect } from '@playwright/test'; import { expect } from '@playwright/test';
import { loadPage } from './libs/load-page'; import { openHomePage } from '../libs/load-page';
import { test } from './libs/playwright'; import { test } from '../libs/playwright';
loadPage();
test.describe('Change Theme', () => { test.describe('Change Theme', () => {
// default could be anything according to the system // default could be anything according to the system
@@ -12,9 +10,7 @@ test.describe('Change Theme', () => {
colorScheme: 'light', colorScheme: 'light',
}); });
const page = await context.newPage(); const page = await context.newPage();
await page.goto('http://localhost:8080'); await openHomePage(page);
// waiting for page loading end
await page.waitForSelector('#__next');
await page.waitForSelector('html'); await page.waitForSelector('html');
const root = page.locator('html'); const root = page.locator('html');
const themeMode = await root.evaluate(element => const themeMode = await root.evaluate(element =>
+21
View File
@@ -0,0 +1,21 @@
import { expect, test } from 'vitest';
test('compare config', async () => {
const { default: nextConfigMock } = await import(
'../../scripts/vitest/next-config-mock'
);
const mockConfig = nextConfigMock().publicRuntimeConfig;
const { default: nextConfig } = await import(
'../../apps/web/next.config.mjs'
);
const config = nextConfig.publicRuntimeConfig;
Object.keys(config).forEach(key => {
expect(key in mockConfig, `${key} should be in the mockConfig`).toBe(true);
expect(typeof config[key], `${key}`).toBe(typeof mockConfig[key]);
});
Object.keys(mockConfig).forEach(key => {
expect(key in config, `${key} should be in the config`).toBe(true);
expect(typeof config[key], `${key}`).toBe(typeof mockConfig[key]);
});
});
+3
View File
@@ -15,8 +15,11 @@ export default defineConfig({
test: { test: {
include: [ include: [
'packages/**/*.spec.ts', 'packages/**/*.spec.ts',
'packages/**/*.spec.tsx',
'apps/web/**/*.spec.ts', 'apps/web/**/*.spec.ts',
'apps/web/**/*.spec.tsx', 'apps/web/**/*.spec.tsx',
'tests/unit/**/*.spec.ts',
'tests/unit/**/*.spec.tsx',
], ],
testTimeout: 5000, testTimeout: 5000,
coverage: { coverage: {