panels-origin/api/mx_test.ts
2026-08-21 16:55:01 -05:00

54 lines
1.8 KiB
TypeScript

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");
});