mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-05 02:44:02 +00:00
refactor(maps): separate source factories and scene coordination
This commit is contained in:
1 parent
561a781099
commit
e59282dc9c
22 files changed
+1807
-798
No files matched your search
+50
-12
@@ -7,25 +7,42 @@ import {
|
||||
|
||||
function fakeCesium(outcomes = []) {
|
||||
const calls = [];
|
||||
const next = () => {
|
||||
const outcome = outcomes.shift();
|
||||
if (outcome instanceof Error) throw outcome;
|
||||
return outcome;
|
||||
};
|
||||
return {
|
||||
calls,
|
||||
Ion: { defaultAccessToken: undefined },
|
||||
GoogleMaps: { defaultApiKey: undefined },
|
||||
async createGooglePhotorealistic3DTileset(options) {
|
||||
calls.push({
|
||||
options,
|
||||
googleKey: this.GoogleMaps.defaultApiKey,
|
||||
ionToken: this.Ion.defaultAccessToken,
|
||||
});
|
||||
const outcome = outcomes.shift();
|
||||
if (outcome instanceof Error) throw outcome;
|
||||
return outcome;
|
||||
calls.push({ options, googleKey: options.key });
|
||||
return next();
|
||||
},
|
||||
IonResource: {
|
||||
async fromAssetId(assetId, options) {
|
||||
return { assetId, ...options };
|
||||
},
|
||||
},
|
||||
Cesium3DTileset: {
|
||||
async fromUrl(resource, options) {
|
||||
calls.push({
|
||||
options,
|
||||
ionToken: resource.accessToken,
|
||||
assetId: resource.assetId,
|
||||
});
|
||||
return next();
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
test('map startup route reflects the best configured provider', () => {
|
||||
assert.equal(selectMapStartupRoute({ googleApiKey: 'google', cesiumToken: 'ion' }), 'google-direct');
|
||||
assert.equal(
|
||||
selectMapStartupRoute({ googleApiKey: 'google', cesiumToken: 'ion' }),
|
||||
'google-direct',
|
||||
);
|
||||
assert.equal(selectMapStartupRoute({ cesiumToken: 'ion' }), 'google-ion');
|
||||
assert.equal(selectMapStartupRoute(), 'osm');
|
||||
});
|
||||
@@ -53,13 +70,17 @@ test('a direct Google key is preferred', async () => {
|
||||
test('an ion-only setup loads the hosted Google 3D asset', async () => {
|
||||
const tileset = { id: 'ion' };
|
||||
const Cesium = fakeCesium([tileset]);
|
||||
const result = await loadPhotorealisticTileset(Cesium, { cesiumToken: 'ion-secret' });
|
||||
const result = await loadPhotorealisticTileset(Cesium, {
|
||||
cesiumToken: 'ion-secret',
|
||||
});
|
||||
assert.equal(result.tileset, tileset);
|
||||
assert.equal(result.route, 'google-ion');
|
||||
assert.equal(Cesium.calls.length, 1);
|
||||
assert.equal(Cesium.calls[0].googleKey, undefined);
|
||||
assert.equal(Cesium.calls[0].ionToken, 'ion-secret');
|
||||
assert.equal(Cesium.Ion.defaultAccessToken, 'ion-secret');
|
||||
assert.equal(Cesium.Ion.defaultAccessToken, undefined);
|
||||
assert.equal(Cesium.calls[0].assetId, 2275207);
|
||||
assert.equal(Cesium.calls[0].options.enableCollision, true);
|
||||
});
|
||||
|
||||
test('a failed direct request retries through ion before falling back', async () => {
|
||||
@@ -91,7 +112,10 @@ test('a failed direct-only request does not consume an implicit Cesium token', a
|
||||
});
|
||||
|
||||
test('failed direct and ion requests preserve the keyless OSM fallback', async () => {
|
||||
const Cesium = fakeCesium([new Error('direct denied'), new Error('ion denied')]);
|
||||
const Cesium = fakeCesium([
|
||||
new Error('direct denied'),
|
||||
new Error('ion denied'),
|
||||
]);
|
||||
const result = await loadPhotorealisticTileset(Cesium, {
|
||||
googleApiKey: 'google-secret',
|
||||
cesiumToken: 'ion-secret',
|
||||
@@ -102,3 +126,17 @@ test('failed direct and ion requests preserve the keyless OSM fallback', async (
|
||||
assert.equal(Cesium.calls.length, 2);
|
||||
assert.equal(Cesium.GoogleMaps.defaultApiKey, undefined);
|
||||
});
|
||||
|
||||
test('independent source configurations never mutate shared SDK credentials', async () => {
|
||||
const Cesium = fakeCesium([{ id: 'a' }, { id: 'b' }]);
|
||||
Cesium.Ion.defaultAccessToken = 'untouched-ion';
|
||||
Cesium.GoogleMaps.defaultApiKey = 'untouched-google';
|
||||
await Promise.all([
|
||||
loadPhotorealisticTileset(Cesium, { googleApiKey: 'source-a' }),
|
||||
loadPhotorealisticTileset(Cesium, { cesiumToken: 'source-b' }),
|
||||
]);
|
||||
assert.equal(Cesium.calls[0].googleKey, 'source-a');
|
||||
assert.equal(Cesium.calls[1].ionToken, 'source-b');
|
||||
assert.equal(Cesium.Ion.defaultAccessToken, 'untouched-ion');
|
||||
assert.equal(Cesium.GoogleMaps.defaultApiKey, 'untouched-google');
|
||||
});
|
||||
Reference in new issue
Block a user