import { expect, test } from "vitest"; import { newPatient, getPatient, getPatients, updatePatient, deletePatient, newEntry, hidePatient, } from "$lib/server/query"; import { S1, S2 } from "$tests/helpers/testdata"; const SORT_ID = ["id"]; test("create patient", async () => { const pId = await newPatient({ first_name: "Max", last_name: "Müller", age: 31, room_id: 1, }); const patient = await getPatient(pId); expect(patient).toMatchObject({ id: pId, first_name: "Max", last_name: "Müller", age: 31, room: { id: 1, name: "R1.1", station: S1 }, }); }); test("update patient", async () => { const data = { first_name: "Max", last_name: "Mustermann", age: 66, room_id: 2, }; await updatePatient(1, data); const patient = await getPatient(1); expect(patient).toMatchObject({ first_name: "Max", last_name: "Mustermann", age: 66, room: { id: 2 }, }); }); test("delete patient", async () => { await deletePatient(1); await expect(async () => getPatient(1)).rejects.toThrowError("No Patient found"); }); test("delete patient (restricted)", async () => { // Patients should not be deleted if they have at least 1 entry const pId = await newEntry(1, { patient_id: 1, version: { category_id: null, date: "2024-01-01", priority: false, text: "Hello World", }, }); await expect(async () => deletePatient(pId)).rejects.toThrowError(); }); test("hide patient", async () => { await hidePatient(1, true); let patient = await getPatient(1); expect(patient.hidden).toBe(true); await hidePatient(1, false); patient = await getPatient(1); expect(patient.hidden).toBe(false); }); test("get patients", async () => { const patients = await getPatients({}, {}, SORT_ID); expect(patients).toMatchObject({ items: [ { id: 1, first_name: "Andreas", last_name: "Bergmann", age: 22, room: { id: 1, name: "R1.1", station: S1 }, }, { id: 2, first_name: "Manuela", last_name: "Kortig", age: 41, room: { id: 2, name: "R1.2", station: S1 }, }, { id: 3, first_name: "Markus", last_name: "Schuster", age: 50, room: { id: 3, name: "R2.1", station: S2 }, }, ], offset: 0, total: 3, }); }); test("get patients (pagination)", async () => { const patients = await getPatients({}, { offset: 1, limit: 100 }, SORT_ID); expect(patients.items).length(2); expect(patients.items[0].id).toBe(2); expect(patients.items[1].id).toBe(3); expect(patients.offset).toBe(1); expect(patients.total).toBe(3); }); test("get patients (by room)", async () => { const patients = await getPatients({ room: 1 }, {}, SORT_ID); expect(patients.items).length(1); expect(patients.items[0].id).toBe(1); }); test("get patients (by station)", async () => { const patients = await getPatients({ station: 1 }, {}, SORT_ID); expect(patients.items).length(2); expect(patients.items[0].id).toBe(1); expect(patients.items[1].id).toBe(2); }); test("get patients (hidden)", async () => { await hidePatient(2, true); let patients = await getPatients({ hidden: false }, {}, SORT_ID); expect(patients.items).length(2); expect(patients.items[0].id).toBe(1); patients = await getPatients({ hidden: true }, {}, SORT_ID); expect(patients.items).length(1); expect(patients.items[0].id).toBe(2); }); test("search patients", async () => { const patients = await getPatients({ search: "Schustr" }, {}, SORT_ID); expect(patients.items).length(1); expect(patients.items[0].id).toBe(3); });