tranth3truong's picture
Deploy public Scribe-only CarePath Space
cc678b9
Raw
History Blame Contribute Delete
2.79 kB
import { fireEvent, render, screen } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
import App from "./App";
describe("App", () => {
it("keeps interpreter controls unmounted before consent", () => {
vi.stubGlobal("fetch", vi.fn());
render(<App />);
expect(screen.getByText("Hôm nay bạn là ai?")).toBeInTheDocument();
expect(screen.queryByRole("button", { name: /Hold to talk/ })).not.toBeInTheDocument();
});
it("identifies Interpreter as a mock product and shares the language preference", () => {
localStorage.clear();
render(<App />);
expect(screen.getByRole("navigation", { name: "Đường dẫn sản phẩm" })).toHaveTextContent(
"CarePath/Phiên dịch khám bệnh trực tiếp",
);
expect(screen.getByText("Bản mô phỏng tương tác")).toBeInTheDocument();
expect(screen.getByRole("link", { name: "Tất cả chức năng" })).toHaveAttribute("href", "/");
fireEvent.click(screen.getByRole("button", { name: "EN" }));
expect(screen.getByText("Interactive mock simulation")).toBeInTheDocument();
expect(screen.getByRole("link", { name: "All products" })).toBeInTheDocument();
expect(document.querySelector(".product-shell")).toHaveAttribute("lang", "en");
expect(document.documentElement).toHaveAttribute("lang", "en");
expect(document.title).toBe("CarePath | Medical Interpreter");
expect(localStorage.getItem("carepath-demo-language")).toBe("en");
});
it("uses a valid language query once and defaults invalid values to Vietnamese", () => {
window.history.replaceState({}, "", "?lang=en");
localStorage.setItem("carepath-demo-language", "vi");
const { unmount } = render(<App />);
expect(document.documentElement).toHaveAttribute("lang", "en");
expect(localStorage.getItem("carepath-demo-language")).toBe("en");
unmount();
window.history.replaceState({}, "", "?lang=invalid");
render(<App />);
expect(document.documentElement).toHaveAttribute("lang", "vi");
window.history.replaceState({}, "", "/");
});
it("renders review only at the internal hash route and returns to the interpreter entry", () => {
window.history.replaceState({}, "", "/phien-dich-y-khoa/#/kiem-duyet");
const { unmount } = render(<App />);
expect(screen.getByRole("heading", { name: "Translation review" })).toBeInTheDocument();
const returnLink = screen.getByRole("link", { name: "Quay lại phiên dịch" });
expect(returnLink).toHaveAttribute("href", "#/");
window.location.hash = "#/";
fireEvent(window, new HashChangeEvent("hashchange"));
expect(screen.getByText("Hôm nay bạn là ai?")).toBeInTheDocument();
unmount();
window.history.replaceState({}, "", "/");
});
});