fix(satellites): a hidden class stays out of analyst and voice answers; the tracked satellite still answers

This commit is contained in:
Sameh Khamis committed 2026-11-08 15:16:01 -08:00
1 parent b59eb8b18c
commit 7dcf671b2e
3 files changed
+62 -1

No files matched your search

+49
View File
@@ -152,3 +152,52 @@ test('satellite getAnalystRecords: core rows beat dense extras under the cap', (
_clearDenseCatalogStateForTest();
}
});
test('satellite getAnalystRecords: a hidden class stays out, the tracked one stays in', () => {
const satrec = twoline2satrec(ISS_L1, ISS_L2);
const at = (lon, alt) => ({
position: Cesium.Cartesian3.fromDegrees(lon, 10, alt),
});
_setTrackedSatelliteRefreshStateForTest({
noradId: ISS_NORAD,
name: 'ISS (ZARYA)',
satrec,
entity: {},
point: at(-97, 420_000),
viewer: {},
now: () => Date.now(),
satelliteClass: 'stations',
classes: {
stations: false,
imaging: true,
telecom: false,
starlink: false,
probes: true,
debris: true,
},
neighbours: [
{
noradId: 24876,
name: 'GPS BIIR-2',
group: 'gps-ops',
satelliteClass: 'telecom',
point: at(-100, 20_200_000),
},
{
noradId: 90001,
name: 'TEST IMAGER',
group: 'resource',
satelliteClass: 'imaging',
point: at(-80, 700_000),
},
],
});
try {
assert.deepEqual(
satellitesLayer.getAnalystRecords(10).map((r) => r.noradId),
['25544', '90001'],
);
} finally {
_clearDenseCatalogStateForTest();
}
});
+6
View File
@@ -86,6 +86,12 @@ export function createRecords({ state, parts }) {
const result = [];
const emit = (noradId, sat) => {
if (result.length >= limit) return false;
// A class the user hid stays out of answers too; the tracked one stays.
if (
noradId !== state._trackedNorad &&
parts.controls?._classVisible?.(noradId) === false
)
return true;
const pos = analystGeo(noradId, sat, now);
if (!pos) return true;
result.push(
+7 -1
View File
@@ -26,10 +26,14 @@ export function createTesting({ state: layerState, services, parts, source }) {
// Extra catalog/point rows so a test can exercise a docked cluster (and a
// control satellite that must NOT be treated as part of it).
neighbours = [],
// Optional class of the tracked satellite and class visibility, e.g.
// { telecom: false }.
satelliteClass = undefined,
classes = null,
}) {
layerState._viewer = viewer;
layerState._catalog = new Map([
[noradId, { name, satrec, group: 'stations' }],
[noradId, { name, satrec, group: 'stations', satelliteClass }],
]);
layerState._points = new Map([[noradId, point]]);
for (const neighbour of neighbours) {
@@ -37,6 +41,7 @@ export function createTesting({ state: layerState, services, parts, source }) {
name: neighbour.name,
satrec: neighbour.satrec || satrec,
group: neighbour.group || 'stations',
satelliteClass: neighbour.satelliteClass,
});
layerState._points.set(neighbour.noradId, neighbour.point);
}
@@ -51,6 +56,7 @@ export function createTesting({ state: layerState, services, parts, source }) {
catalog: 'core',
showPoints: false,
showOrbits: false,
...(classes ? { classes } : {}),
};
layerState._enabled = true;
}