import { render, screen } from '@testing-library/react'; import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; import React from 'react'; vi.doMock('../google-maps-loader', () => ({ useGoogleMapsLoader: () => ({ isLoaded: true, loadError: undefined, load: async () => {} }), })); describe('EvidenceMap', () => { let EvidenceMap: any; const position = { lat: -30.034647, lng: -51.217658 }; beforeEach(async () => { vi.clearAllMocks(); EvidenceMap = (await import('./evidence-map')).EvidenceMap; global.google = { maps: { Map: vi.fn(function () { return {}; }), Circle: vi.fn(function () { return { setMap: vi.fn(), setOptions: vi.fn() }; }), Polygon: vi.fn(function () { return { setMap: vi.fn(), setOptions: vi.fn() }; }), InfoWindow: vi.fn(function () { return { open: vi.fn(), close: vi.fn(), setContent: vi.fn() }; }), event: { addListener: vi.fn(() => ({ remove: vi.fn() })), addListenerOnce: vi.fn(() => ({ remove: vi.fn() })), }, marker: { AdvancedMarkerElement: vi.fn() }, }, } as any; }); afterEach(() => { delete (global as any).google; vi.resetModules(); }); it('prints the coordinate in monospace as part of the record', () => { render(); expect(screen.getByText(/30\.034647° S/)).toBeInTheDocument(); expect(screen.getByText(/51\.217658° W/)).toBeInTheDocument(); }); it('shows the capture accuracy rather than overstating precision', () => { render(); expect(screen.getByText('±12 m')).toBeInTheDocument(); }); it('shows the integrity digest', () => { render(); expect(screen.getByText('sha256:9f3c1a')).toBeInTheDocument(); }); it('renders the capture time as a machine-readable timestamp', () => { const { container } = render( ); expect(container.querySelector('time')).toHaveAttribute('dateTime', '2026-09-04T14:32:00Z'); }); it('is not interactive — the position belongs to the record, not the viewer', () => { const { container } = render(); expect(container.querySelector('.pointer-events-none')).toBeInTheDocument(); }); it('omits optional metadata cleanly', () => { render(); expect(screen.queryByText(/Integrity/)).not.toBeInTheDocument(); expect(screen.queryByText(/Accuracy/)).not.toBeInTheDocument(); }); });