// Component tests for every Phase 10 active-view stub. Each stub // renders the localised view title plus the `coming soon` body copy // and exposes a stable `data-testid` so later phases can replace the // content without renaming the test hook. The table stub additionally // honours its `entity` prop and falls back to the snake_case i18n key // for an unknown slug. import "@testing-library/jest-dom/vitest"; import { render } from "@testing-library/svelte"; import { beforeEach, describe, expect, test } from "vitest"; import { i18n } from "../src/lib/i18n/index.svelte"; import MapView from "../src/lib/active-view/map.svelte"; import TableView from "../src/lib/active-view/table.svelte"; import ReportView from "../src/lib/active-view/report.svelte"; import BattleView from "../src/lib/active-view/battle.svelte"; import MailView from "../src/lib/active-view/mail.svelte"; import DesignerShipClass from "../src/lib/active-view/designer-ship-class.svelte"; import DesignerScience from "../src/lib/active-view/designer-science.svelte"; beforeEach(() => { i18n.resetForTests("en"); }); describe("active-view stubs", () => { test("map stub renders title and coming-soon copy", () => { const ui = render(MapView); const node = ui.getByTestId("active-view-map"); expect(node).toHaveTextContent("map"); expect(node).toHaveTextContent("coming soon"); }); test("table stub maps a kebab-case entity to the right i18n title", () => { const ui = render(TableView, { props: { entity: "ship-classes" } }); const node = ui.getByTestId("active-view-table"); expect(node).toHaveAttribute("data-entity", "ship-classes"); expect(node).toHaveTextContent("ship classes"); expect(node).toHaveTextContent("coming soon"); }); test("table stub also handles a single-word entity", () => { const ui = render(TableView, { props: { entity: "planets" } }); expect(ui.getByTestId("active-view-table")).toHaveTextContent("planets"); }); test("report / mail / designer stubs render their localised titles", () => { const r = render(ReportView); expect(r.getByTestId("active-view-report")).toHaveTextContent( "turn report", ); const m = render(MailView); expect(m.getByTestId("active-view-mail")).toHaveTextContent( "diplomatic mail", ); const sc = render(DesignerShipClass); expect( sc.getByTestId("active-view-designer-ship-class"), ).toHaveTextContent("ship-class designer"); const sci = render(DesignerScience); expect( sci.getByTestId("active-view-designer-science"), ).toHaveTextContent("science designer"); }); test("battle stub stamps the battleId on the host element", () => { const ui = render(BattleView, { props: { battleId: "b-42" } }); const node = ui.getByTestId("active-view-battle"); expect(node).toHaveAttribute("data-battle-id", "b-42"); expect(node).toHaveTextContent("battle log"); }); test("battle stub accepts an empty battleId for the list URL", () => { const ui = render(BattleView, { props: { battleId: "" } }); expect(ui.getByTestId("active-view-battle")).toHaveAttribute( "data-battle-id", "", ); }); });