// Coverage for the F8-12 / #29 planet-label formatting. The // renderer's per-Pixi.Text drawing lives behind Pixi APIs (and is // exercised by Playwright); this file pins the pure data step. import { describe, expect, test } from "vitest"; import type { GameReport } from "../src/api/game-state"; import { buildPlanetLabels } from "../src/map/labels"; import { EMPTY_SHIP_GROUPS } from "./helpers/empty-ship-groups"; function makeReport(overrides: Partial = {}): GameReport { return { turn: 1, mapWidth: 100, mapHeight: 100, planetCount: 0, planets: [], race: "", localShipClass: [], routes: [], localPlayerDrive: 0, localPlayerWeapons: 0, localPlayerShields: 0, localPlayerCargo: 0, ...EMPTY_SHIP_GROUPS, ...overrides, }; } describe("buildPlanetLabels", () => { test("named planet with showNames=true emits both lines", () => { const report = makeReport({ planets: [ { number: 5, name: "Tancordia", kind: "local", x: 10, y: 20, owner: null, size: null, resources: null, industryStockpile: null, materialsStockpile: null, industry: null, population: null, colonists: null, production: null, freeIndustry: null, }, ], }); const out = buildPlanetLabels(report, { showNames: true }); expect(out).toEqual([ { planetNumber: 5, x: 10, y: 20, name: "Tancordia", numberLabel: "#5", }, ]); }); test("named planet with showNames=false drops the name line", () => { const report = makeReport({ planets: [ { number: 5, name: "Tancordia", kind: "local", x: 10, y: 20, owner: null, size: null, resources: null, industryStockpile: null, materialsStockpile: null, industry: null, population: null, colonists: null, production: null, freeIndustry: null, }, ], }); const out = buildPlanetLabels(report, { showNames: false }); expect(out[0].name).toBeNull(); expect(out[0].numberLabel).toBe("#5"); }); test("unidentified planet always renders #N only, ignoring the toggle", () => { const report = makeReport({ planets: [ { number: 42, name: "Tancordia", kind: "unidentified", x: 5, y: 5, owner: null, size: null, resources: null, industryStockpile: null, materialsStockpile: null, industry: null, population: null, colonists: null, production: null, freeIndustry: null, }, ], }); const on = buildPlanetLabels(report, { showNames: true }); const off = buildPlanetLabels(report, { showNames: false }); expect(on[0].name).toBeNull(); expect(off[0].name).toBeNull(); expect(on[0].numberLabel).toBe("#42"); }); test("empty-name planet falls back to #N", () => { const report = makeReport({ planets: [ { number: 9, name: "", kind: "uninhabited", x: 1, y: 1, owner: null, size: null, resources: null, industryStockpile: null, materialsStockpile: null, industry: null, population: null, colonists: null, production: null, freeIndustry: null, }, ], }); const out = buildPlanetLabels(report, { showNames: true }); expect(out[0].name).toBeNull(); expect(out[0].numberLabel).toBe("#9"); }); });