.
This commit is contained in:
@@ -23,7 +23,7 @@ function parsePx(value: string): number | null {
|
|||||||
return Number.isFinite(n) ? n : 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 now = Date.now();
|
||||||
const email = `style-regression-${now}@example.com`;
|
const email = `style-regression-${now}@example.com`;
|
||||||
const password = "style-regression-password";
|
const password = "style-regression-password";
|
||||||
@@ -70,22 +70,20 @@ async function ensureAuthenticated(page: any, request: any) {
|
|||||||
sameSite: "Lax",
|
sameSite: "Lax",
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
return accessToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function patchProjectStatusForCurrentUser(
|
async function patchProjectStatusForCurrentUser(
|
||||||
page: import("@playwright/test").Page,
|
|
||||||
request: import("@playwright/test").APIRequestContext,
|
request: import("@playwright/test").APIRequestContext,
|
||||||
|
accessToken: string,
|
||||||
slug: string,
|
slug: string,
|
||||||
status: "DRAFT" | "PUBLISHED" | "ARCHIVED",
|
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}`, {
|
const res = await request.patch(`/api/projects/${slug}`, {
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
Cookie: `pb_access=${pbCookie!.value}`,
|
Cookie: `pb_access=${accessToken}`,
|
||||||
},
|
},
|
||||||
data: { status },
|
data: { status },
|
||||||
});
|
});
|
||||||
@@ -109,7 +107,7 @@ test("텍스트/버튼/리스트/이미지/비디오/폼 입력 필드 스타일
|
|||||||
const slug = `style-regression-${now}`;
|
const slug = `style-regression-${now}`;
|
||||||
|
|
||||||
// 1) 에디터에서 프로젝트 slug 와 기본 블록들을 구성한다.
|
// 1) 에디터에서 프로젝트 slug 와 기본 블록들을 구성한다.
|
||||||
await ensureAuthenticated(page, request);
|
const accessToken = await ensureAuthenticated(page, request);
|
||||||
await page.goto("/editor");
|
await page.goto("/editor");
|
||||||
|
|
||||||
const sidebar = page.getByTestId("properties-sidebar");
|
const sidebar = page.getByTestId("properties-sidebar");
|
||||||
@@ -246,7 +244,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 patchProjectStatusForCurrentUser(request, accessToken, slug, "PUBLISHED");
|
||||||
await page.goto(`/p/${slug}`);
|
await page.goto(`/p/${slug}`);
|
||||||
|
|
||||||
// 4) 동일한 slug 의 퍼블릭 페이지(/p/[slug])로 이동해 같은 요소들의 스타일을 다시 측정한다.
|
// 4) 동일한 slug 의 퍼블릭 페이지(/p/[slug])로 이동해 같은 요소들의 스타일을 다시 측정한다.
|
||||||
@@ -379,7 +377,7 @@ test("버튼 너비/패딩/색상/둥글기 스타일이 프리뷰와 퍼블릭
|
|||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
const slug = `button-layout-style-regression-${now}`;
|
const slug = `button-layout-style-regression-${now}`;
|
||||||
|
|
||||||
await ensureAuthenticated(page, request);
|
const accessToken = await ensureAuthenticated(page, request);
|
||||||
await page.goto("/editor");
|
await page.goto("/editor");
|
||||||
|
|
||||||
const sidebar = page.getByTestId("properties-sidebar");
|
const sidebar = page.getByTestId("properties-sidebar");
|
||||||
@@ -435,7 +433,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 patchProjectStatusForCurrentUser(request, accessToken, 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();
|
||||||
@@ -491,7 +489,7 @@ test("폼 셀렉트/체크박스/라디오 기본 텍스트 스타일이 프리
|
|||||||
const slug = `form-style-regression-${now}`;
|
const slug = `form-style-regression-${now}`;
|
||||||
|
|
||||||
// 1) 에디터에서 폼 블록들을 추가하고 프로젝트를 저장한다.
|
// 1) 에디터에서 폼 블록들을 추가하고 프로젝트를 저장한다.
|
||||||
await ensureAuthenticated(page, request);
|
const accessToken = await ensureAuthenticated(page, request);
|
||||||
await page.goto("/editor");
|
await page.goto("/editor");
|
||||||
|
|
||||||
const sidebar = page.getByTestId("properties-sidebar");
|
const sidebar = page.getByTestId("properties-sidebar");
|
||||||
@@ -560,7 +558,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 patchProjectStatusForCurrentUser(request, accessToken, slug, "PUBLISHED");
|
||||||
await page.goto(`/p/${slug}`);
|
await page.goto(`/p/${slug}`);
|
||||||
|
|
||||||
// 4) 동일한 slug 의 퍼블릭 페이지(/p/[slug])로 이동해 같은 텍스트들의 스타일을 다시 측정한다.
|
// 4) 동일한 slug 의 퍼블릭 페이지(/p/[slug])로 이동해 같은 텍스트들의 스타일을 다시 측정한다.
|
||||||
@@ -606,7 +604,7 @@ test("폼 셀렉트/체크박스/라디오 레이아웃/패딩/너비/간격 스
|
|||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
const slug = `form-layout-style-regression-${now}`;
|
const slug = `form-layout-style-regression-${now}`;
|
||||||
|
|
||||||
await ensureAuthenticated(page, request);
|
const accessToken = await ensureAuthenticated(page, request);
|
||||||
await page.goto("/editor");
|
await page.goto("/editor");
|
||||||
|
|
||||||
const sidebar = page.getByTestId("properties-sidebar");
|
const sidebar = page.getByTestId("properties-sidebar");
|
||||||
@@ -784,7 +782,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 patchProjectStatusForCurrentUser(request, accessToken, 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();
|
||||||
@@ -1010,8 +1008,8 @@ test("섹션 배경/레이아웃 스타일이 프리뷰와 퍼블릭 페이지
|
|||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
const slug = `section-style-regression-${now}`;
|
const slug = `section-style-regression-${now}`;
|
||||||
|
|
||||||
// 1) 에디터에서 섹션 블록을 추가하고 배경색/패딩/최대 폭/컬럼 간격을 설정한다.
|
// 1) 에디터에서 섹션 블록을 추가하고 배경색/패딩/최대 폭/컬럼 간 간격을 설정한다.
|
||||||
await ensureAuthenticated(page, request);
|
const accessToken = await ensureAuthenticated(page, request);
|
||||||
await page.goto("/editor");
|
await page.goto("/editor");
|
||||||
|
|
||||||
const sidebar = page.getByTestId("properties-sidebar");
|
const sidebar = page.getByTestId("properties-sidebar");
|
||||||
@@ -1067,7 +1065,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 patchProjectStatusForCurrentUser(request, accessToken, slug, "PUBLISHED");
|
||||||
await page.goto(`/p/${slug}`);
|
await page.goto(`/p/${slug}`);
|
||||||
|
|
||||||
// 4) 퍼블릭 페이지에서 같은 섹션 레이아웃의 스타일을 다시 측정한다.
|
// 4) 퍼블릭 페이지에서 같은 섹션 레이아웃의 스타일을 다시 측정한다.
|
||||||
@@ -1122,7 +1120,7 @@ test("구분선 스타일이 프리뷰와 퍼블릭 페이지에서 동일해야
|
|||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
const slug = `divider-style-regression-${now}`;
|
const slug = `divider-style-regression-${now}`;
|
||||||
|
|
||||||
await ensureAuthenticated(page, request);
|
const accessToken = await ensureAuthenticated(page, request);
|
||||||
await page.goto("/editor");
|
await page.goto("/editor");
|
||||||
|
|
||||||
const sidebar = page.getByTestId("properties-sidebar");
|
const sidebar = page.getByTestId("properties-sidebar");
|
||||||
|
|||||||
Reference in New Issue
Block a user