mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-10 21:32:18 +00:00
test: mock the unit-display hook in the crosstab, vitals, and MCP suites
The crosstab, vitals, and cycle-summary renders are static server renders with no QueryClient; the new preferred-unit hook reads through the auth query, so mock it to a real metric-preference implementation (identity values, canonical symbols) that matches the render those suites assert. Register the new unit resolver on the MCP write-tools module mock so the preview path resolves.
This commit is contained in:
1 parent
ddc598afcb
commit
6cf56ce456
4 files changed
+81
-1
No files matched your search
@@ -1,6 +1,29 @@
|
||||
import { describe, it, expect, vi, beforeEach } from "vitest";
|
||||
import { renderToStaticMarkup } from "react-dom/server";
|
||||
|
||||
// The embedded crosstab reads the unit preference through `useUnitDisplay`,
|
||||
// which hangs off `useAuth` (a react-query hook). These are static SSR renders
|
||||
// with no QueryClient, so mock the hook to a real metric-preference impl.
|
||||
vi.mock("@/hooks/use-unit-display", async () => {
|
||||
const dt = await import("@/lib/measurements/display-transform");
|
||||
const forType = (t: string) => dt.getDisplayTransform(t, "metric");
|
||||
return {
|
||||
useUnitDisplay: () => ({
|
||||
preference: "metric" as const,
|
||||
transformFor: forType,
|
||||
toDisplay: (t: string, v: number) =>
|
||||
dt.applyDisplayTransform(v, forType(t)),
|
||||
fromDisplay: (t: string, v: number) =>
|
||||
dt.invertDisplayTransform(v, forType(t)),
|
||||
toDisplayDelta: (t: string, v: number) =>
|
||||
dt.applyDisplayTransformDelta(v, forType(t)),
|
||||
unitFor: (t: string) => forType(t).displayUnit,
|
||||
decimalsFor: (t: string) => forType(t).decimals,
|
||||
isTransformed: (t: string) => dt.hasDisplayTransform(t),
|
||||
}),
|
||||
};
|
||||
});
|
||||
|
||||
import { I18nProvider } from "@/lib/i18n/context";
|
||||
import type { CalendarResponse } from "../types";
|
||||
import type { CycleInsightsResponse } from "../use-cycle";
|
||||
|
||||
@@ -1,6 +1,31 @@
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { describe, it, expect, vi } from "vitest";
|
||||
import { renderToStaticMarkup } from "react-dom/server";
|
||||
|
||||
// The crosstab reads the unit preference through `useUnitDisplay`, which hangs
|
||||
// off `useAuth` (a react-query hook). These are static SSR renders with no
|
||||
// QueryClient, so mock the hook to a real metric-preference implementation —
|
||||
// metric is the identity on values and yields the canonical display symbols,
|
||||
// so the assertions below (kg, °C, unchanged numbers) hold.
|
||||
vi.mock("@/hooks/use-unit-display", async () => {
|
||||
const dt = await import("@/lib/measurements/display-transform");
|
||||
const forType = (t: string) => dt.getDisplayTransform(t, "metric");
|
||||
return {
|
||||
useUnitDisplay: () => ({
|
||||
preference: "metric" as const,
|
||||
transformFor: forType,
|
||||
toDisplay: (t: string, v: number) =>
|
||||
dt.applyDisplayTransform(v, forType(t)),
|
||||
fromDisplay: (t: string, v: number) =>
|
||||
dt.invertDisplayTransform(v, forType(t)),
|
||||
toDisplayDelta: (t: string, v: number) =>
|
||||
dt.applyDisplayTransformDelta(v, forType(t)),
|
||||
unitFor: (t: string) => forType(t).displayUnit,
|
||||
decimalsFor: (t: string) => forType(t).decimals,
|
||||
isTransformed: (t: string) => dt.hasDisplayTransform(t),
|
||||
}),
|
||||
};
|
||||
});
|
||||
|
||||
import {
|
||||
CyclePhaseCrosstab,
|
||||
CyclePhaseHeadline,
|
||||
|
||||
@@ -1,6 +1,31 @@
|
||||
import { describe, it, expect, vi, beforeEach } from "vitest";
|
||||
import { renderToStaticMarkup } from "react-dom/server";
|
||||
|
||||
// The vitals tiles read the unit preference through `useUnitDisplay`, which
|
||||
// hangs off `useAuth` (a react-query hook). These are static SSR renders with
|
||||
// no QueryClient, so mock the hook to a real metric-preference implementation
|
||||
// — metric is the identity on values and yields the canonical display symbols
|
||||
// (e.g. °C), matching the pre-fix render the assertions expect.
|
||||
vi.mock("@/hooks/use-unit-display", async () => {
|
||||
const dt = await import("@/lib/measurements/display-transform");
|
||||
const forType = (t: string) => dt.getDisplayTransform(t, "metric");
|
||||
return {
|
||||
useUnitDisplay: () => ({
|
||||
preference: "metric" as const,
|
||||
transformFor: forType,
|
||||
toDisplay: (t: string, v: number) =>
|
||||
dt.applyDisplayTransform(v, forType(t)),
|
||||
fromDisplay: (t: string, v: number) =>
|
||||
dt.invertDisplayTransform(v, forType(t)),
|
||||
toDisplayDelta: (t: string, v: number) =>
|
||||
dt.applyDisplayTransformDelta(v, forType(t)),
|
||||
unitFor: (t: string) => forType(t).displayUnit,
|
||||
decimalsFor: (t: string) => forType(t).decimals,
|
||||
isTransformed: (t: string) => dt.hasDisplayTransform(t),
|
||||
}),
|
||||
};
|
||||
});
|
||||
|
||||
import { I18nProvider } from "@/lib/i18n/context";
|
||||
import type {
|
||||
DerivedMetricResponse,
|
||||
|
||||
Reference in new issue
Block a user