import { generateTrackingId, isValidTrackingId, } from "./tracking-id.util"; /** * Tests del Tracking ID. * Formato documentado en §08: EC-YYYYMMDD-XXXXXX */ describe("TrackingId Utils (doc §08)", () => { describe("generateTrackingId", () => { it("genera un ID con el formato EC-YYYYMMDD-XXXXXX", () => { const id = generateTrackingId(); expect(id).toMatch(/^EC-\d{8}-\d{6}$/); }); it("usa la fecha proporcionada correctamente", () => { const date = new Date("2026-05-06T00:00:00.000Z"); const id = generateTrackingId(date); // El año/mes/día depende de la zona horaria local del proceso // Solo validamos el patrón expect(id).toMatch(/^EC-\d{8}-\d{6}$/); }); it("incluye el año 2026 si se pasa esa fecha", () => { const date = new Date(2026, 4, 6); // May 6, 2026 — local const id = generateTrackingId(date); expect(id.startsWith("EC-2026")).toBe(true); }); it("genera IDs distintos en llamadas consecutivas (probabilístico)", () => { const ids = new Set(Array.from({ length: 20 }, () => generateTrackingId())); // Con 1 millón de combinaciones, 20 llamadas deben ser todas distintas expect(ids.size).toBe(20); }); it("el prefijo es siempre EC-", () => { for (let i = 0; i < 10; i++) { expect(generateTrackingId().startsWith("EC-")).toBe(true); } }); it("el sufijo siempre tiene exactamente 6 dígitos", () => { for (let i = 0; i < 10; i++) { const parts = generateTrackingId().split("-"); expect(parts[2]).toHaveLength(6); expect(/^\d{6}$/.test(parts[2])).toBe(true); } }); }); describe("isValidTrackingId", () => { it("retorna true para IDs válidos", () => { expect(isValidTrackingId("EC-20260506-082341")).toBe(true); expect(isValidTrackingId("EC-20261231-000001")).toBe(true); expect(isValidTrackingId("EC-20260101-999999")).toBe(true); }); it("retorna false para IDs inválidos", () => { expect(isValidTrackingId("EC-2026050-082341")).toBe(false); // fecha corta expect(isValidTrackingId("EC-20260506-08234")).toBe(false); // sufijo corto expect(isValidTrackingId("US-20260506-082341")).toBe(false); // prefijo incorrecto expect(isValidTrackingId("EC-20260506082341")).toBe(false); // sin separador expect(isValidTrackingId("EC-20260506-08234A")).toBe(false); // letras en sufijo expect(isValidTrackingId("")).toBe(false); }); it("los IDs generados siempre pasan la validación", () => { for (let i = 0; i < 50; i++) { expect(isValidTrackingId(generateTrackingId())).toBe(true); } }); }); });