test/user-journey #3

Merged
zhangxiang merged 142 commits from test/user-journey into dev 2026-04-12 13:17:03 +08:00
4 changed files with 126 additions and 0 deletions
Showing only changes of commit 79a66612bd - Show all commits
+26
View File
@@ -0,0 +1,26 @@
/* eslint-disable react-hooks/rules-of-hooks */
import { test as base } from '@playwright/test';
import { AdminLoginPage } from '../pages/AdminLoginPage';
import { testFixtures } from './test-data';
type AuthFixtures = {
authenticatedPage: void;
adminLoginPage: AdminLoginPage;
};
export const test = base.extend<AuthFixtures>({
authenticatedPage: async ({ page }, use) => {
const loginPage = new AdminLoginPage(page);
await loginPage.goto();
await loginPage.login(testFixtures.adminUser.email, testFixtures.adminUser.password);
await loginPage.expectLoginSuccess();
await use();
},
adminLoginPage: async ({ page }, use) => {
await use(new AdminLoginPage(page));
},
});
export { expect } from '@playwright/test';
+3
View File
@@ -0,0 +1,3 @@
export { testFixtures } from './test-data';
export { test as authTest, expect } from './auth';
export { test as storageStateTest } from './storage-state';
+29
View File
@@ -0,0 +1,29 @@
/* eslint-disable react-hooks/rules-of-hooks */
import { test as base } from '@playwright/test';
import path from 'path';
const AUTH_FILE = path.join(__dirname, '../.auth/admin.json');
type StorageStateFixtures = {
adminStorageState: string;
};
export const test = base.extend<StorageStateFixtures>({
adminStorageState: async ({ browser }, use) => {
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('/admin/login');
await page.fill('#email', process.env.ADMIN_EMAIL || 'admin@novalon.cn');
await page.fill('#password', process.env.ADMIN_PASSWORD || 'admin123456');
await page.click('button[type="submit"]');
await page.waitForURL(/\/admin(?!\/login)/);
await page.context().storageState({ path: AUTH_FILE });
await context.close();
await use(AUTH_FILE);
},
});
export { expect } from '@playwright/test';
+68
View File
@@ -0,0 +1,68 @@
export const testFixtures = {
adminUser: {
email: process.env.ADMIN_EMAIL || 'admin@novalon.cn',
password: process.env.ADMIN_PASSWORD || 'admin123456',
},
testContent: {
news: {
type: 'news' as const,
title: `测试新闻-${Date.now()}`,
slug: `test-news-${Date.now()}`,
excerpt: '这是一条测试新闻的摘要内容',
content: '<p>这是测试新闻的正文内容</p>',
category: '公司新闻',
tags: ['测试', '自动化'],
status: 'published' as const,
},
product: {
type: 'product' as const,
title: `测试产品-${Date.now()}`,
slug: `test-product-${Date.now()}`,
excerpt: '这是一个测试产品的描述',
content: '<p>测试产品的详细介绍</p>',
category: '软件产品',
tags: ['产品', '测试'],
status: 'published' as const,
},
service: {
type: 'service' as const,
title: `测试服务-${Date.now()}`,
slug: `test-service-${Date.now()}`,
excerpt: '这是一个测试服务的描述',
content: '<p>测试服务的详细介绍</p>',
category: '软件开发',
tags: ['服务', '测试'],
status: 'published' as const,
},
case: {
type: 'case' as const,
title: `测试案例-${Date.now()}`,
slug: `test-case-${Date.now()}`,
excerpt: '这是一个测试案例的描述',
content: '<p>测试案例的详细介绍</p>',
category: '企业服务',
tags: ['案例', '测试'],
status: 'published' as const,
},
},
invalidContent: {
empty: {
type: 'news' as const,
title: '',
slug: '',
content: '',
},
xss: {
type: 'news' as const,
title: `XSS测试-${Date.now()}`,
slug: `xss-test-${Date.now()}`,
excerpt: '<script>alert("XSS")</script>测试摘要',
content: '<p><script>alert("XSS")</script>测试内容</p>',
category: '安全测试',
tags: ['安全'],
status: 'published' as const,
},
},
};