fix(monitor): arbitrate conflicting location sources
This commit is contained in:
@@ -2,7 +2,7 @@ import { act, cleanup, fireEvent, render, screen, waitFor } from '@testing-libra
|
||||
import { afterEach, expect, test, vi } from 'vitest';
|
||||
import type { MonitorMapResponse } from '../../api/types';
|
||||
import { wgs84ToGcj02, type AMapLike, type AMapMap, type AMapMassPoint } from '../../integrations/amap';
|
||||
import { advancePointMotions, FleetMap, interpolateMassPoints, massPointFingerprint, pointMoveDurationMs, pointMoveFrameMs } from './FleetMap';
|
||||
import { advancePointMotions, FleetMap, interpolateMassPoints, massPointFingerprint, movingPointIDs, pointMoveDurationMs, pointMoveFrameMs } from './FleetMap';
|
||||
|
||||
const setData = vi.fn<(data: AMapMassPoint[]) => void>();
|
||||
const setStyle = vi.fn();
|
||||
@@ -170,6 +170,15 @@ test('interpolates existing mass points at constant speed while keeping new poin
|
||||
expect(interpolateMassPoints(previous, target, 1)).toEqual(target);
|
||||
});
|
||||
|
||||
test('does not interpolate across an authoritative location source switch', () => {
|
||||
const previous: AMapMassPoint[] = [{ id: 'vehicle', label: 'A', style: 0, lnglat: [113.2, 23.1], sourceToken: 'JT808:terminal-a' }];
|
||||
const sameSource: AMapMassPoint[] = [{ id: 'vehicle', label: 'A', style: 0, lnglat: [113.3, 23.2], sourceToken: 'JT808:terminal-a' }];
|
||||
const switchedSource: AMapMassPoint[] = [{ id: 'vehicle', label: 'A', style: 0, lnglat: [113.4, 23.3], sourceToken: 'GB32960:canonical' }];
|
||||
|
||||
expect(movingPointIDs(previous, sameSource).has('vehicle')).toBe(true);
|
||||
expect(movingPointIDs(previous, switchedSource).has('vehicle')).toBe(false);
|
||||
});
|
||||
|
||||
test('uses each protocol report interval with bounded fallbacks for point motion', () => {
|
||||
expect(pointMoveDurationMs(10_000)).toBe(10_000);
|
||||
expect(pointMoveDurationMs(30_000)).toBe(30_000);
|
||||
|
||||
Reference in New Issue
Block a user