From ae237eb2b4ddad7c817acbab354351d3969154a8 Mon Sep 17 00:00:00 2001 From: Shadowbroker <43977454+BigBodyCobain@users.noreply.github.com> Date: Thu, 20 Aug 2026 21:00:12 -0600 Subject: [PATCH] test(search): cover visible supplemental map assets --- .../components/FindLocateBar.test.tsx | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 frontend/src/__tests__/components/FindLocateBar.test.tsx diff --git a/frontend/src/__tests__/components/FindLocateBar.test.tsx b/frontend/src/__tests__/components/FindLocateBar.test.tsx new file mode 100644 index 0000000..6fcd7e9 --- /dev/null +++ b/frontend/src/__tests__/components/FindLocateBar.test.tsx @@ -0,0 +1,78 @@ +import React from 'react'; +import { cleanup, fireEvent, render, screen } from '@testing-library/react'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; + +import FindLocateBar from '@/components/FindLocateBar'; +import { getDefaultActiveLayers, saveActiveLayers } from '@/lib/layerPreferences'; + +const mockState = vi.hoisted(() => ({ + data: {} as Record, +})); + +vi.mock('@/hooks/useDataStore', () => ({ + useDataKeys: () => mockState.data, +})); + +vi.mock('@/i18n', () => ({ + useTranslation: () => ({ t: () => 'Find / Locate' }), +})); + +describe('FindLocateBar supplemental visible-layer search', () => { + beforeEach(() => { + localStorage.clear(); + mockState.data = { + commercial_flights: [], + private_flights: [], + private_jets: [], + military_flights: [], + tracked_flights: [], + ships: [], + fishing_activity: [ + { + id: 'gfw-rauda', + type: 'fishing', + lat: 57.1, + lng: 21.4, + start: '2026-08-20T00:00:00Z', + end: '2026-08-20T01:00:00Z', + vessel_id: 'v-1', + vessel_ssvid: '275123456', + vessel_name: 'RAUDA', + vessel_flag: 'LVA', + duration_hrs: 1, + }, + ], + satellites: [], + trains: [], + military_bases: [], + kiwisdr: [], + }; + }); + + afterEach(() => { + cleanup(); + localStorage.clear(); + }); + + it('finds a fishing vessel while the fishing layer is visible', async () => { + const onLocate = vi.fn(); + render(); + + fireEvent.change(screen.getByRole('textbox'), { target: { value: 'RAUDA' } }); + + const result = await screen.findByText('RAUDA'); + expect(result).toBeTruthy(); + fireEvent.click(result); + expect(onLocate).toHaveBeenCalledWith(57.1, 21.4, 'fishing-gfw-rauda', 'fishing_activity'); + }); + + it('does not surface assets from a hidden supplemental layer', async () => { + saveActiveLayers({ ...getDefaultActiveLayers(), fishing_activity: false }); + render(); + + fireEvent.change(screen.getByRole('textbox'), { target: { value: 'RAUDA' } }); + + expect(await screen.findByText('NO MATCHING ASSETS')).toBeTruthy(); + expect(screen.queryByText('RAUDA')).toBeNull(); + }); +});