import { assertEquals } from "jsr:@std/assert@1"; import { canonicalRiskCode, formatNss, normalizeWorker, pipelineLabelFor, titleCase, validateWorkerFields, } from "./mx.ts"; Deno.test("normaliza identidad y conserva el código real de riesgo", () => { const worker = normalizeWorker({ first_name: " JUAN CARLOS ", last_name_p: "DE LA CRUZ", last_name_m: "PÉREZ", curp: "abcd010101hqrxxx01", rfc: "abcd010101ab1", nss: "12 34 56 78 901", phone: "998 100 2000", email: "PERSONA@EJEMPLO.COM", address: "AVENIDA PRINCIPAL 10", hire_type: "arctec", position: "AYUDANTE GENERAL", risk_code: "negro", work_type: "n", daily_wage: 500, }); assertEquals(worker.first_name, "Juan Carlos"); assertEquals(worker.last_name_p, "De la Cruz"); assertEquals(worker.email, "persona@ejemplo.com"); assertEquals(worker.risk_code, "negro"); assertEquals(worker.nss, "12345678901"); }); Deno.test("riesgo semántico solo se convierte cuando llega como nivel", () => { assertEquals(canonicalRiskCode("alto"), "rojo"); assertEquals(canonicalRiskCode("medio"), "amarillo"); assertEquals(canonicalRiskCode("bajo"), "verde"); assertEquals(canonicalRiskCode("naranja"), "naranja"); }); Deno.test("campos laborales obligatorios permanecen validados", () => { const errors = validateWorkerFields({}); assertEquals(errors.first_name, "Nombre obligatorio"); assertEquals(errors.hire_type, undefined); assertEquals(errors.position, "Cargo obligatorio"); assertEquals(errors.daily_wage, "Jornal obligatorio"); }); Deno.test("utilidades de texto mantienen formato mexicano", () => { assertEquals(titleCase("MARÍA DE LOS ÁNGELES"), "María de los Ángeles"); assertEquals(formatNss("12-34-56-78901"), "12345678901"); assertEquals(pipelineLabelFor("listo_gafete"), "Listo gafete"); });