diff --git a/tests/e2e/block-styles-regression.spec.ts b/tests/e2e/block-styles-regression.spec.ts index 8357874..ba87b3c 100644 --- a/tests/e2e/block-styles-regression.spec.ts +++ b/tests/e2e/block-styles-regression.spec.ts @@ -72,6 +72,38 @@ async function ensureAuthenticated(page: any, request: any) { ]); } +async function patchProjectStatusForCurrentUser( + page: import("@playwright/test").Page, + request: import("@playwright/test").APIRequestContext, + slug: string, + status: "DRAFT" | "PUBLISHED" | "ARCHIVED", +) { + const cookies = await page.context().cookies(); + const pbCookie = cookies.find((c) => c.name === "pb_access"); + expect(pbCookie).toBeTruthy(); + + const res = await request.patch(`/api/projects/${slug}`, { + headers: { + "Content-Type": "application/json", + Cookie: `pb_access=${pbCookie!.value}`, + }, + data: { status }, + }); + + const code = res.status(); + if (code !== 200) { + console.log("[block-styles-regression] patchProjectStatus error status=", code); + try { + const bodyText = await res.text(); + console.log("[block-styles-regression] patchProjectStatus error body=", bodyText); + } catch (e) { + console.log("[block-styles-regression] patchProjectStatus error: body read failed", e); + } + } + + expect(code).toBe(200); +} + test("텍스트/버튼/리스트/이미지/비디오/폼 입력 필드 스타일이 프리뷰와 퍼블릭 페이지에서 동일해야 한다", async ({ page, request }) => { const now = Date.now(); const slug = `style-regression-${now}`; @@ -214,6 +246,7 @@ test("텍스트/버튼/리스트/이미지/비디오/폼 입력 필드 스타일 await page.getByRole("button", { name: "Save (local + server)" }).click(); await expect(page).toHaveURL(/\/_?projects/); + await patchProjectStatusForCurrentUser(page, request, slug, "PUBLISHED"); await page.goto(`/p/${slug}`); // 4) 동일한 slug 의 퍼블릭 페이지(/p/[slug])로 이동해 같은 요소들의 스타일을 다시 측정한다. @@ -402,6 +435,7 @@ test("버튼 너비/패딩/색상/둥글기 스타일이 프리뷰와 퍼블릭 await page.getByRole("button", { name: "Save (local + server)" }).click(); await page.waitForURL(/\/projects/); + await patchProjectStatusForCurrentUser(page, request, slug, "PUBLISHED"); await page.goto(`/p/${slug}`); const publicButton = page.getByRole("link", { name: "Button" }).first(); @@ -526,6 +560,7 @@ test("폼 셀렉트/체크박스/라디오 기본 텍스트 스타일이 프리 await page.getByRole("button", { name: "Save (local + server)" }).click(); await page.waitForURL(/\/projects/); + await patchProjectStatusForCurrentUser(page, request, slug, "PUBLISHED"); await page.goto(`/p/${slug}`); // 4) 동일한 slug 의 퍼블릭 페이지(/p/[slug])로 이동해 같은 텍스트들의 스타일을 다시 측정한다. @@ -749,6 +784,7 @@ test("폼 셀렉트/체크박스/라디오 레이아웃/패딩/너비/간격 스 await page.getByRole("button", { name: "Save (local + server)" }).click(); await page.waitForURL(/\/projects/); + await patchProjectStatusForCurrentUser(page, request, slug, "PUBLISHED"); await page.goto(`/p/${slug}`); const publicSelectWrapper = page.locator(".pb-form-field").first(); @@ -1031,6 +1067,7 @@ test("섹션 배경/레이아웃 스타일이 프리뷰와 퍼블릭 페이지 await page.getByRole("button", { name: "Save (local + server)" }).click(); await page.waitForURL(/\/projects/); + await patchProjectStatusForCurrentUser(page, request, slug, "PUBLISHED"); await page.goto(`/p/${slug}`); // 4) 퍼블릭 페이지에서 같은 섹션 레이아웃의 스타일을 다시 측정한다. @@ -1141,6 +1178,7 @@ test("구분선 스타일이 프리뷰와 퍼블릭 페이지에서 동일해야 await page.getByRole("button", { name: "Save (local + server)" }).click(); await page.waitForURL(/\/projects/); + await patchProjectStatusForCurrentUser(page, request, slug, "PUBLISHED"); await page.goto(`/p/${slug}`); const publicDivider = page.locator("hr.pb-divider").first();