.
CI / test (push) Successful in 5m43s
CI / e2e (push) Failing after 5m54s
CI / pr_and_merge (push) Has been skipped

This commit is contained in:
2025-12-16 18:36:09 +09:00
parent 6ef7a944c2
commit 3f40021fab
+38
View File
@@ -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 }) => { test("텍스트/버튼/리스트/이미지/비디오/폼 입력 필드 스타일이 프리뷰와 퍼블릭 페이지에서 동일해야 한다", async ({ page, request }) => {
const now = Date.now(); const now = Date.now();
const slug = `style-regression-${now}`; const slug = `style-regression-${now}`;
@@ -214,6 +246,7 @@ test("텍스트/버튼/리스트/이미지/비디오/폼 입력 필드 스타일
await page.getByRole("button", { name: "Save (local + server)" }).click(); await page.getByRole("button", { name: "Save (local + server)" }).click();
await expect(page).toHaveURL(/\/_?projects/); await expect(page).toHaveURL(/\/_?projects/);
await patchProjectStatusForCurrentUser(page, request, slug, "PUBLISHED");
await page.goto(`/p/${slug}`); await page.goto(`/p/${slug}`);
// 4) 동일한 slug 의 퍼블릭 페이지(/p/[slug])로 이동해 같은 요소들의 스타일을 다시 측정한다. // 4) 동일한 slug 의 퍼블릭 페이지(/p/[slug])로 이동해 같은 요소들의 스타일을 다시 측정한다.
@@ -402,6 +435,7 @@ test("버튼 너비/패딩/색상/둥글기 스타일이 프리뷰와 퍼블릭
await page.getByRole("button", { name: "Save (local + server)" }).click(); await page.getByRole("button", { name: "Save (local + server)" }).click();
await page.waitForURL(/\/projects/); await page.waitForURL(/\/projects/);
await patchProjectStatusForCurrentUser(page, request, slug, "PUBLISHED");
await page.goto(`/p/${slug}`); await page.goto(`/p/${slug}`);
const publicButton = page.getByRole("link", { name: "Button" }).first(); const publicButton = page.getByRole("link", { name: "Button" }).first();
@@ -526,6 +560,7 @@ test("폼 셀렉트/체크박스/라디오 기본 텍스트 스타일이 프리
await page.getByRole("button", { name: "Save (local + server)" }).click(); await page.getByRole("button", { name: "Save (local + server)" }).click();
await page.waitForURL(/\/projects/); await page.waitForURL(/\/projects/);
await patchProjectStatusForCurrentUser(page, request, slug, "PUBLISHED");
await page.goto(`/p/${slug}`); await page.goto(`/p/${slug}`);
// 4) 동일한 slug 의 퍼블릭 페이지(/p/[slug])로 이동해 같은 텍스트들의 스타일을 다시 측정한다. // 4) 동일한 slug 의 퍼블릭 페이지(/p/[slug])로 이동해 같은 텍스트들의 스타일을 다시 측정한다.
@@ -749,6 +784,7 @@ test("폼 셀렉트/체크박스/라디오 레이아웃/패딩/너비/간격 스
await page.getByRole("button", { name: "Save (local + server)" }).click(); await page.getByRole("button", { name: "Save (local + server)" }).click();
await page.waitForURL(/\/projects/); await page.waitForURL(/\/projects/);
await patchProjectStatusForCurrentUser(page, request, slug, "PUBLISHED");
await page.goto(`/p/${slug}`); await page.goto(`/p/${slug}`);
const publicSelectWrapper = page.locator(".pb-form-field").first(); const publicSelectWrapper = page.locator(".pb-form-field").first();
@@ -1031,6 +1067,7 @@ test("섹션 배경/레이아웃 스타일이 프리뷰와 퍼블릭 페이지
await page.getByRole("button", { name: "Save (local + server)" }).click(); await page.getByRole("button", { name: "Save (local + server)" }).click();
await page.waitForURL(/\/projects/); await page.waitForURL(/\/projects/);
await patchProjectStatusForCurrentUser(page, request, slug, "PUBLISHED");
await page.goto(`/p/${slug}`); await page.goto(`/p/${slug}`);
// 4) 퍼블릭 페이지에서 같은 섹션 레이아웃의 스타일을 다시 측정한다. // 4) 퍼블릭 페이지에서 같은 섹션 레이아웃의 스타일을 다시 측정한다.
@@ -1141,6 +1178,7 @@ test("구분선 스타일이 프리뷰와 퍼블릭 페이지에서 동일해야
await page.getByRole("button", { name: "Save (local + server)" }).click(); await page.getByRole("button", { name: "Save (local + server)" }).click();
await page.waitForURL(/\/projects/); await page.waitForURL(/\/projects/);
await patchProjectStatusForCurrentUser(page, request, slug, "PUBLISHED");
await page.goto(`/p/${slug}`); await page.goto(`/p/${slug}`);
const publicDivider = page.locator("hr.pb-divider").first(); const publicDivider = page.locator("hr.pb-divider").first();