import { test } from "node:test"; import assert from "node:assert/strict"; import { normalizarTipo, formaDeMensajes } from "./conversations.ts"; test("normalizarTipo: la API devuelve número o cadena según el endpoint", () => { // MEDIDO (hallazgo 24): `/conversations/{id}` da un número y el buscador una // cadena `TYPE_SMS`. Es la misma información con dos formas. assert.equal(normalizarTipo("TYPE_SMS"), "SMS"); assert.equal(normalizarTipo("TYPE_EMAIL"), "Email"); assert.equal(normalizarTipo(1), "Phone"); assert.equal(normalizarTipo(2), "Email"); assert.equal(normalizarTipo(3), "FB"); assert.equal(normalizarTipo(undefined), "Desconocido"); assert.equal(normalizarTipo(""), "Desconocido"); }); test("normalizarTipo: un tipo desconocido no se traga, se ve", () => { assert.equal(normalizarTipo("TYPE_TIKTOK"), "TIKTOK"); assert.equal(normalizarTipo(99), "Desconocido"); }); test("formaDeMensajes: desanida la respuesta real, que trae messages.messages", () => { const r = formaDeMensajes({ messages: { messages: [{ id: "m1" }], lastMessageId: "m1", nextPage: true }, }); assert.equal(r.mensajes.length, 1); assert.equal(r.lastMessageId, "m1"); assert.equal(r.hayMas, true); }); test("formaDeMensajes: tolera la forma plana por si la API cambia", () => { const r = formaDeMensajes({ messages: [{ id: "m1" }] }); assert.equal(r.mensajes.length, 1); assert.equal(r.hayMas, false); assert.equal(r.lastMessageId, null); }); test("formaDeMensajes: una respuesta vacía no revienta", () => { const r = formaDeMensajes({}); assert.deepEqual(r.mensajes, []); assert.equal(r.hayMas, false); }); test("normalizarTipo reconoce los canales reales de la subcuenta", () => { // MEDIDO: los hilos reales traen TYPE_INSTAGRAM y TYPE_ACTIVITY_OPPORTUNITY. assert.equal(normalizarTipo("TYPE_INSTAGRAM"), "Instagram"); assert.equal(normalizarTipo("TYPE_ACTIVITY_OPPORTUNITY"), "Actividad"); assert.equal(normalizarTipo("TYPE_WHATSAPP"), "WhatsApp"); });