Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2a1da6a6d4 | |||
| ab5067c984 | |||
| 3f40021fab | |||
| 6ef7a944c2 |
@@ -23,7 +23,7 @@ function parsePx(value: string): number | null {
|
||||
return Number.isFinite(n) ? n : null;
|
||||
}
|
||||
|
||||
async function ensureAuthenticated(page: any, request: any) {
|
||||
async function ensureAuthenticated(page: any, request: any): Promise<string> {
|
||||
const now = Date.now();
|
||||
const email = `style-regression-${now}@example.com`;
|
||||
const password = "style-regression-password";
|
||||
@@ -70,6 +70,36 @@ async function ensureAuthenticated(page: any, request: any) {
|
||||
sameSite: "Lax",
|
||||
},
|
||||
]);
|
||||
|
||||
return accessToken;
|
||||
}
|
||||
|
||||
async function patchProjectStatusForCurrentUser(
|
||||
request: import("@playwright/test").APIRequestContext,
|
||||
accessToken: string,
|
||||
slug: string,
|
||||
status: "DRAFT" | "PUBLISHED" | "ARCHIVED",
|
||||
) {
|
||||
const res = await request.patch(`/api/projects/${slug}`, {
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Cookie: `pb_access=${accessToken}`,
|
||||
},
|
||||
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 }) => {
|
||||
@@ -77,7 +107,7 @@ test("텍스트/버튼/리스트/이미지/비디오/폼 입력 필드 스타일
|
||||
const slug = `style-regression-${now}`;
|
||||
|
||||
// 1) 에디터에서 프로젝트 slug 와 기본 블록들을 구성한다.
|
||||
await ensureAuthenticated(page, request);
|
||||
const accessToken = await ensureAuthenticated(page, request);
|
||||
await page.goto("/editor");
|
||||
|
||||
const sidebar = page.getByTestId("properties-sidebar");
|
||||
@@ -214,6 +244,7 @@ test("텍스트/버튼/리스트/이미지/비디오/폼 입력 필드 스타일
|
||||
await page.getByRole("button", { name: "Save (local + server)" }).click();
|
||||
|
||||
await expect(page).toHaveURL(/\/_?projects/);
|
||||
await patchProjectStatusForCurrentUser(request, accessToken, slug, "PUBLISHED");
|
||||
await page.goto(`/p/${slug}`);
|
||||
|
||||
// 4) 동일한 slug 의 퍼블릭 페이지(/p/[slug])로 이동해 같은 요소들의 스타일을 다시 측정한다.
|
||||
@@ -346,7 +377,7 @@ test("버튼 너비/패딩/색상/둥글기 스타일이 프리뷰와 퍼블릭
|
||||
const now = Date.now();
|
||||
const slug = `button-layout-style-regression-${now}`;
|
||||
|
||||
await ensureAuthenticated(page, request);
|
||||
const accessToken = await ensureAuthenticated(page, request);
|
||||
await page.goto("/editor");
|
||||
|
||||
const sidebar = page.getByTestId("properties-sidebar");
|
||||
@@ -402,6 +433,7 @@ test("버튼 너비/패딩/색상/둥글기 스타일이 프리뷰와 퍼블릭
|
||||
await page.getByRole("button", { name: "Save (local + server)" }).click();
|
||||
|
||||
await page.waitForURL(/\/projects/);
|
||||
await patchProjectStatusForCurrentUser(request, accessToken, slug, "PUBLISHED");
|
||||
await page.goto(`/p/${slug}`);
|
||||
|
||||
const publicButton = page.getByRole("link", { name: "Button" }).first();
|
||||
@@ -457,7 +489,7 @@ test("폼 셀렉트/체크박스/라디오 기본 텍스트 스타일이 프리
|
||||
const slug = `form-style-regression-${now}`;
|
||||
|
||||
// 1) 에디터에서 폼 블록들을 추가하고 프로젝트를 저장한다.
|
||||
await ensureAuthenticated(page, request);
|
||||
const accessToken = await ensureAuthenticated(page, request);
|
||||
await page.goto("/editor");
|
||||
|
||||
const sidebar = page.getByTestId("properties-sidebar");
|
||||
@@ -526,6 +558,7 @@ test("폼 셀렉트/체크박스/라디오 기본 텍스트 스타일이 프리
|
||||
await page.getByRole("button", { name: "Save (local + server)" }).click();
|
||||
|
||||
await page.waitForURL(/\/projects/);
|
||||
await patchProjectStatusForCurrentUser(request, accessToken, slug, "PUBLISHED");
|
||||
await page.goto(`/p/${slug}`);
|
||||
|
||||
// 4) 동일한 slug 의 퍼블릭 페이지(/p/[slug])로 이동해 같은 텍스트들의 스타일을 다시 측정한다.
|
||||
@@ -571,7 +604,7 @@ test("폼 셀렉트/체크박스/라디오 레이아웃/패딩/너비/간격 스
|
||||
const now = Date.now();
|
||||
const slug = `form-layout-style-regression-${now}`;
|
||||
|
||||
await ensureAuthenticated(page, request);
|
||||
const accessToken = await ensureAuthenticated(page, request);
|
||||
await page.goto("/editor");
|
||||
|
||||
const sidebar = page.getByTestId("properties-sidebar");
|
||||
@@ -749,6 +782,7 @@ test("폼 셀렉트/체크박스/라디오 레이아웃/패딩/너비/간격 스
|
||||
await page.getByRole("button", { name: "Save (local + server)" }).click();
|
||||
|
||||
await page.waitForURL(/\/projects/);
|
||||
await patchProjectStatusForCurrentUser(request, accessToken, slug, "PUBLISHED");
|
||||
await page.goto(`/p/${slug}`);
|
||||
|
||||
const publicSelectWrapper = page.locator(".pb-form-field").first();
|
||||
@@ -974,8 +1008,8 @@ test("섹션 배경/레이아웃 스타일이 프리뷰와 퍼블릭 페이지
|
||||
const now = Date.now();
|
||||
const slug = `section-style-regression-${now}`;
|
||||
|
||||
// 1) 에디터에서 섹션 블록을 추가하고 배경색/패딩/최대 폭/컬럼 간격을 설정한다.
|
||||
await ensureAuthenticated(page, request);
|
||||
// 1) 에디터에서 섹션 블록을 추가하고 배경색/패딩/최대 폭/컬럼 간 간격을 설정한다.
|
||||
const accessToken = await ensureAuthenticated(page, request);
|
||||
await page.goto("/editor");
|
||||
|
||||
const sidebar = page.getByTestId("properties-sidebar");
|
||||
@@ -1031,6 +1065,7 @@ test("섹션 배경/레이아웃 스타일이 프리뷰와 퍼블릭 페이지
|
||||
await page.getByRole("button", { name: "Save (local + server)" }).click();
|
||||
|
||||
await page.waitForURL(/\/projects/);
|
||||
await patchProjectStatusForCurrentUser(request, accessToken, slug, "PUBLISHED");
|
||||
await page.goto(`/p/${slug}`);
|
||||
|
||||
// 4) 퍼블릭 페이지에서 같은 섹션 레이아웃의 스타일을 다시 측정한다.
|
||||
@@ -1085,7 +1120,7 @@ test("구분선 스타일이 프리뷰와 퍼블릭 페이지에서 동일해야
|
||||
const now = Date.now();
|
||||
const slug = `divider-style-regression-${now}`;
|
||||
|
||||
await ensureAuthenticated(page, request);
|
||||
const accessToken = await ensureAuthenticated(page, request);
|
||||
await page.goto("/editor");
|
||||
|
||||
const sidebar = page.getByTestId("properties-sidebar");
|
||||
@@ -1141,6 +1176,7 @@ test("구분선 스타일이 프리뷰와 퍼블릭 페이지에서 동일해야
|
||||
await page.getByRole("button", { name: "Save (local + server)" }).click();
|
||||
|
||||
await page.waitForURL(/\/projects/);
|
||||
await patchProjectStatusForCurrentUser(request, accessToken, slug, "PUBLISHED");
|
||||
await page.goto(`/p/${slug}`);
|
||||
|
||||
const publicDivider = page.locator("hr.pb-divider").first();
|
||||
|
||||
Reference in New Issue
Block a user