import { fireEvent, render, screen } from "@testing-library/react"; import { MemoryRouter, useLocation } from "react-router-dom"; import { expect, it, vi } from "vitest"; import { StatsOverview } from "../../../src/features/stats/StatsOverview"; vi.mock("../../../src/features/stats/TrafficTab", () => ({ TrafficTab: ({ range }: { range: string }) =>

Traffic range {range}

})); vi.mock("../../../src/features/stats/SignalTab", () => ({ SignalTab: ({ range }: { range: string }) =>

Signal range {range}

})); vi.mock("../../../src/features/stats/PathsTab", () => ({ PathsTab: ({ range }: { range: string }) =>

Paths range {range}

})); vi.mock("../../../src/features/stats/MeshTab", () => ({ MeshTab: () =>

Mesh charts

})); vi.mock("../../../src/features/stats/ScopesTab", () => ({ ScopesTab: () =>

Scope charts

})); function Location() { return {useLocation().search}; } it("keeps seven-day links and falls back from retired 3d links", () => { const { unmount } = render(); expect(screen.getByText("Signal range 7d")).toBeInTheDocument(); expect(screen.getByRole("button", { name: "7d" })).toHaveAttribute("aria-pressed", "true"); expect(screen.queryByRole("button", { name: "3d" })).not.toBeInTheDocument(); unmount(); render(); expect(screen.getByText("Signal range 7d")).toBeInTheDocument(); expect(screen.getByRole("button", { name: "30d" })).toBeInTheDocument(); expect(screen.queryByText(/Hourly analytics keep summaries for up to 30 days/)).not.toBeInTheDocument(); }); it("opens Paths & Hashes from a shared URL and retains the region while changing range", () => { render(); expect(screen.getByText("Paths range 24h")).toBeInTheDocument(); expect(screen.getByRole("button", { name: "Paths & hashes" })).toHaveAttribute("aria-pressed", "true"); fireEvent.click(screen.getByRole("button", { name: "30d" })); expect(screen.getByText("Paths range 30d")).toBeInTheDocument(); expect(screen.getByLabelText("Analytics URL")).toHaveTextContent("iata=YOW"); }); it("opens Signal from a shared URL and retains regional state when changing range", () => { render(); expect(screen.getByText("Signal range 24h")).toBeInTheDocument(); expect(screen.getByRole("button", { name: "RF / Signal" })).toHaveAttribute("aria-pressed", "true"); fireEvent.click(screen.getByRole("button", { name: "7d" })); expect(screen.getByText("Signal range 7d")).toBeInTheDocument(); expect(screen.getByLabelText("Analytics URL")).toHaveTextContent("iata=YOW"); }); it("opens Traffic from a shared URL and keeps unrelated selections when changing the range", () => { render(); expect(screen.getByText("Traffic range 24h")).toBeInTheDocument(); expect(screen.getByRole("button", { name: "Traffic" })).toHaveAttribute("aria-pressed", "true"); fireEvent.click(screen.getByRole("button", { name: "30d" })); expect(screen.getByText("Traffic range 30d")).toBeInTheDocument(); expect(screen.getByLabelText("Analytics URL")).toHaveTextContent("observerId=kept"); fireEvent.click(screen.getByRole("button", { name: "Mesh" })); expect(screen.getByText("Mesh charts")).toBeInTheDocument(); }); it("opens Scopes with the range control and preserves the chosen range for Traffic", () => { render(); expect(screen.getByText("Scope charts")).toBeInTheDocument(); expect(screen.getByRole("group", { name: "Time range" })).toBeInTheDocument(); fireEvent.click(screen.getByRole("button", { name: "Traffic" })); expect(screen.getByText("Traffic range 30d")).toBeInTheDocument(); expect(screen.getByLabelText("Analytics URL")).toHaveTextContent("iata=YOW"); });