CI / Build & Quality Checks (pull_request) Successful in 3m19s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 11s
CI / Playwright smoke (e2e) (pull_request) Successful in 14m32s
The composer's location button sent the exact position (6 decimals) from a single click once the browser permission had been granted, discarding the fix's accuracy, so a ±3.5 km Wi-Fi/IP fix was shown as exact. - ShareLocationDialog: "Share your location?" with the coordinates and ±accuracy, a "Check on OpenStreetMap" link, and Cancel / Send approximate (~1 km) / Send. Focus starts on Cancel; Esc cancels. - utils/geoShare.ts (unit-tested): RFC 5870 geo URI with `;u=` accuracy; approximate shares round to 2 decimals and never claim better than 1 km. - Location cards show the ± when the event carries `u=`. - The toolbar icon is a pin instead of the globe. Verified headless (fix 40.748817,-73.985428 ±3500 m): the click opens the dialog and sends nothing; Cancel/Esc send nothing; Send approximate → geo:40.75,-73.99;u=3500; Send → geo:40.748817,-73.985428;u=3500; the card reads "40.74882, -73.98543 (±3.5 km)". Fixes #340 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
31 lines
1.3 KiB
TypeScript
31 lines
1.3 KiB
TypeScript
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { buildGeoUri, formatAccuracy } from './geoShare';
|
|
import { parseGeoUri } from './common';
|
|
|
|
test('buildGeoUri: exact share keeps 6 decimals and adds the accuracy as u=', () => {
|
|
assert.equal(buildGeoUri(40.748817, -73.985428, 12.4), 'geo:40.748817,-73.985428;u=12');
|
|
assert.equal(buildGeoUri(40.748817, -73.985428), 'geo:40.748817,-73.985428');
|
|
assert.equal(buildGeoUri(40.748817, -73.985428, Number.NaN), 'geo:40.748817,-73.985428');
|
|
});
|
|
|
|
test('buildGeoUri: approximate share rounds to ~1 km and never claims better than 1 km', () => {
|
|
assert.equal(buildGeoUri(40.748817, -73.985428, 12, true), 'geo:40.75,-73.99;u=1000');
|
|
assert.equal(buildGeoUri(40.748817, -73.985428, 3500, true), 'geo:40.75,-73.99;u=3500');
|
|
});
|
|
|
|
test('buildGeoUri output still parses with the renderer', () => {
|
|
const loc = parseGeoUri(buildGeoUri(51.5, -0.12, 30));
|
|
assert.ok(loc);
|
|
assert.equal(parseFloat(loc.latitude), 51.5);
|
|
assert.equal(parseFloat(loc.longitude), -0.12);
|
|
});
|
|
|
|
test('formatAccuracy', () => {
|
|
assert.equal(formatAccuracy(12.4), '±12 m');
|
|
assert.equal(formatAccuracy(3500), '±3.5 km');
|
|
assert.equal(formatAccuracy(25000), '±25 km');
|
|
assert.equal(formatAccuracy(undefined), undefined);
|
|
assert.equal(formatAccuracy(0), undefined);
|
|
});
|