85 lines
2.5 KiB
TypeScript
85 lines
2.5 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
import { computeAssociationDirectoryGeoUpdate, computeAssociationDirectoryGeoUpdateForPrecision, getPublicMapCoordinates } from "./associationGeo";
|
|
|
|
describe("associationGeo", () => {
|
|
afterEach(() => {
|
|
vi.restoreAllMocks();
|
|
});
|
|
|
|
it("returns public coordinates for visible entries and keeps hidden precision visible by policy", () => {
|
|
const visible = getPublicMapCoordinates({
|
|
latitude: "5.123456",
|
|
longitude: "-52.123456",
|
|
geoPrecision: "commune_center",
|
|
} as any);
|
|
|
|
expect(visible).toEqual({
|
|
latitude: 5.123456,
|
|
longitude: -52.123456,
|
|
precision: "commune_center",
|
|
});
|
|
|
|
const hidden = getPublicMapCoordinates({
|
|
latitude: "5.123456",
|
|
longitude: "-52.123456",
|
|
geoPrecision: "hidden",
|
|
} as any);
|
|
|
|
expect(hidden).toEqual({
|
|
latitude: 5.123456,
|
|
longitude: -52.123456,
|
|
precision: "exact_address",
|
|
});
|
|
});
|
|
|
|
it("geocodes the address when exact precision is requested", async () => {
|
|
const fetchMock = vi
|
|
.spyOn(globalThis, "fetch")
|
|
.mockResolvedValueOnce({
|
|
ok: true,
|
|
json: async () => ({
|
|
features: [
|
|
{
|
|
geometry: { coordinates: [-52.61, 5.08] },
|
|
properties: { label: "Adresse test" },
|
|
},
|
|
],
|
|
}),
|
|
} as Response);
|
|
|
|
const result = await computeAssociationDirectoryGeoUpdateForPrecision({
|
|
id: 1,
|
|
nomAssociation: "Association Test",
|
|
adresse: "1 rue Test",
|
|
codePostal: "97310",
|
|
ville: "Kourou",
|
|
} as any, null, "exact_address");
|
|
|
|
expect(fetchMock).toHaveBeenCalledTimes(1);
|
|
expect(result.geoSource).toBe("adresse_gouv");
|
|
expect(result.latitude).toBe("5.080000");
|
|
expect(result.longitude).toBe("-52.610000");
|
|
});
|
|
|
|
it("falls back to commune center by default", async () => {
|
|
vi.spyOn(globalThis, "fetch")
|
|
.mockResolvedValueOnce({
|
|
ok: true,
|
|
json: async () => ([
|
|
{ nom: "Kourou", centre: { coordinates: [-52.7767, 4.9085] } },
|
|
]),
|
|
} as Response);
|
|
|
|
const result = await computeAssociationDirectoryGeoUpdate({
|
|
id: 1,
|
|
nomAssociation: "Association Test",
|
|
adresse: "Adresse introuvable",
|
|
codePostal: "97310",
|
|
ville: "Kourou",
|
|
} as any);
|
|
|
|
expect(result.geoSource).toBe("commune_center");
|
|
expect(result.latitude).toBe("4.908500");
|
|
expect(result.longitude).toBe("-52.776700");
|
|
});
|
|
});
|