import { test, expect } from "@playwright/test"; // CTA / Features 템플릿이 현재 로케일에 따라 올바른 기본 텍스트로 생성되는지 검증한다. // 모든 테스트에서 /api/auth/me 를 목 처리해 로그인 상태를 강제한다. test.beforeEach(async ({ page }) => { await page.route("**/api/auth/me", async (route) => { await route.fulfill({ status: 200, contentType: "application/json", body: JSON.stringify({ id: "user-e2e", email: "e2e@example.com", tokenVersion: 1 }), }); }); }); function getLocaleToggle(page: import("@playwright/test").Page) { return page.getByRole("button", { name: "Toggle locale" }); } async function assertLocale(page: import("@playwright/test").Page, expected: "EN" | "KO") { const toggle = getLocaleToggle(page); await expect(toggle).toBeVisible(); await expect(toggle).toHaveText(expected); } async function setLocale(page: import("@playwright/test").Page, target: "EN" | "KO") { const toggle = getLocaleToggle(page); await expect(toggle).toBeVisible(); const current = (await toggle.textContent())?.trim(); if (current === target) return; await toggle.click(); await expect(toggle).toHaveText(target); } // EN 로케일 기준 CTA 템플릿 test("CTA 템플릿은 EN 로케일에서 영어 기본 텍스트로 생성되어야 한다", async ({ page }) => { await page.goto("/editor"); await setLocale(page, "EN"); await page.getByRole("button", { name: "CTA template" }).click(); const canvas = page.getByTestId("editor-canvas"); // 디버그: 현재 캔버스 텍스트 블록들의 내용을 로그로 출력한다(플레이키 이슈 분석용). const debugTexts = await canvas.getByTestId("editor-block").allInnerTexts(); // eslint-disable-next-line no-console console.log("[CTA EN debug] block texts:", debugTexts); // 실제 검증은 프리뷰 페이지에서 EN 기본 텍스트가 렌더되는지 기준으로 수행한다. await Promise.all([ page.waitForURL(/\/preview/), page.getByRole("link", { name: "Open preview" }).click(), ]); await expect(page.getByRole("heading", { name: "Page Preview" })).toBeVisible(); // EN 기본 CTA 본문/버튼 텍스트가 프리뷰에 보여야 한다. await expect(page.getByText("Write a compelling CTA message here.")).toBeVisible(); await expect(page.getByText("Call to action")).toBeVisible(); // KO 기본 CTA 텍스트/버튼은 프리뷰에 나타나지 않아야 한다. await expect( page.getByText("지금 바로 행동을 유도하는 CTA 텍스트를 입력하세요.", { exact: false }), ).toHaveCount(0); await expect(page.getByText("CTA 버튼")).toHaveCount(0); }); // KO 로케일 기준 CTA 템플릿 test("CTA 템플릿은 KO 로케일에서 한국어 기본 텍스트로 생성되어야 한다", async ({ page }) => { await page.goto("/editor"); await setLocale(page, "KO"); await page.getByRole("button", { name: "CTA 템플릿" }).click(); const canvas = page.getByTestId("editor-canvas"); await expect( canvas.getByText("지금 바로 행동을 유도하는 CTA 텍스트를 입력하세요.", { exact: false }), ).toBeVisible(); await expect(canvas.getByRole("button", { name: "CTA 버튼" })).toBeVisible(); await expect(canvas.getByText("Write a compelling CTA message here.")).toHaveCount(0); }); // EN 로케일 기준 Features 템플릿 test("Features 템플릿은 EN 로케일에서 영어 기본 텍스트로 생성되어야 한다", async ({ page }) => { await page.goto("/editor"); await setLocale(page, "EN"); await page.getByRole("button", { name: "Features template" }).click(); const canvas = page.getByTestId("editor-canvas"); // 디버그: 현재 캔버스 텍스트 블록들의 내용을 로그로 출력한다. const debugTexts = await canvas.getByTestId("editor-block").allInnerTexts(); // eslint-disable-next-line no-console console.log("[Features EN debug] block texts:", debugTexts); await expect(canvas.getByText("Feature 1", { exact: false }).first()).toBeVisible(); await expect(canvas.getByText("A short description of this feature.").first()).toBeVisible(); await expect( canvas.getByText("해당 기능을 간단히 설명하는 텍스트입니다.", { exact: false }), ).toHaveCount(0); }); // KO 로케일 기준 Features 템플릿 test("Features 템플릿은 KO 로케일에서 한국어 기본 텍스트로 생성되어야 한다", async ({ page }) => { await page.goto("/editor"); await setLocale(page, "KO"); await page.getByRole("button", { name: "기능 템플릿" }).click(); const canvas = page.getByTestId("editor-canvas"); await expect(canvas.getByText("Feature 1 제목", { exact: false })).toBeVisible(); await expect( canvas.getByText("해당 기능을 간단히 설명하는 텍스트입니다.", { exact: false }).first(), ).toBeVisible(); await expect(canvas.getByText("A short description of this feature.")).toHaveCount(0); });