import assert from "node:assert/strict"; import { mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import test from "node:test"; import { createMapServer } from "./server.mjs"; test("server stores and returns the editable map JSON", async () => { const dataDir = await mkdtemp(join(tmpdir(), "star-map-")); const server = createMapServer({ dataDir }); await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve)); const { port } = server.address(); const baseUrl = `http://127.0.0.1:${port}`; try { const payload = { background: "#101010", systems: [{ id: "alpha", name: "Alpha", x: 10, y: 20, note: "saved" }], connections: [] }; const saveResponse = await fetch(`${baseUrl}/api/map`, { method: "PUT", headers: { "content-type": "application/json" }, body: JSON.stringify(payload) }); assert.equal(saveResponse.status, 200); assert.deepEqual(await saveResponse.json(), { ok: true }); const loadResponse = await fetch(`${baseUrl}/api/map`); assert.equal(loadResponse.status, 200); assert.deepEqual(await loadResponse.json(), payload); } finally { await new Promise((resolve) => server.close(resolve)); await rm(dataDir, { recursive: true, force: true }); } }); test("server rejects invalid map payloads", async () => { const dataDir = await mkdtemp(join(tmpdir(), "star-map-")); const server = createMapServer({ dataDir }); await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve)); const { port } = server.address(); try { const response = await fetch(`http://127.0.0.1:${port}/api/map`, { method: "PUT", headers: { "content-type": "application/json" }, body: JSON.stringify({ systems: "bad", connections: [] }) }); assert.equal(response.status, 400); } finally { await new Promise((resolve) => server.close(resolve)); await rm(dataDir, { recursive: true, force: true }); } });