feat: add case management E2E tests
This commit is contained in:
@@ -0,0 +1,110 @@
|
|||||||
|
import { test, expect } from '../../fixtures/base.fixture';
|
||||||
|
import { AdminLoginPage, AdminContentPage } from '../../pages/AdminPage';
|
||||||
|
import { adminTestData, generateTestContent } from '../../data/admin-test-data';
|
||||||
|
|
||||||
|
test.describe('成功案例管理E2E测试', () => {
|
||||||
|
let loginPage: AdminLoginPage;
|
||||||
|
let contentPage: AdminContentPage;
|
||||||
|
|
||||||
|
test.beforeEach(async ({ page }) => {
|
||||||
|
loginPage = new AdminLoginPage(page);
|
||||||
|
contentPage = new AdminContentPage(page);
|
||||||
|
|
||||||
|
await loginPage.goto();
|
||||||
|
await loginPage.login(adminTestData.users.admin.email, adminTestData.users.admin.password);
|
||||||
|
|
||||||
|
await expect(async () => {
|
||||||
|
await page.waitForURL(/\/admin/, { timeout: 10000 });
|
||||||
|
}).toPass({ timeout: 15000 });
|
||||||
|
});
|
||||||
|
|
||||||
|
test('应该能够创建案例', async ({ page }) => {
|
||||||
|
const caseData = generateTestContent('case');
|
||||||
|
|
||||||
|
await contentPage.goto();
|
||||||
|
await contentPage.createContent(caseData);
|
||||||
|
|
||||||
|
await expect(page.locator('text=保存成功')).toBeVisible({ timeout: 5000 });
|
||||||
|
|
||||||
|
await contentPage.goto();
|
||||||
|
await contentPage.searchContent(caseData.title);
|
||||||
|
|
||||||
|
const caseCount = await contentPage.contentList.count();
|
||||||
|
expect(caseCount).toBeGreaterThan(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('应该能够编辑案例', async ({ page }) => {
|
||||||
|
await contentPage.goto();
|
||||||
|
await contentPage.searchContent('测试案例');
|
||||||
|
|
||||||
|
const initialCount = await contentPage.contentList.count();
|
||||||
|
if (initialCount === 0) {
|
||||||
|
test.skip(true, '没有找到可编辑的案例');
|
||||||
|
}
|
||||||
|
|
||||||
|
await contentPage.editContent(0);
|
||||||
|
|
||||||
|
const updatedTitle = '更新后的案例标题-' + Date.now();
|
||||||
|
await page.locator('input[name="title"]').fill(updatedTitle);
|
||||||
|
await page.getByRole('button', { name: /保存/i }).click();
|
||||||
|
|
||||||
|
await expect(page.locator('text=保存成功')).toBeVisible({ timeout: 5000 });
|
||||||
|
});
|
||||||
|
|
||||||
|
test('应该能够删除案例', async ({ page }) => {
|
||||||
|
const caseData = generateTestContent('case');
|
||||||
|
|
||||||
|
await contentPage.goto();
|
||||||
|
await contentPage.createContent(caseData);
|
||||||
|
await expect(page.locator('text=保存成功')).toBeVisible({ timeout: 5000 });
|
||||||
|
|
||||||
|
await contentPage.goto();
|
||||||
|
await contentPage.searchContent(caseData.title);
|
||||||
|
|
||||||
|
const initialCount = await contentPage.contentList.count();
|
||||||
|
if (initialCount === 0) {
|
||||||
|
test.skip(true, '没有找到可删除的案例');
|
||||||
|
}
|
||||||
|
|
||||||
|
await contentPage.deleteContent(0);
|
||||||
|
|
||||||
|
await expect(contentPage.contentList).toHaveCount(initialCount - 1, { timeout: 5000 });
|
||||||
|
});
|
||||||
|
|
||||||
|
test('应该能够设置案例封面图', async ({ page }) => {
|
||||||
|
await contentPage.goto();
|
||||||
|
await contentPage.createButton.click();
|
||||||
|
|
||||||
|
await page.locator('select[name="type"]').selectOption('case');
|
||||||
|
const caseTitle = '带封面的案例-' + Date.now();
|
||||||
|
await page.locator('input[name="title"]').fill(caseTitle);
|
||||||
|
await page.locator('input[name="slug"]').fill('case-with-cover-' + Date.now());
|
||||||
|
|
||||||
|
const fileInput = page.locator('input[type="file"]');
|
||||||
|
await fileInput.setInputFiles({
|
||||||
|
name: 'test-image.jpg',
|
||||||
|
mimeType: 'image/jpeg',
|
||||||
|
buffer: Buffer.from('fake-image-content')
|
||||||
|
});
|
||||||
|
|
||||||
|
await page.getByRole('button', { name: /保存/i }).click();
|
||||||
|
|
||||||
|
await expect(page.locator('text=保存成功')).toBeVisible({ timeout: 5000 });
|
||||||
|
|
||||||
|
await expect(page.locator('img[alt="封面"]')).toBeVisible({ timeout: 5000 });
|
||||||
|
});
|
||||||
|
|
||||||
|
test('应该能够筛选案例类型', async ({ page }) => {
|
||||||
|
await contentPage.goto();
|
||||||
|
|
||||||
|
const typeFilter = page.locator('select').first();
|
||||||
|
await typeFilter.selectOption('case');
|
||||||
|
await page.waitForTimeout(1000);
|
||||||
|
|
||||||
|
const items = await contentPage.contentList.all();
|
||||||
|
for (const item of items) {
|
||||||
|
const typeBadge = await item.locator('span').first().textContent();
|
||||||
|
expect(typeBadge).toContain('案例');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user