diff --git a/src/shared/hooks/dokument-store.test.ts b/src/shared/hooks/dokument-store.test.ts new file mode 100644 index 0000000..94ffa9c --- /dev/null +++ b/src/shared/hooks/dokument-store.test.ts @@ -0,0 +1,77 @@ +import "fake-indexeddb/auto"; +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { + deleteAllDokumente, + deleteDokument, + deleteDokumenteForSprechstunde, + getDokumente, + saveDokument, +} from "./dokument-store"; + +function makeFile(name: string, content = "test") { + return new File([content], name, { type: "image/jpeg" }); +} + +describe("dokument-store", () => { + beforeEach(async () => { + await deleteAllDokumente(); + }); + + afterEach(async () => { + await deleteAllDokumente(); + }); + + it("saves and retrieves a document", async () => { + const id = await saveDokument(1, makeFile("ptv11.jpg")); + expect(id).toBeGreaterThan(0); + + const docs = await getDokumente(1); + expect(docs).toHaveLength(1); + expect(docs[0].name).toBe("ptv11.jpg"); + expect(docs[0].mimeType).toBe("image/jpeg"); + expect(docs[0].sprechstundeId).toBe(1); + expect(docs[0].blob).toBeInstanceOf(Blob); + expect(docs[0].erstelltAm).toMatch(/^\d{4}-\d{2}-\d{2}$/); + }); + + it("retrieves only documents for the given sprechstundeId", async () => { + await saveDokument(1, makeFile("a.jpg")); + await saveDokument(2, makeFile("b.jpg")); + + const docs1 = await getDokumente(1); + const docs2 = await getDokumente(2); + expect(docs1).toHaveLength(1); + expect(docs2).toHaveLength(1); + expect(docs1[0].name).toBe("a.jpg"); + expect(docs2[0].name).toBe("b.jpg"); + }); + + it("deletes a single document by id", async () => { + const id = await saveDokument(1, makeFile("a.jpg")); + await deleteDokument(id); + + const docs = await getDokumente(1); + expect(docs).toHaveLength(0); + }); + + it("deletes all documents for a sprechstunde", async () => { + await saveDokument(1, makeFile("a.jpg")); + await saveDokument(1, makeFile("b.jpg")); + await saveDokument(2, makeFile("c.jpg")); + + await deleteDokumenteForSprechstunde(1); + + expect(await getDokumente(1)).toHaveLength(0); + expect(await getDokumente(2)).toHaveLength(1); + }); + + it("deletes all documents across all sprechstunden", async () => { + await saveDokument(1, makeFile("a.jpg")); + await saveDokument(2, makeFile("b.jpg")); + + await deleteAllDokumente(); + + expect(await getDokumente(1)).toHaveLength(0); + expect(await getDokumente(2)).toHaveLength(0); + }); +});