import { test } from "node:test"; import assert from "node:assert/strict"; import { mapAtribucion, nombreDe } from "./contacts.ts"; test("aplana la atribución real que devuelve el CRM", () => { // Este objeto es una captura literal de un contacto real de la subcuenta. const a = mapAtribucion({ id: "x", source: "WhatsApp", attributionSource: { sessionSource: "Paid Social", medium: "instagram", mediumId: "28379457221686971", campaign: "Servicios-Interaccion-WhatsApp", utmMedium: "Uñas-Interaccion-WA", utmContent: "Post - Uñas - WA", campaignId: "120249003827580681", adId: "120249003827530681", }, }); assert.equal(a.crm_source, "WhatsApp"); assert.equal(a.attr_session_source, "Paid Social"); assert.equal(a.attr_medium, "instagram"); assert.equal(a.attr_campaign, "Servicios-Interaccion-WhatsApp"); assert.equal(a.attr_campaign_id, "120249003827580681"); assert.equal(a.attr_ad_id, "120249003827530681"); }); test("«campaign» gana a «utmCampaign»", () => { // No es un capricho de orden: el buscador de contactos del CRM descarta // `utmCampaign` y conserva `campaign`. Leerlos al revés deja la campaña // vacía en la mitad de los contactos. const a = mapAtribucion({ id: "x", attributionSource: { campaign: "la_buena", utmCampaign: "la_descartada" }, }); assert.equal(a.attr_campaign, "la_buena"); }); test("cae a utmCampaign cuando campaign no viene", () => { const a = mapAtribucion({ id: "x", attributionSource: { utmCampaign: "solo_esta" } }); assert.equal(a.attr_campaign, "solo_esta"); }); test("una atribución vacía no inventa valores", () => { const a = mapAtribucion({ id: "x" }); assert.equal(a.attr_campaign, null); assert.equal(a.attr_session_source, null); assert.equal(a.crm_source, null); }); test("las cadenas vacías cuentan como ausencia, no como valor", () => { const a = mapAtribucion({ id: "x", attributionSource: { campaign: "", utmCampaign: "buena" } }); assert.equal(a.attr_campaign, "buena"); }); test("el nombre sale de los tres orígenes que trae el CRM, en orden", () => { assert.equal(nombreDe({ id: "1", firstName: "Ana", lastName: "Ruiz" }), "Ana Ruiz"); assert.equal(nombreDe({ id: "2", firstName: "Ana" }), "Ana"); assert.equal(nombreDe({ id: "3", contactName: "Ana R." }), "Ana R."); assert.equal(nombreDe({ id: "4", email: "ana@x.mx" }), "ana@x.mx"); assert.equal(nombreDe({ id: "5" }), "Sin nombre"); });