mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 10:24:02 +00:00
94 lines
2.9 KiB
JavaScript
94 lines
2.9 KiB
JavaScript
import { createSurfaceServices } from './surfaceServices.js';
|
|
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { createApplicationCatalog } from './constructCatalog.js';
|
|
import { createStandaloneLayerSources } from '../standalone/layerSources.js';
|
|
import { catalogControlServices } from './catalog.js';
|
|
|
|
function fixtureSources(ids, calls) {
|
|
const sources = createStandaloneLayerSources();
|
|
sources.military = {
|
|
getSnapshot: async () => {
|
|
throw new Error('Use identity acquisition');
|
|
},
|
|
async getIdentities(_query, { signal }) {
|
|
calls.push(signal);
|
|
return ids;
|
|
},
|
|
};
|
|
return sources;
|
|
}
|
|
|
|
test('catalogs construct distinct layers and classification from their supplied source', async (t) => {
|
|
const a = new AbortController();
|
|
const b = new AbortController();
|
|
t.after(() => {
|
|
a.abort();
|
|
b.abort();
|
|
});
|
|
const callsA = [];
|
|
const callsB = [];
|
|
const first = createApplicationCatalog({
|
|
sources: fixtureSources(['abc123'], callsA),
|
|
signal: a.signal,
|
|
surface: fixtureSurface(a.signal),
|
|
});
|
|
const second = createApplicationCatalog({
|
|
sources: fixtureSources(['def456'], callsB),
|
|
signal: b.signal,
|
|
surface: fixtureSurface(b.signal),
|
|
});
|
|
assert.equal(first.layers.length, 17);
|
|
assert.deepEqual(
|
|
first.layers.map(({ id }) => id),
|
|
second.layers.map(({ id }) => id),
|
|
);
|
|
for (const layer of first.layers)
|
|
assert.notEqual(layer, second.get(layer.id));
|
|
assert.equal(
|
|
catalogControlServices(first).satellitesLayer,
|
|
first.get('satellites'),
|
|
);
|
|
assert.equal(callsA.length, 0, 'construction must not acquire');
|
|
await first.militaryRegistry.refreshMilitaryRegistryIfStale();
|
|
await second.militaryRegistry.refreshMilitaryRegistryIfStale();
|
|
assert.equal(first.militaryRegistry.isMilitaryIcao('abc123'), true);
|
|
assert.equal(first.militaryRegistry.isMilitaryIcao('def456'), false);
|
|
assert.equal(second.militaryRegistry.isMilitaryIcao('def456'), true);
|
|
a.abort();
|
|
assert.equal(callsA[0].aborted, true);
|
|
assert.equal(first.militaryRegistry.isMilitaryIcao('abc123'), false);
|
|
assert.equal(callsB[0].aborted, false);
|
|
assert.equal(second.militaryRegistry.isMilitaryIcao('def456'), true);
|
|
});
|
|
|
|
test('invalid or already cancelled construction fails before classification can acquire', () => {
|
|
const lifetime = new AbortController();
|
|
assert.throws(
|
|
() =>
|
|
createApplicationCatalog({
|
|
sources: {},
|
|
signal: lifetime.signal,
|
|
surface: fixtureSurface(lifetime.signal),
|
|
}),
|
|
/catalog source/,
|
|
);
|
|
lifetime.abort();
|
|
assert.throws(
|
|
() =>
|
|
createApplicationCatalog({
|
|
sources: createStandaloneLayerSources(),
|
|
signal: lifetime.signal,
|
|
}),
|
|
{ name: 'AbortError' },
|
|
);
|
|
});
|
|
|
|
function fixtureSurface(signal) {
|
|
return createSurfaceServices({
|
|
terrainSource: { getHeights: async () => [] },
|
|
signal,
|
|
eventTarget: null,
|
|
});
|
|
}
|