import { render, screen, waitFor } from "@testing-library/react"; import { MemoryRouter, Route, Routes } from "react-router-dom"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { SharedSchedule } from "../../components/SharedSchedule"; function renderSharedSchedule(path: string) { return render( } /> ); } function createSharedData(overrides: Record = {}) { const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); yesterday.setHours(9, 0, 0, 0); return { sharedBy: "Owner", takenBy: "Max", scheduleDays: 30, upcomingTodayOnly: false, shareScheduleTodayOnly: true, stockCalculationMode: "automatic", stockThresholds: { lowStockDays: 7, normalStockDays: 30, highStockDays: 90, reminderDaysBefore: 7, expiryWarningDays: 30, }, medications: [ { id: 1, name: "Ibuprofen", genericName: "Ibu", takenBy: ["Max"], packageType: "blister", packCount: 1, blistersPerPack: 2, pillsPerBlister: 10, looseTablets: 0, pillWeightMg: null, doseUnit: "mg", expiryDate: null, notes: null, intakeRemindersEnabled: false, blisters: [{ usage: 1, every: 1, start: yesterday.toISOString() }], intakes: [ { usage: 1, every: 1, start: yesterday.toISOString(), takenBy: "Max", intakeRemindersEnabled: false }, ], updatedAt: null, dismissedUntil: null, lastStockCorrectionAt: null, }, ], ...overrides, }; } describe("SharedSchedule today-only", () => { beforeEach(() => { vi.clearAllMocks(); window.localStorage.clear(); vi.spyOn(globalThis, "setInterval").mockImplementation(() => 1 as unknown as ReturnType); vi.spyOn(globalThis, "clearInterval").mockImplementation(() => {}); }); afterEach(() => { vi.restoreAllMocks(); }); it("hides past and future sections when shareScheduleTodayOnly is enabled even if dashboard today-only is off", async () => { const sharedData = createSharedData(); (globalThis.fetch as ReturnType).mockImplementation((url: string, init?: RequestInit) => { if (url === "/api/share/token-123/doses" && (!init || !init.method || init.method === "GET")) { return Promise.resolve({ ok: true, json: () => Promise.resolve({ doses: [] }) }); } if (url === "/api/share/token-123") { return Promise.resolve({ ok: true, json: () => Promise.resolve(sharedData) }); } return Promise.reject(new Error(`Unexpected URL: ${url}`)); }); renderSharedSchedule("/share/token-123"); await waitFor(() => { expect(screen.getByText(/share\.scheduleFor/i)).toBeInTheDocument(); }); expect(document.querySelector(".day-block.today")).toBeInTheDocument(); expect(document.querySelector(".past-days-toggle")).not.toBeInTheDocument(); expect(document.querySelector(".future-days-toggle")).not.toBeInTheDocument(); }); });