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();
});
});