diff --git a/e2e/src/tests/admin/service-management.spec.ts b/e2e/src/tests/admin/service-management.spec.ts new file mode 100644 index 0000000..ab5dae2 --- /dev/null +++ b/e2e/src/tests/admin/service-management.spec.ts @@ -0,0 +1,87 @@ +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 serviceData = generateTestContent('service'); + + await contentPage.goto(); + await contentPage.createContent(serviceData); + + await expect(page.locator('text=保存成功')).toBeVisible({ timeout: 5000 }); + + await contentPage.goto(); + await contentPage.searchContent(serviceData.title); + + const serviceCount = await contentPage.contentList.count(); + expect(serviceCount).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 serviceData = generateTestContent('service'); + + await contentPage.goto(); + await contentPage.createContent(serviceData); + await expect(page.locator('text=保存成功')).toBeVisible({ timeout: 5000 }); + + await contentPage.goto(); + await contentPage.searchContent(serviceData.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(); + + const typeFilter = page.locator('select').first(); + await typeFilter.selectOption('service'); + 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('服务'); + } + }); +});