mirror of https://github.com/usememos/memos
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
import { cacheService } from "@/components/MemoEditor/services/cacheService";
|
|
|
|
describe("memo editor cache", () => {
|
|
beforeEach(() => {
|
|
const storage = new Map<string, string>();
|
|
vi.stubGlobal("localStorage", {
|
|
getItem: vi.fn((key: string) => storage.get(key) ?? null),
|
|
setItem: vi.fn((key: string, value: string) => storage.set(key, value)),
|
|
removeItem: vi.fn((key: string) => storage.delete(key)),
|
|
});
|
|
cacheService.clearAll();
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.unstubAllGlobals();
|
|
});
|
|
|
|
it("stores draft content", () => {
|
|
const key = cacheService.key("users/steven", "home-memo-editor");
|
|
|
|
cacheService.saveNow(key, "- [x] Draft task");
|
|
|
|
expect(cacheService.load(key)).toBe("- [x] Draft task");
|
|
});
|
|
|
|
it("removes empty draft content instead of caching it", () => {
|
|
const key = cacheService.key("users/steven", "home-memo-editor");
|
|
|
|
cacheService.saveNow(key, "");
|
|
|
|
expect(cacheService.load(key)).toBe("");
|
|
});
|
|
|
|
it("loads content from previously structured draft entries", () => {
|
|
const key = cacheService.key("users/steven", "home-memo-editor");
|
|
localStorage.setItem(key, JSON.stringify({ kind: "memos.editor-cache", version: 1, content: "- [ ] migrated task" }));
|
|
|
|
expect(cacheService.load(key)).toBe("- [ ] migrated task");
|
|
});
|
|
|
|
it("keeps raw JSON markdown drafts intact", () => {
|
|
const key = cacheService.key("users/steven", "home-memo-editor");
|
|
const jsonDraft = '{"content":"not a cache envelope"}';
|
|
localStorage.setItem(key, jsonDraft);
|
|
|
|
expect(cacheService.load(key)).toBe(jsonDraft);
|
|
});
|
|
|
|
it("keeps structured-looking drafts without a supported version intact", () => {
|
|
const key = cacheService.key("users/steven", "home-memo-editor");
|
|
const jsonDraft = JSON.stringify({ kind: "memos.editor-cache", content: "not a supported envelope" });
|
|
localStorage.setItem(key, jsonDraft);
|
|
|
|
expect(cacheService.load(key)).toBe(jsonDraft);
|
|
});
|
|
});
|