61 lines
2.0 KiB
JavaScript
61 lines
2.0 KiB
JavaScript
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 });
|
|
}
|
|
});
|