mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 10:24:02 +00:00
* feat(street-level): export the KartaView and Panoramax providers A host that composes Street Level with its own provider list can already import the Mapillary and Google Street View providers; KartaView and Panoramax were reachable only through the default list, which needs a Mapillary source. Exporting them lets a host offer the keyless providers without Mapillary. * chore: changelog entry for the Street Level provider exports * feat(street-level): send Mapillary Graph lookups to a source endpoint A Mapillary source can take a graphEndpoint, a Graph API base that adds the token itself. Its sequence lookups go there through the source's transport, and the photo viewer uses MapillaryJS's stock GraphDataProvider at that endpoint, so a host that proxies Mapillary needs no client token in the page. Without it, behaviour is unchanged: direct Graph API calls with the client token.
89 lines
3.4 KiB
JavaScript
89 lines
3.4 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { createApplicationStreetLevel } from './streetLevel.js';
|
|
import { fakeStreetLevelProvider } from '../../testSupport/streetLevelFakes.mjs';
|
|
|
|
test('explicit providers replace the default source and an empty list removes it', () => {
|
|
const sources = { mapillary: {} };
|
|
const provider = fakeStreetLevelProvider({
|
|
id: 'example',
|
|
pickPrefix: 'example:',
|
|
});
|
|
const layer = createApplicationStreetLevel({
|
|
sources,
|
|
providers: [provider],
|
|
});
|
|
assert.deepEqual(layer.providerIds, ['example']);
|
|
assert.deepEqual(
|
|
createApplicationStreetLevel({ sources, providers: [] }).providerIds,
|
|
[],
|
|
);
|
|
assert.throws(
|
|
() => createApplicationStreetLevel({ sources }),
|
|
/Mapillary source/,
|
|
);
|
|
assert.throws(
|
|
() => createApplicationStreetLevel({ providers: null }),
|
|
/array/,
|
|
);
|
|
});
|
|
|
|
test('the defaults are Mapillary (given its source), Street View, KartaView and Panoramax, which start off and travel as provider switches', async () => {
|
|
const { createDefaultLayerState } = await import('../../data/layerState.js');
|
|
const mapillary = {
|
|
getStatus() {},
|
|
getTile() {},
|
|
getSequenceImages() {},
|
|
nearestImages() {},
|
|
};
|
|
const layer = createApplicationStreetLevel({ sources: { mapillary } });
|
|
assert.deepEqual(layer.providerIds, [
|
|
'mapillary',
|
|
'google',
|
|
'kartaview',
|
|
'panoramax',
|
|
]);
|
|
// A fresh page and a restored default agree: Street View is billed, so off.
|
|
layer.setParams(createDefaultLayerState().options['street-level']);
|
|
assert.equal(layer.getParams().google, false);
|
|
assert.equal(layer.getParams().mapillary, true);
|
|
// A link that lit Street View carries it in the shared switch field.
|
|
layer.setParams({ providerSwitches: 'google-1' });
|
|
assert.equal(layer.getParams().google, true);
|
|
assert.equal(
|
|
layer.getParams().providerSwitches,
|
|
'google-1*kartaview-0*panoramax-0',
|
|
);
|
|
// KartaView is keyless and free, but one source shows at a time.
|
|
layer.setParams({ providerSwitches: 'kartaview-1' });
|
|
assert.equal(layer.getParams().kartaview, true);
|
|
assert.equal(layer.getParams().google, false);
|
|
assert.equal(layer.getParams().mapillary, false);
|
|
// As is Panoramax: lighting it puts KartaView out.
|
|
layer.setParams({ providerSwitches: 'panoramax-1' });
|
|
assert.equal(layer.getParams().panoramax, true);
|
|
assert.equal(layer.getParams().kartaview, false);
|
|
assert.equal(layer.getParams().mapillary, false);
|
|
// The form the app writes (the README and CHANGELOG quote it).
|
|
assert.equal(
|
|
layer.getParams().providerSwitches,
|
|
'google-0*kartaview-0*panoramax-1',
|
|
);
|
|
// Without the application's Street Level source there are none.
|
|
assert.deepEqual(createApplicationStreetLevel({}).providerIds, []);
|
|
});
|
|
|
|
test('every built-in provider is exported, so hosts can choose their own list', async () => {
|
|
const google = await import('gods-eye-view/layers/street-level/google');
|
|
const kartaview = await import('gods-eye-view/layers/street-level/kartaview');
|
|
const panoramax = await import('gods-eye-view/layers/street-level/panoramax');
|
|
const layer = createApplicationStreetLevel({
|
|
providers: [
|
|
google.createGoogleProvider({ getApiKey: () => null }),
|
|
kartaview.createKartaViewProvider(),
|
|
panoramax.createPanoramaxProvider(),
|
|
],
|
|
});
|
|
assert.deepEqual(layer.providerIds, ['google', 'kartaview', 'panoramax']);
|
|
});
|