feat(map): publish shared Cesium adapter
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
import assert from "node:assert/strict";
|
||||
import test from "node:test";
|
||||
|
||||
import {
|
||||
MapRuntimeError,
|
||||
applyCacheIntent,
|
||||
initialMapRuntimeState,
|
||||
withProviderState,
|
||||
} from "../dist/index.js";
|
||||
|
||||
test("cache intent keeps all provider traffic behind the gateway contract", () => {
|
||||
const cached = new URL(
|
||||
applyCacheIntent("https://assets.ion.cesium.com/tileset.json?v=1", {
|
||||
enabled: true,
|
||||
no_overwrite: true,
|
||||
}, false),
|
||||
);
|
||||
assert.equal(cached.searchParams.get("nodedc_cache_profile"), "live");
|
||||
assert.equal(cached.searchParams.has("nodedc_cache_refresh"), false);
|
||||
|
||||
const passthrough = new URL(
|
||||
applyCacheIntent("https://assets.ion.cesium.com/tileset.json", {
|
||||
enabled: false,
|
||||
no_overwrite: true,
|
||||
}, false),
|
||||
);
|
||||
assert.equal(passthrough.searchParams.get("nodedc_cache_mode"), "passthrough");
|
||||
|
||||
const refresh = new URL(
|
||||
applyCacheIntent("https://assets.ion.cesium.com/tileset.json", {
|
||||
enabled: true,
|
||||
no_overwrite: true,
|
||||
}, true),
|
||||
);
|
||||
assert.equal(refresh.searchParams.get("nodedc_cache_refresh"), "1");
|
||||
});
|
||||
|
||||
test("provider URLs reject direct credentials and non-HTTPS transport", () => {
|
||||
for (const value of [
|
||||
"http://assets.ion.cesium.com/tile.bin",
|
||||
"https://user:pass@assets.ion.cesium.com/tile.bin",
|
||||
"https://assets.ion.cesium.com/tile.bin?access_token=forbidden",
|
||||
"https://assets.ion.cesium.com/tile.bin#token",
|
||||
]) {
|
||||
assert.throws(
|
||||
() => applyCacheIntent(value, { enabled: true, no_overwrite: true }, false),
|
||||
MapRuntimeError,
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
test("independent provider states produce ready, degraded and unavailable phases", () => {
|
||||
let state = initialMapRuntimeState();
|
||||
state = withProviderState(state, "imagery", { phase: "ready" });
|
||||
state = withProviderState(state, "terrain", { phase: "ready" });
|
||||
state = withProviderState(state, "buildings", { phase: "ready" });
|
||||
assert.equal(state.phase, "ready");
|
||||
|
||||
state = withProviderState(state, "buildings", {
|
||||
phase: "error",
|
||||
code: "cesium_ion_endpoint_unavailable",
|
||||
});
|
||||
assert.equal(state.phase, "degraded");
|
||||
assert.equal(state.code, "cesium_ion_endpoint_unavailable");
|
||||
|
||||
state = withProviderState(state, "imagery", {
|
||||
phase: "error",
|
||||
code: "map_upstream_timeout",
|
||||
});
|
||||
state = withProviderState(state, "terrain", {
|
||||
phase: "error",
|
||||
code: "map_upstream_timeout",
|
||||
});
|
||||
assert.equal(state.phase, "gateway-unavailable");
|
||||
});
|
||||
Reference in New Issue
Block a user