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
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:
@@ -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(
|
||||
|
||||
@@ -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 }) => {
|
||||
|
||||
Reference in New Issue
Block a user