diff --git a/src/app/api/medications/__tests__/route.test.ts b/src/app/api/medications/__tests__/route.test.ts index 167477f2a..4f42bd4d0 100644 --- a/src/app/api/medications/__tests__/route.test.ts +++ b/src/app/api/medications/__tests__/route.test.ts @@ -526,6 +526,28 @@ describe("POST /api/medications — Apple Health mirror (v1.28)", () => { .data; } + it("admits a scheduled Apple Health mirror without a HealthLog-owned schedule", async () => { + vi.mocked(prisma.medication.findFirst).mockResolvedValue(null as never); + vi.mocked(prisma.medication.count).mockResolvedValue(0 as never); + + const res = await POST( + postReq({ + name: "Telmisartan", + dose: "1 count", + externalSource: "APPLE_HEALTH", + externalId: "hk-concept-scheduled", + asNeeded: false, + }), + ); + + expect(res.status).toBe(201); + const data = lastCreateData(); + expect(data.externalSource).toBe("APPLE_HEALTH"); + expect(data.externalId).toBe("hk-concept-scheduled"); + expect(data.asNeeded).toBe(false); + expect(data.schedules).toEqual({ create: [] }); + }); + it("persists externalSource + externalId field-by-field on create", async () => { vi.mocked(prisma.medication.findFirst).mockResolvedValue(null as never); const res = await POST(postReq(MIRROR_BODY)); diff --git a/src/lib/validations/medication/create-update.ts b/src/lib/validations/medication/create-update.ts index 6f74798dc..090629b81 100644 --- a/src/lib/validations/medication/create-update.ts +++ b/src/lib/validations/medication/create-update.ts @@ -228,7 +228,10 @@ export const createMedicationSchema = z path: ["asNeeded"], }) .refine( - (b) => b.asNeeded === true || (!!b.schedules && b.schedules.length >= 1), + (b) => + b.externalSource === "APPLE_HEALTH" || + b.asNeeded === true || + (!!b.schedules && b.schedules.length >= 1), { message: "Mindestens ein Zeitfenster", path: ["schedules"],