This commit is contained in:
Andras Schmelczer 2026-05-13 08:00:12 +01:00
parent 63713c3a2b
commit bd6b511f16
17 changed files with 544 additions and 377 deletions

View file

@ -54,7 +54,10 @@ describe('useHexagonSelection', () => {
requests.push(`${url.pathname}${url.search}`);
if (url.pathname === '/api/postcode-stats') {
return Promise.resolve(jsonResponse(stats(url.searchParams.has('filters') ? 0 : 4)));
const emptyPostcode = url.searchParams.get('postcode') === 'EMPTY 1AA';
return Promise.resolve(
jsonResponse(stats(url.searchParams.has('filters') || emptyPostcode ? 0 : 4))
);
}
if (url.pathname === '/api/hexagon-stats') {
@ -91,12 +94,15 @@ describe('useHexagonSelection', () => {
id: 'SW1A 1AA',
type: 'postcode',
resolution: 9,
lockedResolution: true,
});
});
expect(result.current.selectedPostcodeGeometry).toBe(postcodeGeometry);
expect(result.current.areaStats?.count).toBe(0);
expect(result.current.unfilteredAreaCount).toBe(4);
await waitFor(() => {
expect(result.current.areaStats?.count).toBe(0);
expect(result.current.unfilteredAreaCount).toBe(4);
});
expect(requests.some((url) => url.startsWith('/api/hexagon-stats'))).toBe(false);
});
@ -124,6 +130,7 @@ describe('useHexagonSelection', () => {
id: 'SW1A 1AA',
type: 'postcode',
resolution: 9,
lockedResolution: true,
});
});
@ -131,4 +138,65 @@ describe('useHexagonSelection', () => {
expect(result.current.unfilteredAreaCount).toBeNull();
expect(requests.some((url) => url.startsWith('/api/hexagon-stats'))).toBe(false);
});
it('keeps an empty postcode search selected instead of widening to hexagons', async () => {
const { result } = renderHook(() =>
useHexagonSelection({
filters: {},
features,
hexagonData: [],
resolution: 9,
usePostcodeView: true,
travelTimeEntries: [],
})
);
act(() => {
result.current.handleLocationSearch('EMPTY 1AA', postcodeGeometry, 51.505, -0.115);
});
await waitFor(() => {
expect(result.current.areaStats?.count).toBe(0);
});
expect(result.current.selectedHexagon).toEqual({
id: 'EMPTY 1AA',
type: 'postcode',
resolution: 9,
lockedResolution: true,
});
expect(result.current.selectedPostcodeGeometry).toBe(postcodeGeometry);
expect(requests.some((url) => url.startsWith('/api/hexagon-stats'))).toBe(false);
});
it('does not convert a searched postcode back to a hexagon while the map reaches postcode zoom', async () => {
const { result } = renderHook(() =>
useHexagonSelection({
filters: {},
features,
hexagonData: [],
resolution: 9,
usePostcodeView: false,
travelTimeEntries: [],
})
);
act(() => {
result.current.handleLocationSearch('SW1A 1AA', postcodeGeometry, 51.505, -0.115);
});
await waitFor(() => {
expect(result.current.areaStats?.count).toBe(4);
});
expect(result.current.selectedHexagon).toEqual({
id: 'SW1A 1AA',
type: 'postcode',
resolution: 9,
lockedResolution: true,
});
expect(result.current.selectedPostcodeGeometry).toBe(postcodeGeometry);
expect(requests.some((url) => url.startsWith('/api/postcode/'))).toBe(false);
expect(requests.some((url) => url.startsWith('/api/hexagon-stats'))).toBe(false);
});
});