TypeScript 87.7%
CSS 12.3%
1/**2 * Author: Simon-Pierre Boucher3 * Contact: contact@spboucher.ai4 * Project: Groupe Ka / Ka Maps5 */67import { describe, expect, it } from "vitest";8import { cameraFromParams, cameraToParams } from "../src/utils/url.js";910describe("camera URL state", () => {11 it("round-trips lat/lng/zoom", () => {12 const params = cameraToParams({ lat: 46.8139, lng: -71.208, zoom: 13 });13 expect(params.get("lat")).toBe("46.81390");14 expect(params.get("lng")).toBe("-71.20800");15 expect(params.get("zoom")).toBe("13");16 expect(cameraFromParams(params)).toEqual({ lat: 46.8139, lng: -71.208, zoom: 13 });17 });1819 it("preserves unrelated params", () => {20 const base = new URLSearchParams("city=Québec&view=carte");21 const params = cameraToParams({ lat: 46.8, lng: -71.2, zoom: 12.25 }, base);22 expect(params.get("city")).toBe("Québec");23 expect(params.get("zoom")).toBe("12.25");24 });2526 it("returns null on malformed or missing values", () => {27 expect(cameraFromParams(new URLSearchParams(""))).toBeNull();28 expect(cameraFromParams(new URLSearchParams("lat=x&lng=1&zoom=2"))).toBeNull();29 expect(cameraFromParams(new URLSearchParams("lat=99&lng=1&zoom=2"))).toBeNull();30 });3132 it("clamps zoom into [0,22]", () => {33 expect(34 cameraFromParams(new URLSearchParams("lat=46&lng=-71&zoom=40"))?.zoom,35 ).toBe(22);36 });37});38