42 lines
1.3 KiB
JavaScript
42 lines
1.3 KiB
JavaScript
import { describe, expect, test } from "bun:test";
|
|
import { persistEmergencyDraft, readEmergencyDraft, removeEmergencyDraft } from "./emergency-draft";
|
|
|
|
const createStorage = () => {
|
|
const values = new Map();
|
|
return {
|
|
getItem: (key) => values.get(key) ?? null,
|
|
setItem: (key, value) => values.set(key, value),
|
|
removeItem: (key) => values.delete(key),
|
|
};
|
|
};
|
|
|
|
describe("emergency editor drafts", () => {
|
|
test("round-trips and removes a draft independently of IndexedDB", () => {
|
|
const storage = createStorage();
|
|
const draft = {
|
|
memoId: "memo-1",
|
|
expectedRevision: 3,
|
|
title: "Local title",
|
|
tagsText: "draft",
|
|
contentJson: { type: "doc", content: [] },
|
|
updatedAt: "2026-08-29T12:00:00.000Z",
|
|
};
|
|
|
|
expect(persistEmergencyDraft(draft, storage)).toBe(true);
|
|
expect(readEmergencyDraft(draft.memoId, storage)).toEqual(draft);
|
|
removeEmergencyDraft(draft.memoId, storage);
|
|
expect(readEmergencyDraft(draft.memoId, storage)).toBeNull();
|
|
});
|
|
|
|
test("fails closed when browser storage is unavailable", () => {
|
|
const storage = { setItem: () => { throw new Error("quota"); } };
|
|
expect(persistEmergencyDraft({
|
|
memoId: "memo-1",
|
|
title: "",
|
|
tagsText: "",
|
|
contentJson: { type: "doc", content: [] },
|
|
updatedAt: "2026-08-29T12:00:00.000Z",
|
|
}, storage)).toBe(false);
|
|
});
|
|
});
|