Fix draft error when logged out

This commit is contained in:
adilallo
2026-05-26 09:09:11 -06:00
parent 8420ce42e3
commit 62efb6a0cc
8 changed files with 203 additions and 95 deletions
@@ -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);
});
});