Files
EpicNext-Cms/src/components/admin/studio/furniture-import-requests.test.ts
T
Simo c977fe95ba
CI / check (push) Successful in 3m12s
CI / deploy (push) Successful in 19s
CI / publish-container (push) Successful in 1m12s
fix(studio): recover uncertain imports with persistent request identities
2026-09-13 18:33:06 +02:00

71 lines
2.6 KiB
TypeScript

import { expect, it } from "vitest";
import { createFurnitureImportRequests } from "./furniture-import-requests";
function storage() {
const entries = new Map<string, string>();
return {
entries,
getItem: (key: string) => entries.get(key) ?? null,
setItem: (key: string, value: string) => {
entries.set(key, value);
},
removeItem: (key: string) => {
entries.delete(key);
},
};
}
it("reuses an uncertain request across reloads without storing furniture content", async () => {
const saved = storage();
const first = await createFurnitureImportRequests(7, () => saved).get(
'{"name":"private furniture"}',
);
const resumed = await createFurnitureImportRequests(7, () => saved).get(
'{"name":"private furniture"}',
);
expect(resumed.id).toBe(first.id);
expect(JSON.stringify([...saved.entries])).not.toContain("private furniture");
});
it("keeps pending requests distinct across accounts and changed selections", async () => {
const saved = storage();
const client = createFurnitureImportRequests(7, () => saved);
const first = await client.get("chair");
const second = await client.get("lamp");
const other = await createFurnitureImportRequests(8, () => saved).get(
"chair",
);
expect(new Set([first.id, second.id, other.id]).size).toBe(3);
expect((await client.get("chair")).id).toBe(first.id);
});
it("starts a new request only after the previous one was acknowledged", async () => {
const saved = storage();
const client = createFurnitureImportRequests(7, () => saved);
const pending = await client.get("chair");
client.acknowledge(pending);
expect(
(await createFurnitureImportRequests(7, () => saved).get("chair")).id,
).not.toBe(pending.id);
});
it("keeps request identity in memory if session storage is unavailable", async () => {
const client = createFurnitureImportRequests(7, () => {
throw Error("denied");
});
const pending = await client.get("chair");
expect((await client.get("chair")).id).toBe(pending.id);
client.acknowledge(pending);
expect((await client.get("chair")).id).not.toBe(pending.id);
});
it("does not persist an unscoped request and ignores corrupt saved IDs", async () => {
const saved = storage();
await createFurnitureImportRequests(undefined, () => saved).get("chair");
expect(saved.entries.size).toBe(0);
const first = await createFurnitureImportRequests(7, () => saved).get(
"chair",
);
saved.setItem(first.key, "../invalid");
const repaired = await createFurnitureImportRequests(7, () => saved).get(
"chair",
);
expect(repaired.id).not.toBe("../invalid");
expect(saved.getItem(first.key)).toBe(repaired.id);
});