90 lines
2.7 KiB
TypeScript
90 lines
2.7 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
import {
|
|
FRESH_ENTRY_PENDING_KEY,
|
|
hasFreshEntryPending,
|
|
prepareFreshCreateFlowEntry,
|
|
prepareFreshCreateFlowEntrySync,
|
|
} from "../../app/(app)/create/utils/prepareFreshCreateFlowEntry";
|
|
import { CREATE_FLOW_ANONYMOUS_KEY } from "../../app/(app)/create/utils/anonymousDraftStorage";
|
|
|
|
const deleteServerDraft = vi.fn();
|
|
const isBackendSyncEnabled = vi.fn();
|
|
|
|
vi.mock("../../lib/create/api", () => ({
|
|
deleteServerDraft: (...args: unknown[]) => deleteServerDraft(...args),
|
|
}));
|
|
|
|
vi.mock("../../lib/create/backendSyncEnabled", () => ({
|
|
isBackendSyncEnabled: () => isBackendSyncEnabled(),
|
|
}));
|
|
|
|
describe("prepareFreshCreateFlowEntrySync", () => {
|
|
beforeEach(() => {
|
|
deleteServerDraft.mockReset();
|
|
deleteServerDraft.mockResolvedValue(undefined);
|
|
isBackendSyncEnabled.mockReturnValue(true);
|
|
window.localStorage.clear();
|
|
window.sessionStorage.clear();
|
|
});
|
|
|
|
afterEach(() => {
|
|
window.localStorage.clear();
|
|
window.sessionStorage.clear();
|
|
});
|
|
|
|
it("clears local draft storage for guests without calling deleteServerDraft", () => {
|
|
window.localStorage.setItem(
|
|
CREATE_FLOW_ANONYMOUS_KEY,
|
|
JSON.stringify({ title: "Stale" }),
|
|
);
|
|
|
|
prepareFreshCreateFlowEntrySync();
|
|
|
|
expect(window.localStorage.getItem(CREATE_FLOW_ANONYMOUS_KEY)).toBeNull();
|
|
expect(deleteServerDraft).not.toHaveBeenCalled();
|
|
expect(hasFreshEntryPending()).toBe(false);
|
|
});
|
|
|
|
it("clears local draft storage and deletes the server draft when signed in", async () => {
|
|
prepareFreshCreateFlowEntrySync({ signedIn: true });
|
|
|
|
expect(deleteServerDraft).toHaveBeenCalledTimes(1);
|
|
expect(window.sessionStorage.getItem(FRESH_ENTRY_PENDING_KEY)).toBe("1");
|
|
|
|
await vi.waitFor(() => {
|
|
expect(hasFreshEntryPending()).toBe(false);
|
|
});
|
|
});
|
|
|
|
it("skips server draft delete when backend sync is disabled", () => {
|
|
isBackendSyncEnabled.mockReturnValue(false);
|
|
|
|
prepareFreshCreateFlowEntrySync({ signedIn: true });
|
|
|
|
expect(deleteServerDraft).not.toHaveBeenCalled();
|
|
expect(hasFreshEntryPending()).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("prepareFreshCreateFlowEntry", () => {
|
|
beforeEach(() => {
|
|
deleteServerDraft.mockReset();
|
|
deleteServerDraft.mockResolvedValue(undefined);
|
|
isBackendSyncEnabled.mockReturnValue(true);
|
|
window.sessionStorage.clear();
|
|
});
|
|
|
|
afterEach(() => {
|
|
window.sessionStorage.clear();
|
|
});
|
|
|
|
it("awaits deleteServerDraft only when signed in", async () => {
|
|
await prepareFreshCreateFlowEntry();
|
|
expect(deleteServerDraft).not.toHaveBeenCalled();
|
|
|
|
await prepareFreshCreateFlowEntry({ signedIn: true });
|
|
expect(deleteServerDraft).toHaveBeenCalledTimes(1);
|
|
expect(hasFreshEntryPending()).toBe(false);
|
|
});
|
|
});
|