import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { MemoryRouter, Route, Routes, useLocation } from "react-router-dom";
import { beforeEach, describe, expect, it, vi } from "vitest";
import ErrorPage from "@/pages/ErrorPage";
import NotFound from "@/pages/NotFound";
import ServerDetail from "@/pages/ServerDetail";
vi.mock("@/components/NetworkChart", () => ({
NetworkChart: ({ server_id, show }: { server_id: number; show: boolean }) => (
{`${server_id}:${show}`}
),
}));
vi.mock("@/components/ServerDetailChart", () => ({
default: ({ server_id }: { server_id: string }) => (
{server_id}
),
}));
vi.mock("@/components/ServerDetailOverview", () => ({
default: ({ server_id }: { server_id: string }) => (
{server_id}
),
}));
vi.mock("@/components/TabSwitch", () => ({
default: ({
tabs,
setCurrentTab,
}: {
tabs: string[];
setCurrentTab: (tab: string) => void;
}) => (
{tabs.map((tab) => (
))}
),
}));
function LocationProbe() {
const location = useLocation();
return {location.pathname}
;
}
describe("simple pages", () => {
it("renders explicit and translated error messages", () => {
const { rerender } = render();
expect(screen.getByText("418")).toBeInTheDocument();
expect(screen.getByText("short")).toBeInTheDocument();
rerender();
expect(screen.getByText("error.somethingWentWrong")).toBeInTheDocument();
});
it("navigates back home from the not found page", async () => {
const user = userEvent.setup();
render(
>
}
/>
home
>
}
/>
,
);
expect(screen.getByText("404")).toBeInTheDocument();
await user.click(screen.getByRole("button", { name: "error.backToHome" }));
expect(screen.getByText("home")).toBeInTheDocument();
expect(screen.getByText("/")).toBeInTheDocument();
});
});
describe("ServerDetail", () => {
beforeEach(() => {
vi.stubGlobal("scrollTo", vi.fn());
});
it("renders detail tab by default and can switch to network tab", async () => {
const user = userEvent.setup();
render(
} />
,
);
expect(screen.getByTestId("detail-overview")).toHaveTextContent("7");
expect(screen.getByTestId("detail-chart")).toHaveTextContent("7");
expect(screen.queryByTestId("network-chart")).not.toBeInTheDocument();
await user.click(screen.getByRole("button", { name: "Network" }));
expect(await screen.findByTestId("network-chart")).toHaveTextContent(
"7:true",
);
expect(screen.queryByTestId("detail-chart")).not.toBeInTheDocument();
});
it("redirects when route params are missing", async () => {
render(
} />
redirected} />
,
);
expect(await screen.findByText("redirected")).toBeInTheDocument();
});
});