fix(e2e): seed template and title data for new test users
CI/CD Pipeline / Staging E2E Tests (push) Failing after 69h11m29s
CI/CD Pipeline / Deploy Staging (push) Failing after 69h13m6s
CI/CD Pipeline / Frontend Lint (push) Failing after 69h13m41s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 69h14m28s
CI/CD Pipeline / Production Browser E2E (push) Failing after 1727h42m52s
CI/CD Pipeline / Deploy Production (push) Failing after 1727h42m54s
CI/CD Pipeline / Build Production Runtime Images (push) Failing after 1727h47m37s

GeneratePage now loads templates from API instead of hardcoded list;
TitlesPage loads titles from API. New E2E test users have no data,
causing empty states and selector failures.

- core-generation: POST /api/v1/templates before browser test
- core-titles: POST /api/v1/titles before browser test

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
灵应
2026-07-06 15:39:46 +08:00
parent 7b34547f04
commit b057c2d478
2 changed files with 44 additions and 15 deletions
+31 -15
View File
@@ -40,6 +40,7 @@ async function loginWithRetry(
type ProjectResponse = { id: string };
type LibraryResponse = { id: string };
type TemplateResponse = { id: string };
type AssetListResponse = {
items: Array<{
id: string;
@@ -126,6 +127,29 @@ test.describe("Core generation flow", () => {
)
.toBe("ready");
// Create an editing template so the generate page has at least one template
// (templates are now loaded from API; new users have none by default)
const template = await request.post(`${apiBase}/templates`, {
headers,
data: {
name: `E2E 测试模板 ${suffix}`,
mode: "pip",
estimated_duration: 30,
segments: [
{
segment_order: 1,
duration_min: 5,
duration_max: 30,
material_type: "video",
},
],
tags: ["e2e"],
},
});
expect(template.status(), await template.text()).toBe(200);
const templateData = (await template.json()) as TemplateResponse;
expect(templateData.id).toBeTruthy();
// Set auth in localStorage
await page.addInitScript(
({ token, user }) => {
@@ -163,38 +187,30 @@ test.describe("Core generation flow", () => {
await page.getByRole("button", { name: "下一步" }).click();
// Step 2: select material
await expect(
page.getByRole("heading", { name: /选择素材/ }),
).toBeVisible();
await expect(page.getByRole("heading", { name: /选择素材/ })).toBeVisible();
const librarySelect = page.locator("select").first();
await librarySelect.selectOption({ label: libraryName });
const materialLabel = page.getByText(sourceFileName).locator("..");
await expect(
materialLabel.locator("input[type='checkbox']"),
).toBeVisible({ timeout: 10_000 });
await expect(materialLabel.locator("input[type='checkbox']")).toBeVisible({
timeout: 10_000,
});
await materialLabel.locator("input[type='checkbox']").check();
await page.getByRole("button", { name: "下一步" }).click();
// Step 3: title
await expect(
page.getByRole("heading", { name: /选择标题/ }),
).toBeVisible();
await expect(page.getByRole("heading", { name: /选择标题/ })).toBeVisible();
const titleText = `E2E Test ${suffix}`;
await page.getByPlaceholder("输入自定义标题…").fill(titleText);
await page.getByRole("button", { name: "下一步" }).click();
// Step 4: voice
await expect(
page.getByRole("heading", { name: /选择配音/ }),
).toBeVisible();
await expect(page.getByRole("heading", { name: /选择配音/ })).toBeVisible();
const firstVoiceCard = page.locator(".xx-voice-choice-item").first();
await firstVoiceCard.click();
await page.getByRole("button", { name: "下一步" }).click();
// Step 5: confirm and generate
await expect(
page.getByRole("heading", { name: /确认生成/ }),
).toBeVisible();
await expect(page.getByRole("heading", { name: /确认生成/ })).toBeVisible();
// Wait for plan creation API to be called
const createPlanPromise = page.waitForResponse(
+13
View File
@@ -60,6 +60,19 @@ test.describe("Title library flow", () => {
const login = await loginWithRetry(request, email, PASSWORD);
expect(login.status(), await login.text()).toBe(200);
const loginData = (await login.json()) as { access_token: string };
const headers = { Authorization: `Bearer ${loginData.access_token}` };
// Create a title so the titles page has at least one title card to display
// (titles are loaded from API; new users have none by default)
const createTitle = await request.post(`${apiBase}/titles`, {
headers,
data: {
name: `E2E 测试标题 ${suffix}`,
text: `E2E 测试标题内容 ${suffix}`,
category: "default",
},
});
expect(createTitle.status(), await createTitle.text()).toBe(201);
await page.addInitScript(
({ token, user }) => {