import { render, screen } from "@testing-library/react";
import { beforeEach, describe, expect, it, vi } from "vitest";
import App from "./App";
describe("Vietnamese-only public app", () => {
beforeEach(() => {
localStorage.clear();
window.history.replaceState(null, "", "/");
document.documentElement.lang = "vi";
document.title = "CarePath";
});
it("always renders Vietnamese and exposes no language switch", () => {
localStorage.setItem("carepath-demo-language", "en");
render();
expect(document.documentElement.lang).toBe("vi");
expect(document.title).toBe(
"CarePath | Bớt gõ bệnh án, thêm thời gian cho người bệnh",
);
expect(
screen.getByRole("heading", {
name: "Dành thời gian cho người bệnh, không phải cho việc gõ bệnh án.",
}),
).toBeInTheDocument();
expect(screen.queryByRole("button", { name: "VI" })).not.toBeInTheDocument();
expect(screen.queryByRole("button", { name: "EN" })).not.toBeInTheDocument();
expect(
document.querySelector('a[href*="phien-dich-y-khoa"], a[href*="console"]'),
).toBeNull();
});
it("replaces the legacy #/scribe route with the canonical clinical-note path", async () => {
vi.stubGlobal(
"fetch",
vi.fn().mockResolvedValue({
ok: true,
json: async () => ({
asr_ready: true,
llm_ready: true,
asr_provider: "mock",
llm_provider: "offline",
}),
}),
);
window.location.hash = "#/scribe";
render();
expect(
await screen.findByRole("heading", {
name: "Ghi chép bệnh án AI — bản nháp",
}),
).toBeInTheDocument();
expect(window.location.pathname).toBe("/ghi-chep-lam-sang/");
expect(window.location.hash).toBe("");
vi.unstubAllGlobals();
});
it("follows browser navigation between the landing page and clinical notes", async () => {
vi.stubGlobal(
"fetch",
vi.fn().mockResolvedValue({
ok: true,
json: async () => ({ asr_ready: true, llm_ready: true }),
}),
);
window.history.replaceState(null, "", "/ghi-chep-lam-sang/");
render();
expect(
await screen.findByRole("heading", { name: "Ghi chép bệnh án AI — bản nháp" }),
).toBeInTheDocument();
window.history.pushState(null, "", "/");
window.dispatchEvent(new PopStateEvent("popstate"));
expect(
await screen.findByRole("heading", {
name: "Dành thời gian cho người bệnh, không phải cho việc gõ bệnh án.",
}),
).toBeInTheDocument();
vi.unstubAllGlobals();
});
});