Files
HealthLog/tests/integration/sources-in-use.test.ts
T
Marc-André Bombeck dcbd564962 fix(sources): stop listing a source whose readings were all deleted
The in-use probe matched tombstoned readings, so a source stayed marked
on the priority ladder after every reading from it was deleted. Both
the read and the save response of the source-priority route go through
this one probe.
2026-10-08 22:57:47 +02:00

62 lines
1.9 KiB
TypeScript

/**
* The sources the Settings ladder lists, against real Postgres.
*
* A source counts while the account holds a live reading from it. Deleting
* readings tombstones them (`deletedAt`), so the probe has to skip the
* tombstones or a source whose readings were all deleted stays marked as in
* use for good.
*/
import { beforeEach, describe, expect, it } from "vitest";
import { getPrismaClient, truncateAllTables } from "./setup";
beforeEach(async () => {
await truncateAllTables(getPrismaClient());
});
async function seed() {
const prisma = getPrismaClient();
const user = await prisma.user.create({
data: {
username: "sources-in-use",
email: "sources-in-use@example.test",
role: "USER",
},
});
const reading = (source: "MANUAL" | "APPLE_HEALTH", minutes: number) =>
prisma.measurement.create({
data: {
userId: user.id,
type: "WEIGHT",
value: 80,
unit: "kg",
source,
measuredAt: new Date(Date.UTC(2026, 4, 12, 7, minutes)),
},
});
return { prisma, user, reading };
}
describe("getSourcesInUse", () => {
it("lists a source with a live reading", async () => {
const { user, reading } = await seed();
await reading("MANUAL", 0);
const { getSourcesInUse } =
await import("@/lib/integrations/sources-in-use");
expect(await getSourcesInUse(user.id)).toEqual(["MANUAL"]);
});
it("drops a source once every reading from it is deleted", async () => {
const { prisma, user, reading } = await seed();
const manual = await reading("MANUAL", 0);
await reading("APPLE_HEALTH", 1);
await prisma.measurement.update({
where: { id: manual.id },
data: { deletedAt: new Date() },
});
const { getSourcesInUse } =
await import("@/lib/integrations/sources-in-use");
expect(await getSourcesInUse(user.id)).toEqual(["APPLE_HEALTH"]);
});
});