/** * Author: Simon-Pierre Boucher * Contact: contact@spboucher.ai * Project: Groupe Ka / Ka Maps */ import { describe, expect, it } from "vitest"; import { cameraFromParams, cameraToParams } from "../src/utils/url.js"; describe("camera URL state", () => { it("round-trips lat/lng/zoom", () => { const params = cameraToParams({ lat: 46.8139, lng: -71.208, zoom: 13 }); expect(params.get("lat")).toBe("46.81390"); expect(params.get("lng")).toBe("-71.20800"); expect(params.get("zoom")).toBe("13"); expect(cameraFromParams(params)).toEqual({ lat: 46.8139, lng: -71.208, zoom: 13 }); }); it("preserves unrelated params", () => { const base = new URLSearchParams("city=Québec&view=carte"); const params = cameraToParams({ lat: 46.8, lng: -71.2, zoom: 12.25 }, base); expect(params.get("city")).toBe("Québec"); expect(params.get("zoom")).toBe("12.25"); }); it("returns null on malformed or missing values", () => { expect(cameraFromParams(new URLSearchParams(""))).toBeNull(); expect(cameraFromParams(new URLSearchParams("lat=x&lng=1&zoom=2"))).toBeNull(); expect(cameraFromParams(new URLSearchParams("lat=99&lng=1&zoom=2"))).toBeNull(); }); it("clamps zoom into [0,22]", () => { expect( cameraFromParams(new URLSearchParams("lat=46&lng=-71&zoom=40"))?.zoom, ).toBe(22); }); });