Fix draft error when logged out
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user