Files
gods-eye-view/src/locationStatus.test.mjs
T

76 lines
2.6 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import { addressSegments, locationMiniStatus } from './locationStatus.js';
const NEW_YORK = {
name: 'New York',
pois: [{ name: 'Statue of Liberty' }, { name: 'Empire State Building' }],
};
test('a preset city reports its framed POI', () => {
assert.deepEqual(
locationMiniStatus({ city: NEW_YORK, currentPoi: { name: 'Empire State Building' } }),
{ city: '📍 New York', poi: 'Empire State Building' },
);
});
test('a preset city with no framed POI falls back to its first POI', () => {
assert.deepEqual(
locationMiniStatus({ city: NEW_YORK }),
{ city: '📍 New York', poi: 'Statue of Liberty' },
);
});
test('a free-text search reports the destination, never the empty placeholder', () => {
// The bug: a searched destination left the readout on "Location: --"
// because only the preset-city path was rendered.
assert.deepEqual(
locationMiniStatus({ searchedLabel: 'Tokyo, Japan' }),
{ city: '📍 Tokyo', poi: 'Japan' },
);
assert.deepEqual(
locationMiniStatus({
searchedLabel: 'Tokyo Tower, 4 Chome-2-8 Shibakoen, Minato City, Tokyo 105-0011, Japan',
}),
{
city: '📍 Tokyo Tower',
poi: '4 Chome-2-8 Shibakoen, Minato City, Tokyo 105-0011, Japan',
},
);
});
test('a single-segment geocode says it was searched rather than inventing context', () => {
assert.deepEqual(
locationMiniStatus({ searchedLabel: 'Japan' }),
{ city: '📍 Japan', poi: 'Searched location' },
);
});
test('a preset city outranks a stale searched label', () => {
assert.deepEqual(
locationMiniStatus({ city: NEW_YORK, searchedLabel: 'Tokyo, Japan' }),
{ city: '📍 New York', poi: 'Statue of Liberty' },
);
});
test('nothing selected keeps the honest empty placeholder', () => {
const empty = { city: '📍 Location: --', poi: 'Landmark: --' };
assert.deepEqual(locationMiniStatus(), empty);
assert.deepEqual(locationMiniStatus({ city: null, searchedLabel: '' }), empty);
assert.deepEqual(locationMiniStatus({ searchedLabel: ' , , ' }), empty);
assert.deepEqual(locationMiniStatus({ searchedLabel: null }), empty);
});
test('a city record without a usable name is not treated as a preset', () => {
assert.deepEqual(
locationMiniStatus({ city: { pois: [] }, searchedLabel: 'Kyoto, Japan' }),
{ city: '📍 Kyoto', poi: 'Japan' },
);
});
test('address segments drop empties and surrounding whitespace', () => {
assert.deepEqual(addressSegments(' Tokyo ,, Japan '), ['Tokyo', 'Japan']);
assert.deepEqual(addressSegments(undefined), []);
});