import { describe, expect, it } from "vitest"; import ProveedorGoogleMaps from "../../src/utils/ubicacion/proveedorGoogleMaps.js"; describe("ProveedorGoogleMaps", () => { const p = new ProveedorGoogleMaps(); it("detecta URLs de Google Maps (dominios y subdominios)", () => { expect(p.detecta("https://maps.google.com/@41.38,2.17")).toBe(true); expect(p.detecta("https://www.google.es/maps?q=41.38,2.17")).toBe(true); expect(p.detecta("https://maps.app.goo.gl/abc")).toBe(true); expect(p.detecta("https://waze.com/ul?ll=41.38,2.17")).toBe(false); expect(p.detecta("41.38, 2.17")).toBe(false); }); it("extrae del formato @lat,lng", async () => { expect(await p.extrae("https://www.google.com/maps/@41.3851,2.1734,15z")) .toEqual({ proveedor: "google-maps", lat: 41.3851, lng: 2.1734 }); }); it("extrae del formato !3d…!4d… cuando no hay @", async () => { expect(await p.extrae("https://www.google.com/maps/place/Bar/data=!4m2!3m1!1s0x0:0x0?hl=es")) .toBeNull(); // sin coordenadas en absoluto expect(await p.extrae("https://www.google.com/maps/place/Bar/data=!3d41.3851!4d2.1734")) .toEqual({ proveedor: "google-maps", lat: 41.3851, lng: 2.1734 }); }); it("extrae del formato ?q=lat,lng", async () => { expect(await p.extrae("https://www.google.com/maps?q=41.3851,-2.1734")) .toEqual({ proveedor: "google-maps", lat: 41.3851, lng: -2.1734 }); }); it("prioriza @ sobre !3d!4d (comportamiento migrado de parsearEnlaceGoogleMaps)", async () => { const r = await p.extrae("https://www.google.com/maps/place/X/@40.4168,-3.7038,17z/data=!3d40.4178!4d-3.7028"); expect(r).toEqual({ proveedor: "google-maps", lat: 40.4168, lng: -3.7038 }); }); it("enlace acortado: detecta pero no puede extraer → null", async () => { expect(await p.extrae("https://maps.app.goo.gl/AbCdEf123")).toBeNull(); }); });