import assert from "node:assert/strict"; import { after, before, test } from "node:test"; import { createServer } from "vite"; let server; let environment; before(async () => { server = await createServer({ appType: "custom", logLevel: "silent", server: { middlewareMode: true }, }); environment = await server.ssrLoadModule( "/src/core/environment/environmentSettings.ts", ); }); after(async () => { await server?.close(); }); function serverDocument(overrides = {}) { const defaults = environment.defaultEnvironmentSettings(); return { schema_version: "missioncore.operator-environment/v1", revision: defaults.revision, header_labels: defaults.headerLabels, backgrounds: Object.fromEntries( Object.entries(defaults.backgrounds).map(([surfaceId, background]) => [ surfaceId, { enabled: background.enabled, source: background.source, url: background.url, media_kind: background.mediaKind, file_name: background.fileName, }, ]), ), ...overrides, }; } test("default environment exposes every header and landing surface", () => { const defaults = environment.defaultEnvironmentSettings(); assert.deepEqual(Object.keys(defaults.headerLabels), [ "center", "fleet", "observation", "missions", "data", "system", "polygon", ]); assert.deepEqual(Object.keys(defaults.backgrounds), [ "home", "center", "fleet", "observation", "missions", "data", "system", "polygon", ]); }); test("server document decodes and re-encodes without leaking schema internals", () => { const payload = serverDocument({ revision: 4, header_labels: { ...serverDocument().header_labels, center: "Командный центр", }, backgrounds: { ...serverDocument().backgrounds, home: { enabled: true, source: "file", url: `/api/v1/environment/media/home?generation=${"a".repeat(64)}`, media_kind: "video", file_name: "stage.mp4", }, }, }); const decoded = environment.decodeEnvironmentSettings(payload); const encoded = environment.encodeEnvironmentSettings(decoded); assert.equal(decoded.revision, 4); assert.equal(decoded.headerLabels.center, "Командный центр"); assert.equal(decoded.backgrounds.home.mediaKind, "video"); assert.equal(encoded.backgrounds.home.media_kind, "video"); assert.equal("schema_version" in encoded, false); }); test("decoder fails closed on an unknown environment schema", () => { assert.throws( () => environment.decodeEnvironmentSettings( serverDocument({ schema_version: "future/v9" }), ), /не поддерживается/, ); }); test("editing a cloned environment cannot mutate the accepted settings", () => { const accepted = environment.decodeEnvironmentSettings(serverDocument()); const draft = environment.cloneEnvironmentSettings(accepted); draft.headerLabels.center = "Изменено"; draft.backgrounds.home.enabled = true; assert.equal(accepted.headerLabels.center, "Центр"); assert.equal(accepted.backgrounds.home.enabled, false); });