import assert from "node:assert/strict"; import { after, before, test } from "node:test"; import { createServer } from "vite"; let server, fetchLabViewProfile, saveLabViewProfile, normalizeLabSceneSettings; before(async () => { server = await createServer({ appType: "custom", logLevel: "silent", server: { middlewareMode: true } }); ({ fetchLabViewProfile, saveLabViewProfile } = await server.ssrLoadModule( "/src/core/observatory/labViewProfile.ts")); ({ normalizeLabSceneSettings } = await server.ssrLoadModule( "/src/components/laboratory/CanonicalResultRerunReplay.tsx")); }); after(async () => { await server?.close(); }); const serverProfile = { schema_version: "missioncore.observatory-lab-view-profile/v1", result_id: "result-1", scene_settings: { point_size: 4.7, accumulation_seconds: 8, color_mode: "height", palette: "viridis", show_grid: false, show_labels: true, show_camera_frustums: false, }, updated_at_utc: "2026-09-04T09:30:00.000Z", }; test("LAB view profile round-trips through the result-scoped server endpoint", async () => { const originalFetch = globalThis.fetch; const requests = []; globalThis.fetch = async (url, init = {}) => { requests.push({ url, init }); return new Response(JSON.stringify(serverProfile), { status: 200, headers: { "Content-Type": "application/json" }, }); }; try { const settings = await fetchLabViewProfile("result-1"); assert.equal(settings.pointSize, 4.7); assert.equal(settings.palette, "viridis"); const saved = await saveLabViewProfile("result-1", settings); assert.equal(saved.accumulationSeconds, 8); assert.equal(requests[0].url, "/api/v1/observatory/lab-view-profiles/result-1"); assert.equal(requests[1].init.method, "PUT"); assert.deepEqual(JSON.parse(requests[1].init.body).scene_settings, serverProfile.scene_settings); } finally { globalThis.fetch = originalFetch; } }); test("LAB view profile fails closed on a foreign result identity", async () => { const originalFetch = globalThis.fetch; globalThis.fetch = async () => new Response(JSON.stringify({ ...serverProfile, result_id: "foreign-result", }), { status: 200, headers: { "Content-Type": "application/json" } }); try { await assert.rejects(fetchLabViewProfile("result-1"), /другой LAB/); } finally { globalThis.fetch = originalFetch; } }); test("LAB scene settings normalize typed values before persistence", () => { assert.deepEqual( normalizeLabSceneSettings({ pointSize: 28, accumulationSeconds: 305, colorMode: "height", palette: "viridis", customColor: "#ffffff", showGrid: false, showPoints: true, showTrajectory: true, showLabels: true, showCameraFrustums: false, projection: "3d", }), { pointSize: 28, accumulationSeconds: 305, colorMode: "height", palette: "viridis", customColor: "#ffffff", showGrid: false, showPoints: true, showTrajectory: true, showLabels: true, showCameraFrustums: false, projection: "3d", }, ); });