import { describe, expect, it } from "vitest"; import ProveedorCoordenadas from "../../src/utils/ubicacion/proveedorCoordenadas.js"; describe("ProveedorCoordenadas", () => { const p = new ProveedorCoordenadas(); it("detecta pares con coma y punto decimal, signo y espacios", async () => { for (const [entrada, lat, lng] of [ ["41.3851, 2.1734", 41.3851, 2.1734], ["41,3851,2,1734", 41.3851, 2.1734], // decimales españoles con coma ["-3.7038, 40.4168", -3.7038, 40.4168], // orden invertido con signo [" 41.38 ; 2.17 ", 41.38, 2.17], // separador ; y espacios ["41,3851 2,1734", 41.3851, 2.1734], // separado por espacio ]) { expect(p.detecta(entrada), entrada).toBe(true); expect(await p.extrae(entrada), entrada).toEqual({ proveedor: "coordenadas", lat, lng }); } }); it("latitud fuera de rango → null", async () => { expect(p.detecta("91.234, 2.17")).toBe(true); // sintácticamente es un par… expect(await p.extrae("91.234, 2.17")).toBeNull(); // …pero se descarta por rango expect(await p.extrae("41.38, 181.5")).toBeNull(); }); it("no detecta textos ni URLs ni números sueltos", () => { expect(p.detecta("Calle Mayor 5, Madrid")).toBe(false); expect(p.detecta("https://maps.google.com/@41.38,2.17")).toBe(false); expect(p.detecta("41.3851")).toBe(false); expect(p.detecta("")).toBe(false); }); it("entrada no par → extrae null", async () => { expect(await p.extrae("hola mundo")).toBeNull(); }); });