CI: feature/form-submissions-pages #30
@@ -899,7 +899,8 @@ function EditorPageInner() {
|
|||||||
const titleRaw = projectConfig?.title;
|
const titleRaw = projectConfig?.title;
|
||||||
const title = (typeof titleRaw === "string" ? titleRaw.trim() : "") || "제목 없음";
|
const title = (typeof titleRaw === "string" ? titleRaw.trim() : "") || "제목 없음";
|
||||||
|
|
||||||
const intervalMs = 20000;
|
const intervalEnv = process.env.NEXT_PUBLIC_EDITOR_SERVER_AUTOSAVE_MS;
|
||||||
|
const intervalMs = intervalEnv ? Number(intervalEnv) || 20000 : 20000;
|
||||||
let cancelled = false;
|
let cancelled = false;
|
||||||
|
|
||||||
const saveOnce = async () => {
|
const saveOnce = async () => {
|
||||||
|
|||||||
@@ -69,14 +69,13 @@ beforeEach(() => {
|
|||||||
|
|
||||||
window.localStorage.clear();
|
window.localStorage.clear();
|
||||||
searchParamsSlug = null;
|
searchParamsSlug = null;
|
||||||
|
(process.env as any).NEXT_PUBLIC_EDITOR_SERVER_AUTOSAVE_MS = "10";
|
||||||
vi.useFakeTimers();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
cleanup();
|
cleanup();
|
||||||
vi.useRealTimers();
|
|
||||||
vi.unstubAllGlobals();
|
vi.unstubAllGlobals();
|
||||||
|
delete (process.env as any).NEXT_PUBLIC_EDITOR_SERVER_AUTOSAVE_MS;
|
||||||
});
|
});
|
||||||
|
|
||||||
vi.mock("@/features/editor/state/editorStore", () => {
|
vi.mock("@/features/editor/state/editorStore", () => {
|
||||||
@@ -153,8 +152,6 @@ describe("EditorPage - 서버 자동 저장", () => {
|
|||||||
).toBe(true);
|
).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
await vi.advanceTimersByTimeAsync(20000);
|
|
||||||
|
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(
|
expect(
|
||||||
fetchMock.mock.calls.some(
|
fetchMock.mock.calls.some(
|
||||||
@@ -199,8 +196,6 @@ describe("EditorPage - 서버 자동 저장", () => {
|
|||||||
).toBe(true);
|
).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
await vi.advanceTimersByTimeAsync(20000);
|
|
||||||
|
|
||||||
const projectCalls = fetchMock.mock.calls.filter(
|
const projectCalls = fetchMock.mock.calls.filter(
|
||||||
([url, options]: any[]) => url === "/api/projects" && (options?.method ?? "GET") === "POST",
|
([url, options]: any[]) => url === "/api/projects" && (options?.method ?? "GET") === "POST",
|
||||||
);
|
);
|
||||||
@@ -272,7 +267,14 @@ describe("EditorPage - 서버 자동 저장", () => {
|
|||||||
).toBe(true);
|
).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
await vi.advanceTimersByTimeAsync(20000);
|
await waitFor(() => {
|
||||||
|
expect(
|
||||||
|
fetchMock.mock.calls.some(
|
||||||
|
([url, options]: any[]) =>
|
||||||
|
url === "/api/projects" && (options?.method ?? "GET") === "POST",
|
||||||
|
),
|
||||||
|
).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
const projectCall = fetchMock.mock.calls.find(
|
const projectCall = fetchMock.mock.calls.find(
|
||||||
([url, options]: any[]) => url === "/api/projects" && (options?.method ?? "GET") === "POST",
|
([url, options]: any[]) => url === "/api/projects" && (options?.method ?? "GET") === "POST",
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ describe("FormControllerPanel", () => {
|
|||||||
).toBeTruthy();
|
).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Google Sheets 가이드 모달의 Apps Script 코드가 컨트롤러에 매핑된 전송 키와 작성일시를 포함해야 한다", () => {
|
it("Google Sheets 가이드 모달의 Apps Script 코드가 컨트롤러에 매핑된 전송 키와 작성일시를 포함해야 한다", async () => {
|
||||||
const formBlock = makeFormBlock("form-webhook", {
|
const formBlock = makeFormBlock("form-webhook", {
|
||||||
submitTarget: "webhook",
|
submitTarget: "webhook",
|
||||||
fieldIds: ["input-name", "input-email"],
|
fieldIds: ["input-name", "input-email"],
|
||||||
@@ -214,9 +214,9 @@ describe("FormControllerPanel", () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const guideButton = screen.getByRole("button", { name: "Google Sheets 연동 가이드" });
|
const guideButton = screen.getByRole("button", { name: "Google Sheets 연동 가이드" });
|
||||||
guideButton.click();
|
fireEvent.click(guideButton);
|
||||||
|
|
||||||
const scriptTextarea = screen.getByDisplayValue(/function doPost/) as HTMLTextAreaElement;
|
const scriptTextarea = (await screen.findByDisplayValue(/function doPost/)) as HTMLTextAreaElement;
|
||||||
|
|
||||||
expect(scriptTextarea.value).toContain("params.name || \"\"");
|
expect(scriptTextarea.value).toContain("params.name || \"\"");
|
||||||
expect(scriptTextarea.value).toContain("params.email || \"\"");
|
expect(scriptTextarea.value).toContain("params.email || \"\"");
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
dummy-video
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
dummy-image
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
dummy-image
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
dummy-section-video
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
dummy-video
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
dummy-poster
|
||||||
Reference in New Issue
Block a user