- Campo universal de ubicación (Google Maps/Waze/OSM/coordenadas/dirección) sobre proveedores extensibles (src/utils/ubicacion) con resolver e inferencia inversa Nominatim (nombre/provincia pre-rellenados, alias cooficiales) - FAB flotante abajo a la derecha que abre la pasarela en un modal accesible (Escape, foco contenido, responsive); sin descripción ni puntuación; avisos de duplicado y filtro de palabras dentro del modal - Aviso PWA reposicionado: tarjeta abajo a la izquierda en móvil, botón compacto arriba a la izquierda en PC (no tapa el FAB) - Suite de pruebas: 88 unitarias/componente (vitest + RTL, offline) y 10 de integración (supertest + SQLite :memory: y Nominatim real opt-in) - CI: workflow de Gitea Actions con npm test + build en push/PR e integración manual
37 lines
1.5 KiB
JavaScript
37 lines
1.5 KiB
JavaScript
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();
|
|
});
|
|
});
|