From 3e449fa8b0e3d6c038587ac466c8668f51d50a14 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Thu, 3 Mar 2022 17:19:20 +0800 Subject: [PATCH] test: add e2e test for group profile --- web/e2e/playwright/package.json | 3 +- web/e2e/playwright/playwright.config.ts | 4 +- web/e2e/playwright/tests/main.spec.ts | 46 ++++++++++++++++++- web/src/components/SectionHeader.tsx | 13 +++++- web/src/init.tsx | 3 +- .../routes/Main/Content/Group/GroupHeader.tsx | 6 ++- 6 files changed, 65 insertions(+), 10 deletions(-) diff --git a/web/e2e/playwright/package.json b/web/e2e/playwright/package.json index afa2e600..d84dec9b 100644 --- a/web/e2e/playwright/package.json +++ b/web/e2e/playwright/package.json @@ -11,7 +11,8 @@ "test:debug": "playwright test --debug", "test:watch": "playwright-watch exec yarn test", "open": "playwright open --load-storage auth.json http://localhost:11011", - "codegen": "playwright codegen --load-storage auth.json http://localhost:11011" + "codegen": "playwright codegen --load-storage auth.json http://localhost:11011", + "trace": "playwright show-trace" }, "devDependencies": { "@playwright/test": "^1.19.2", diff --git a/web/e2e/playwright/playwright.config.ts b/web/e2e/playwright/playwright.config.ts index 513a728c..18bd4720 100644 --- a/web/e2e/playwright/playwright.config.ts +++ b/web/e2e/playwright/playwright.config.ts @@ -35,11 +35,9 @@ const config: PlaywrightTestConfig = { baseURL: 'http://localhost:11011', /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ actionTimeout: 0, - /* Base URL to use in actions like `await page.goto('/')`. */ - // baseURL: 'http://localhost:3000', /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: 'on-first-retry', + trace: process.env.CI ? 'on-first-retry' : 'retain-on-failure', }, /* Configure projects for major browsers */ diff --git a/web/e2e/playwright/tests/main.spec.ts b/web/e2e/playwright/tests/main.spec.ts index 284805a4..5ddca1c6 100644 --- a/web/e2e/playwright/tests/main.spec.ts +++ b/web/e2e/playwright/tests/main.spec.ts @@ -64,7 +64,7 @@ test.describe('Main Process', () => { */ async function deleteGroup(page: Page) { // Click text=Test - await page.locator('text=Test').click(); + await page.locator('[data-testid="group-header"]').click(); // Click text=退出群组 await page.locator('text=退出群组').click(); // Click button:has-text("OK") @@ -74,9 +74,51 @@ test.describe('Main Process', () => { ]); } - test.only('Create Group', async ({ page }) => { + test('Create Group', async ({ page }) => { await createGroup(page); await deleteGroup(page); }); + + test('Group Profile', async ({ page }) => { + await createGroup(page); + + await page.locator('[data-testid="group-header"]').click(); + // Click text=查看详情 + await page.locator('text=查看详情').click(); + // Click text=群组名称Test >> button + await page.locator('text=群组名称Test >> button').click(); + // Click text=T群组名称 >> input[type="text"] + await page.locator('text=T群组名称 >> input[type="text"]').click(); + // Fill text=T群组名称 >> input[type="text"] + await page + .locator('text=T群组名称 >> input[type="text"]') + .fill('Test123'); + // Click button >> nth=4 + await page.locator('button').nth(4).click(); + await expect(page.locator('[data-testid="toast"]')).toHaveText( + '修改群组名成功' + ); + + // Click text=面板 + await page.locator('text=面板').click(); + // Click button:has-text("创建面板") + await page.locator('button:has-text("创建面板")').click(); + // Click input[name="name"] + await page.locator('input[name="name"]').click(); + // Fill input[name="name"] + await page.locator('input[name="name"]').fill('Test'); + // Click button:has-text("提 交") + await page.locator('button:has-text("提 交")').click(); + // Click .ant-tree-treenode.ant-tree-treenode-switcher-open + await page + .locator('.ant-tree-treenode.ant-tree-treenode-switcher-open') + .click(); + // Click [data-testid="full-modal-close"] svg[role="img"] + await page + .locator('[data-testid="full-modal-close"] svg[role="img"]') + .click(); + + await deleteGroup(page); + }); }); }); diff --git a/web/src/components/SectionHeader.tsx b/web/src/components/SectionHeader.tsx index ac1a244c..3586c5c5 100644 --- a/web/src/components/SectionHeader.tsx +++ b/web/src/components/SectionHeader.tsx @@ -5,6 +5,7 @@ import clsx from 'clsx'; interface SectionHeaderProps { menu?: React.ReactElement; + 'data-testid'?: string; } export const SectionHeader: React.FC = React.memo( @@ -20,7 +21,10 @@ export const SectionHeader: React.FC = React.memo( placement="topRight" trigger={['click']} > -
+
{props.children}
= React.memo(
) : ( -
{props.children}
+
+ {props.children} +
)}
); diff --git a/web/src/init.tsx b/web/src/init.tsx index ae801ce8..bb3658e2 100644 --- a/web/src/init.tsx +++ b/web/src/init.tsx @@ -1,4 +1,5 @@ import { message, Modal } from 'antd'; +import React from 'react'; import { buildStorage, setAlert, @@ -28,7 +29,7 @@ setToasts((msg, type = 'info') => { message.open({ type, duration: 3, - content: String(msg), + content:
{String(msg)}
, }); }); diff --git a/web/src/routes/Main/Content/Group/GroupHeader.tsx b/web/src/routes/Main/Content/Group/GroupHeader.tsx index 4e046f25..f7646661 100644 --- a/web/src/routes/Main/Content/Group/GroupHeader.tsx +++ b/web/src/routes/Main/Content/Group/GroupHeader.tsx @@ -41,6 +41,10 @@ export const GroupHeader: React.FC = React.memo((props) => { ); - return {groupInfo?.name}; + return ( + + {groupInfo?.name} + + ); }); GroupHeader.displayName = 'GroupHeader';