feat(map): add operational Cesium workspace
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
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,
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user