108 lines
2.8 KiB
JavaScript
108 lines
2.8 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { after, before, test } from "node:test";
|
|
|
|
import { createServer } from "vite";
|
|
|
|
let server;
|
|
let mapView;
|
|
|
|
before(async () => {
|
|
server = await createServer({
|
|
appType: "custom",
|
|
logLevel: "silent",
|
|
server: { middlewareMode: true },
|
|
});
|
|
mapView = await server.ssrLoadModule("/src/core/map/mapView.ts");
|
|
});
|
|
|
|
after(async () => {
|
|
await server?.close();
|
|
});
|
|
|
|
function serverDocument(overrides = {}) {
|
|
return {
|
|
schema_version: "missioncore.map-view/v1",
|
|
revision: 0,
|
|
view: {
|
|
camera: null,
|
|
visual_settings: {
|
|
atmosphere_enabled: true,
|
|
lighting_enabled: true,
|
|
monochrome_enabled: false,
|
|
terrain_exaggeration: 1,
|
|
buildings_maximum_screen_space_error: 16,
|
|
camera_animation_enabled: true,
|
|
},
|
|
map_height: 720,
|
|
inspector_open_sections: [],
|
|
cache_intent: {
|
|
enabled: true,
|
|
no_overwrite: true,
|
|
},
|
|
selected_subject_id: null,
|
|
layer_visibility: {
|
|
imagery: true,
|
|
terrain: true,
|
|
buildings: true,
|
|
grid: false,
|
|
targets: true,
|
|
},
|
|
},
|
|
...overrides,
|
|
};
|
|
}
|
|
|
|
test("map view starts without a fabricated global camera or subject", () => {
|
|
const document = mapView.defaultMapViewDocument();
|
|
assert.equal(document.view.camera, null);
|
|
assert.equal(document.view.selectedSubjectId, null);
|
|
assert.equal(document.view.cacheIntent.enabled, true);
|
|
assert.equal(document.view.cacheIntent.noOverwrite, true);
|
|
});
|
|
|
|
test("map view decodes and re-encodes the complete versioned contract", () => {
|
|
const decoded = mapView.decodeMapViewDocument(serverDocument({
|
|
revision: 3,
|
|
view: {
|
|
...serverDocument().view,
|
|
camera: {
|
|
longitude: 37.6176,
|
|
latitude: 55.7558,
|
|
height: 2500,
|
|
heading: 12,
|
|
pitch: -48,
|
|
roll: 0,
|
|
},
|
|
inspector_open_sections: ["camera"],
|
|
},
|
|
}));
|
|
const encoded = mapView.encodeMapViewPut(decoded);
|
|
|
|
assert.equal(decoded.revision, 3);
|
|
assert.equal(decoded.view.camera.longitude, 37.6176);
|
|
assert.equal(decoded.view.inspectorOpenSections[0], "camera");
|
|
assert.equal(encoded.view.camera.latitude, 55.7558);
|
|
assert.equal(encoded.view.cache_intent.no_overwrite, true);
|
|
assert.equal("schema_version" in encoded, false);
|
|
});
|
|
|
|
test("map view fails closed on credentials, runtime URLs and unbound selection", () => {
|
|
assert.throws(
|
|
() => mapView.decodeMapViewDocument(serverDocument({
|
|
view: {
|
|
...serverDocument().view,
|
|
token: "forbidden",
|
|
},
|
|
})),
|
|
);
|
|
assert.throws(
|
|
() => mapView.decodeMapViewDocument(serverDocument({
|
|
view: {
|
|
...serverDocument().view,
|
|
inspector_open_sections: ["selection"],
|
|
},
|
|
})),
|
|
/stable subject id|стабильный subject id/i,
|
|
);
|
|
});
|