mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-05 02:44:02 +00:00
fix: distinguish partial vessel snapshots from stale data
This commit is contained in:
1 parent
531ef52ca4
commit
a25ee64209
13 files changed
+155
-3
No files matched your search
@@ -29,3 +29,63 @@ test('panel presentation places Transit between Street Traffic and Bike Share in
|
||||
);
|
||||
assert.equal(order.filter(({ id }) => id === 'transit').length, 1);
|
||||
});
|
||||
|
||||
test('partial feed controls distinguish incomplete records from stale data and outages', async () => {
|
||||
const { LayerPanel, layerFeedState } = await import('./layerPanel.js');
|
||||
const classes = new Map();
|
||||
const attrs = new Map();
|
||||
const button = {
|
||||
classList: { toggle: (key, value) => classes.set(key, value) },
|
||||
dataset: {},
|
||||
setAttribute: (key, value) => attrs.set(key, value),
|
||||
};
|
||||
const layer = {
|
||||
id: 'ais-live-vessels',
|
||||
name: 'Live Vessels',
|
||||
source: 'AISStream',
|
||||
enabled: true,
|
||||
stats: {
|
||||
partial: true,
|
||||
stale: false,
|
||||
count: 2,
|
||||
acceptedRowCount: 2,
|
||||
rawRowCount: 3,
|
||||
lastUpdate: Date.now(),
|
||||
},
|
||||
};
|
||||
const panel = LayerPanel.prototype;
|
||||
panel._syncToggleButton(button, layer);
|
||||
assert.equal(button.textContent, 'PARTIAL');
|
||||
assert.equal(button.dataset.feedState, 'partial');
|
||||
assert.equal(classes.get('feed-partial'), true);
|
||||
assert.equal(classes.get('feed-stale'), false);
|
||||
assert.match(attrs.get('aria-label'), /PARTIAL/);
|
||||
assert.match(
|
||||
panel._buildMetaText(layer),
|
||||
/^PARTIAL · AISStream · 2 of 3 records accepted · /,
|
||||
);
|
||||
assert.match(
|
||||
panel._buildMetaText({
|
||||
...layer,
|
||||
stats: { ...layer.stats, rawRowCount: 2 },
|
||||
}),
|
||||
/incomplete snapshot/,
|
||||
);
|
||||
assert.equal(layerFeedState({ ...layer.stats, stale: true }), 'stale');
|
||||
assert.equal(
|
||||
layerFeedState({ ...layer.stats, error: 'Connection lost' }),
|
||||
'degraded',
|
||||
);
|
||||
assert.equal(
|
||||
layerFeedState({ ...layer.stats, status: 'unavailable' }),
|
||||
'unavailable',
|
||||
);
|
||||
assert.equal(layerFeedState({ ...layer.stats, loading: true }), 'loading');
|
||||
layer.stats = { ...layer.stats, partial: false };
|
||||
panel._syncToggleButton(button, layer);
|
||||
assert.equal(button.textContent, 'ON');
|
||||
assert.equal(classes.get('feed-partial'), false);
|
||||
layer.enabled = false;
|
||||
panel._syncToggleButton(button, layer);
|
||||
assert.equal(button.textContent, 'OFF');
|
||||
});
|
||||
Reference in new issue
Block a user