From dbbff339f625a2d190fa32e3f2f6b725efb3b082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Sat, 3 Oct 2026 21:38:03 +0200 Subject: [PATCH] test(symptoms): register the new surfaces with the export, destructive and success guards The full-backup route tests mock the symptom definition read the payload now makes; the destructive-control registry names the symptom hooks (an entry or a whole symptom, confirmed by an AlertDialog); the symptom quick entry's save toast is pinned beside the measurement and mood forms it mirrors. --- src/__tests__/destructive-control-guard.test.ts | 8 ++++++++ src/__tests__/success-affordance-guard.test.ts | 3 +++ src/app/api/export/__tests__/per-type-routes.test.ts | 2 ++ src/app/api/export/__tests__/soft-delete-filter.test.ts | 2 ++ src/app/api/export/encrypted/__tests__/route.test.ts | 1 + 5 files changed, 16 insertions(+) diff --git a/src/__tests__/destructive-control-guard.test.ts b/src/__tests__/destructive-control-guard.test.ts index 49b4bf75f..14d7e3f44 100644 --- a/src/__tests__/destructive-control-guard.test.ts +++ b/src/__tests__/destructive-control-guard.test.ts @@ -331,6 +331,14 @@ const REGISTRY: DestructiveEntry[] = [ recovery: "restorable", confirm: ["AlertDialog"], }, + { + file: "components/symptoms/use-symptoms.ts", + destroys: + "one logged symptom entry, or a person-defined symptom with every entry of it", + triggers: ["components/symptoms/symptoms-section.tsx"], + recovery: "permanent", + confirm: ["AlertDialog"], + }, { file: "components/labs/biomarker-manager.tsx", destroys: "a biomarker AND every lab reading recorded against it", diff --git a/src/__tests__/success-affordance-guard.test.ts b/src/__tests__/success-affordance-guard.test.ts index 383bf15d3..e27f224c3 100644 --- a/src/__tests__/success-affordance-guard.test.ts +++ b/src/__tests__/success-affordance-guard.test.ts @@ -289,6 +289,9 @@ const PINNED_AFFORDANCES: Record< "src/components/mood/manage/tag-groups-card.tsx": { "toast.success": 4 }, "src/components/mood/manage/tag-manager-card.tsx": { "toast.success": 2 }, "src/components/mood/mood-form.tsx": { "toast.success": 1 }, + // The symptom quick entry confirms a save exactly as the measurement and + // mood forms beside it do. + "src/components/symptoms/symptom-entry-form.tsx": { "toast.success": 1 }, "src/components/mood/mood-list.tsx": { "toast.success": 3 }, "src/components/onboarding/done-screen.tsx": { CheckCircle2: 2 }, "src/components/records/allergy-form.tsx": { "toast.success": 1 }, diff --git a/src/app/api/export/__tests__/per-type-routes.test.ts b/src/app/api/export/__tests__/per-type-routes.test.ts index a6a01a3e6..70aef1269 100644 --- a/src/app/api/export/__tests__/per-type-routes.test.ts +++ b/src/app/api/export/__tests__/per-type-routes.test.ts @@ -71,6 +71,7 @@ vi.mock("@/lib/db", () => ({ documentConditionLink: { findMany: vi.fn().mockResolvedValue([]) }, extractedFact: { findMany: vi.fn().mockResolvedValue([]) }, ecgRecording: { findMany: vi.fn().mockResolvedValue([]) }, + symptomDefinition: { findMany: vi.fn().mockResolvedValue([]) }, // v1.15.0 — cycle tables read by the full-backup helper. cycleProfile: { findUnique: vi.fn() }, menstrualCycle: { findMany: vi.fn() }, @@ -163,6 +164,7 @@ beforeEach(() => { vi.mocked(prisma.coachPlan.findMany).mockResolvedValue([] as never); vi.mocked(prisma.coachReminder.findMany).mockResolvedValue([] as never); vi.mocked(prisma.ecgRecording.findMany).mockResolvedValue([] as never); + vi.mocked(prisma.symptomDefinition.findMany).mockResolvedValue([] as never); vi.mocked(prisma.moodTagCategory.findMany).mockResolvedValue([] as never); vi.mocked(prisma.moodTagHidden.findMany).mockResolvedValue([] as never); vi.mocked(prisma.mentalHealthAssessment.findMany).mockResolvedValue( diff --git a/src/app/api/export/__tests__/soft-delete-filter.test.ts b/src/app/api/export/__tests__/soft-delete-filter.test.ts index 45cb98d38..08c17d48f 100644 --- a/src/app/api/export/__tests__/soft-delete-filter.test.ts +++ b/src/app/api/export/__tests__/soft-delete-filter.test.ts @@ -72,6 +72,7 @@ vi.mock("@/lib/db", () => ({ documentConditionLink: { findMany: vi.fn() }, extractedFact: { findMany: vi.fn() }, ecgRecording: { findMany: vi.fn() }, + symptomDefinition: { findMany: vi.fn() }, onboardingRecord: { findUnique: vi.fn().mockResolvedValue(null) }, environmentTravelLocation: { findMany: vi.fn().mockResolvedValue([]) }, environmentContext: { findMany: vi.fn().mockResolvedValue([]) }, @@ -208,6 +209,7 @@ beforeEach(() => { ); vi.mocked(prisma.extractedFact.findMany).mockResolvedValue([] as never); vi.mocked(prisma.ecgRecording.findMany).mockResolvedValue([] as never); + vi.mocked(prisma.symptomDefinition.findMany).mockResolvedValue([] as never); vi.mocked(prisma.userAchievement.findMany).mockResolvedValue([] as never); }); diff --git a/src/app/api/export/encrypted/__tests__/route.test.ts b/src/app/api/export/encrypted/__tests__/route.test.ts index 3df29eb17..7585249ba 100644 --- a/src/app/api/export/encrypted/__tests__/route.test.ts +++ b/src/app/api/export/encrypted/__tests__/route.test.ts @@ -63,6 +63,7 @@ vi.mock("@/lib/db", () => ({ documentConditionLink: { findMany: vi.fn().mockResolvedValue([]) }, extractedFact: { findMany: vi.fn().mockResolvedValue([]) }, ecgRecording: { findMany: vi.fn().mockResolvedValue([]) }, + symptomDefinition: { findMany: vi.fn().mockResolvedValue([]) }, cycleProfile: { findUnique: vi.fn().mockResolvedValue(null) }, menstrualCycle: { findMany: vi.fn().mockResolvedValue([]) }, cycleDayLog: { findMany: vi.fn().mockResolvedValue([]) },