terriajs
Version:
Geospatial data visualization platform.
49 lines (43 loc) • 1.84 kB
text/typescript
import { http, HttpResponse, passthrough } from "msw";
import { setupWorker } from "msw/browser";
import { TERRAIN_TILE, LAYER_JSON } from "../fixtures/terrain/terrain";
// Default handlers that persist across worker.resetHandlers() calls.
// These serve minimal valid responses for Cesium Ion terrain loading
// so tests never hit real external APIs.
export const worker = setupWorker(
http.get("/", () => passthrough()),
http.get("__jasmine__/*", () => passthrough()),
http.get("*chrome-extension*", () => passthrough()),
http.get("/build/TerriaJS/*", () => passthrough()),
http.get("/build/Cesium/*", () => passthrough()),
http.get("/build/*.js", () => passthrough()),
http.get("/build/*.svg", () => passthrough()),
http.get("/test/*", () => passthrough()),
http.get("/languages/*.json", () => passthrough()),
http.get("/images/*", () => passthrough()),
http.get("/data/*", () => passthrough()),
// Ion asset endpoint → return a mock terrain server URL
http.get("https://api.cesium.com/v1/assets/:assetId/endpoint", ({ params }) =>
HttpResponse.json({
type: "TERRAIN",
url: `https://assets.cesium.com/${params.assetId}/`,
accessToken: "mock-token"
})
),
// Catch-all for other api.cesium.com requests
http.all("https://api.cesium.com/*", () => HttpResponse.error()),
// Serve terrain data from *.cesium.com subdomains
http.get("https://*.cesium.com/*", ({ request }) => {
const url = new URL(request.url);
if (url.pathname.endsWith("/layer.json")) {
return HttpResponse.json(LAYER_JSON);
}
if (url.pathname.endsWith(".terrain")) {
return new HttpResponse(TERRAIN_TILE.buffer, {
headers: { "Content-Type": "application/vnd.quantized-mesh" }
});
}
// Unknown pattern — block
return HttpResponse.error();
})
);