mirror of
https://github.com/jkingsman/Remote-Terminal-for-MeshCore.git
synced 2026-08-08 17:53:10 +02:00
Add repeater region discover
This commit is contained in:
@@ -12,6 +12,7 @@ import type {
|
||||
RadioConfigUpdate,
|
||||
RadioDiscoveryResponse,
|
||||
RadioDiscoveryTarget,
|
||||
RadioRegionDiscoveryResponse,
|
||||
StatisticsResponse,
|
||||
} from '../types';
|
||||
import type { SettingsSection } from '../components/settings/settingsConstants';
|
||||
@@ -93,6 +94,7 @@ function renderModal(overrides?: {
|
||||
meshDiscovery?: RadioDiscoveryResponse | null;
|
||||
meshDiscoveryLoadingTarget?: RadioDiscoveryTarget | null;
|
||||
onDiscoverMesh?: (target: RadioDiscoveryTarget) => Promise<void>;
|
||||
regionDiscovery?: RadioRegionDiscoveryResponse | null;
|
||||
contacts?: Contact[];
|
||||
trackedTelemetryRepeaters?: string[];
|
||||
open?: boolean;
|
||||
@@ -113,6 +115,7 @@ function renderModal(overrides?: {
|
||||
const onReconnect = overrides?.onReconnect ?? vi.fn(async () => {});
|
||||
const onAdvertise = overrides?.onAdvertise ?? vi.fn(async (_mode: RadioAdvertMode) => {});
|
||||
const onDiscoverMesh = overrides?.onDiscoverMesh ?? vi.fn(async () => {});
|
||||
const onDiscoverRegions = vi.fn(async () => {});
|
||||
|
||||
const commonProps = {
|
||||
open: overrides?.open ?? true,
|
||||
@@ -131,6 +134,9 @@ function renderModal(overrides?: {
|
||||
meshDiscovery: overrides?.meshDiscovery ?? null,
|
||||
meshDiscoveryLoadingTarget: overrides?.meshDiscoveryLoadingTarget ?? null,
|
||||
onDiscoverMesh,
|
||||
regionDiscovery: overrides?.regionDiscovery ?? null,
|
||||
regionDiscoveryLoading: false,
|
||||
onDiscoverRegions,
|
||||
onHealthRefresh: vi.fn(async () => {}),
|
||||
onRefreshAppSettings,
|
||||
contacts: overrides?.contacts,
|
||||
@@ -158,6 +164,7 @@ function renderModal(overrides?: {
|
||||
onReconnect,
|
||||
onAdvertise,
|
||||
onDiscoverMesh,
|
||||
onDiscoverRegions,
|
||||
view,
|
||||
};
|
||||
}
|
||||
@@ -335,6 +342,67 @@ describe('SettingsModal', () => {
|
||||
expect(screen.getByText('8s listen window')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('discovers regions using repeaters from the last mesh sweep', async () => {
|
||||
const { onDiscoverRegions } = renderModal({
|
||||
meshDiscovery: {
|
||||
target: 'all',
|
||||
duration_seconds: 8,
|
||||
results: [
|
||||
{
|
||||
public_key: '11'.repeat(32),
|
||||
name: 'RPT-A',
|
||||
node_type: 'repeater',
|
||||
heard_count: 1,
|
||||
local_snr: 5,
|
||||
local_rssi: -100,
|
||||
remote_snr: 3,
|
||||
},
|
||||
{
|
||||
public_key: '22'.repeat(32),
|
||||
name: 'Sensor',
|
||||
node_type: 'sensor',
|
||||
heard_count: 1,
|
||||
local_snr: 5,
|
||||
local_rssi: -100,
|
||||
remote_snr: 3,
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
openRadioSection();
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: 'Discover Regions' }));
|
||||
|
||||
// Only the repeater's key is passed, not the sensor's.
|
||||
await waitFor(() => {
|
||||
expect(onDiscoverRegions).toHaveBeenCalledWith(['11'.repeat(32)]);
|
||||
});
|
||||
});
|
||||
|
||||
it('adds discovered regions to the known-regions field', () => {
|
||||
renderModal({
|
||||
regionDiscovery: {
|
||||
repeaters_queried: 2,
|
||||
repeaters_answered: 2,
|
||||
regions: ['nl-gr', 'de-by'],
|
||||
results: [],
|
||||
},
|
||||
});
|
||||
openRadioSection();
|
||||
|
||||
expect(screen.getByText('2/2 repeaters answered — 2 regions found')).toBeInTheDocument();
|
||||
|
||||
const knownRegions = screen.getByLabelText(
|
||||
'Known Regions (for decoding)'
|
||||
) as HTMLTextAreaElement;
|
||||
fireEvent.change(knownRegions, { target: { value: 'nl-gr' } });
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: 'Add to Known Regions' }));
|
||||
|
||||
// Existing 'nl-gr' preserved, only the new 'de-by' appended.
|
||||
expect(knownRegions.value).toBe('nl-gr\nde-by');
|
||||
});
|
||||
|
||||
it('saves advert location source through radio config save', async () => {
|
||||
const { onSave } = renderModal();
|
||||
openRadioSection();
|
||||
|
||||
Reference in New Issue
Block a user