From 704ef11eab711903c4c4d2416f4a1aaf25dccd05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Wed, 9 Sep 2026 22:21:05 +0200 Subject: [PATCH] test: pin the km-scale walking distance the export import stores as metres The Apple export writes DistanceWalkingRunning in the account's own length unit; the record mapping assumes metres and never reads the attribute, so a 2.484 km day lands as 2.484 m. Refs #944 --- .../import-apple-health-export.test.ts | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/lib/measurements/__tests__/import-apple-health-export.test.ts b/src/lib/measurements/__tests__/import-apple-health-export.test.ts index ddb4c3c6c..c63637ec9 100644 --- a/src/lib/measurements/__tests__/import-apple-health-export.test.ts +++ b/src/lib/measurements/__tests__/import-apple-health-export.test.ts @@ -1278,3 +1278,35 @@ describe("streamParseExportXml — the archive's own export stamp", () => { expect(stamps).toEqual([]); }); }); + +describe("streamParseExportXml — the record's own unit (issue #944)", () => { + it("stores a km-scale walking distance in metres", async () => { + const { prisma } = await importCumulativeFixture( + cumulativeExportXml( + "HKQuantityTypeIdentifierDistanceWalkingRunning", + "km", + [{ value: 2.484, sourceName: "iPhone", hour: 8 }], + ), + ); + + expect(prisma._measurements).toHaveLength(1); + expect(prisma._measurements[0]).toMatchObject({ + type: "WALKING_RUNNING_DISTANCE", + unit: "m", + }); + expect(prisma._measurements[0].value).toBeCloseTo(2484, 6); + }); + + it("stores a mile-scale walking distance in metres", async () => { + const { prisma } = await importCumulativeFixture( + cumulativeExportXml( + "HKQuantityTypeIdentifierDistanceWalkingRunning", + "mi", + [{ value: 1.543, sourceName: "iPhone", hour: 8 }], + ), + ); + + expect(prisma._measurements).toHaveLength(1); + expect(prisma._measurements[0].value).toBeCloseTo(2483.217792, 6); + }); +});