diff --git a/src/components/day/__tests__/day-events-dose.test.tsx b/src/components/day/__tests__/day-events-dose.test.tsx new file mode 100644 index 000000000..9f27d1f21 --- /dev/null +++ b/src/components/day/__tests__/day-events-dose.test.tsx @@ -0,0 +1,63 @@ +/** + * An intake under "What happened" reads as its name and the dose taken on + * one line, "Ramipril 5mg", as the same medication does under Running that + * day. The dose on a muted line of its own under the name read as + * "Ramipril / 5mg". + */ +import { describe, expect, it } from "vitest"; +import { renderToStaticMarkup } from "react-dom/server"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; + +import { I18nProvider } from "@/lib/i18n/context"; +import type { DayEvent } from "@/lib/day/contract"; + +import { DayEvents } from "../day-sections"; + +function event( + kind: DayEvent["kind"], + title: string, + meta: string | null, +): DayEvent { + return { + at: null, + kind, + section: "medications", + id: `${kind}-1`, + title, + meta, + note: null, + docs: [], + href: null, + }; +} + +/** The text of each line under the event's time and icon: its
s. */
+function lines(events: DayEvent[]): string[] {
+ const html = renderToStaticMarkup(
+
]*>(.*?)<\/p>/g)].map((m) => m[1]);
+}
+
+describe("DayEvents dose", () => {
+ it("names an intake with its dose on one line", () => {
+ expect(lines([event("intake", "Ramipril", "5mg")])).toEqual([
+ "Ramipril 5mg",
+ ]);
+ });
+
+ it("names an intake without a dose by its name alone", () => {
+ expect(lines([event("intake", "Ramipril", null)])).toEqual(["Ramipril"]);
+ });
+
+ it("keeps a dose change's new dose on its own line", () => {
+ expect(lines([event("doseChange", "Ramipril", "10 mg")])).toEqual([
+ "Ramipril",
+ "10 mg",
+ ]);
+ });
+});
diff --git a/src/components/day/day-sections.tsx b/src/components/day/day-sections.tsx
index 6f9993464..d41c63600 100644
--- a/src/components/day/day-sections.tsx
+++ b/src/components/day/day-sections.tsx
@@ -589,6 +589,13 @@ const EVENT_ICON: Record
- {dayTitle(event.kind, event.title, t)}
- {name} {meta}
{events.map((event) => {
const Icon = EVENT_ICON[event.kind];
- const meta = event.meta
- ? dayMeta(event.kind, event.meta, t, event.title)
- : null;
+ const doseInName =
+ !!event.meta && DOSE_META_EVENT_KINDS.has(event.kind);
+ const title = dayTitle(event.kind, event.title, t);
+ const name = doseInName ? `${title} ${event.meta}` : title;
+ const meta =
+ event.meta && !doseInName
+ ? dayMeta(event.kind, event.meta, t, event.title)
+ : null;
return (