mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 12:32:43 +00:00
Two layers, because the defect had two halves and each needs its own kind of proof. The structural guard walks the panel's control shape, folds every control through the wire schema and the resolver the route uses, and fails when flipping one changes nothing in the resolved selection. It also checks the panel renders a row for every control it declares, and that every resolved flag is read downstream, either by gating measurement types or by name in the aggregator. That is the link nobody had written: the dead switches were dead for several releases and no test connected "the panel renders this" to "the export honours this". The behavioural half runs the real export route and reads what comes out. The previously-dead measurement switches are asserted against the FHIR bundle and the PDF table, with a positive control beside each exclusion so nothing passes on an empty fixture. The screening totals are asserted absent for a caller that names other sections and for a caller that sends no sections at all, then present when asked for by name. Allergies and family history are asserted absent from the bundle and never read from the database, and the package case opens the zip and checks the bundle inside it agrees with the PDF beside it. Mutation-checked: reverting the allergy gate, the medication-list gate, the screener entries or the measurement entries turns the matching cases red and leaves the rest green; removing a control's fold entry or its aggregator entry turns the guard red with the control named. The remaining changes update fixtures the new shapes touch: prefs objects now resolve the added flags from the defaults, and the share-link fixtures drop the retired FHIR scope, with a case pinning that the create route now refuses those keys instead of ignoring them.