fix(map): group collocated user markers
CI / validate (push) Successful in 5m47s
Release / release (push) Successful in 7m55s

This commit is contained in:
dmg
2026-08-01 21:24:49 -04:00
parent ebc7c7df17
commit aa0b757814
10 changed files with 176 additions and 31 deletions
+23 -1
View File
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
import { parseUserLocation, projectWorldPoint } from "./user-location-map";
import { groupMapLocations, parseUserLocation, projectWorldPoint } from "./user-location-map";
describe("user location map", () => {
it("extracts a valid approximate location from cached IP intelligence", () => {
@@ -24,6 +24,28 @@ describe("user location map", () => {
expect(parseUserLocation({ location: { city: "Unknown" } })).toBeNull();
});
it("groups users sharing approximate coordinates without hiding their identities", () => {
const groups = groupMapLocations([
{ userId: "one", nickname: "Dani (Steve)", latitude: 37.4056, longitude: -122.0775 },
{ userId: "two", nickname: "Alex (AlexMC)", latitude: 37.4057, longitude: -122.0774 },
{ userId: "three", nickname: "Sam (Notch)", latitude: 51.5, longitude: -0.12 },
]);
expect(groups).toHaveLength(2);
expect(groups[0]).toMatchObject({ count: 2, nicknames: ["Alex (AlexMC)", "Dani (Steve)"] });
expect(groups[0]?.locations.map((location) => location.userId)).toEqual(["one", "two"]);
expect(groups[1]).toMatchObject({ count: 1, nicknames: ["Sam (Notch)"] });
});
it("normalizes signed zero and the antimeridian before grouping", () => {
const groups = groupMapLocations([
{ nickname: "West", latitude: -0.004, longitude: 180 },
{ nickname: "East", latitude: 0.004, longitude: -180 },
]);
expect(groups).toHaveLength(1);
expect(groups[0]).toMatchObject({ count: 2, key: "0:-180", latitude: 0, longitude: -180 });
});
it("projects longitude and latitude into an equirectangular SVG", () => {
expect(projectWorldPoint(0, 0, 800, 400)).toEqual({ x: 400, y: 200 });
expect(projectWorldPoint(90, 180, 800, 400)).toEqual({ x: 800, y: 0 });