mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 12:32:43 +00:00
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.
62 lines
1.9 KiB
TypeScript
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"]);
|
|
});
|
|
});
|