From f846b388076b243c45320dbbdacc56985254832c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Thu, 12 Mar 2026 22:04:32 +0800 Subject: [PATCH] feat: add case management E2E tests --- e2e/src/tests/admin/case-management.spec.ts | 110 ++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 e2e/src/tests/admin/case-management.spec.ts diff --git a/e2e/src/tests/admin/case-management.spec.ts b/e2e/src/tests/admin/case-management.spec.ts new file mode 100644 index 0000000..c61aa8e --- /dev/null +++ b/e2e/src/tests/admin/case-management.spec.ts @@ -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('案例'); + } + }); +});