const { test } = require('node:test'); const assert = require('node:assert/strict'); const { buildContextFingerprint, stableStringify } = require('./hash'); function baseTicket(overrides) { return Object.assign({ status: 2, tecnico_atribuido: 'Wagner', categoria: 'Rede', entidade: 'Matriz', followups: [{ id: 1, date: '2026-08-20 10:00:00' }], tasks: [{ id: 1, status: 1, date: '2026-08-19 09:00:00' }], dias_aberto: 10, dias_sem_interacao: 3, }, overrides); } test('alterar apenas dias_aberto/dias_sem_interacao NAO muda o hash', () => { const a = buildContextFingerprint(baseTicket({ dias_aberto: 10, dias_sem_interacao: 3 })); const b = buildContextFingerprint(baseTicket({ dias_aberto: 11, dias_sem_interacao: 4 })); assert.equal(a, b); }); test('novo followup MUDA o hash', () => { const a = buildContextFingerprint(baseTicket({})); const b = buildContextFingerprint(baseTicket({ followups: [{ id: 1, date: '2026-08-20 10:00:00' }, { id: 2, date: '2026-08-21 08:00:00' }] })); assert.notEqual(a, b); }); test('mudanca de tecnico MUDA o hash', () => { const a = buildContextFingerprint(baseTicket({ tecnico_atribuido: 'Wagner' })); const b = buildContextFingerprint(baseTicket({ tecnico_atribuido: 'Eric' })); assert.notEqual(a, b); }); test('stableStringify ignora ordem de chaves', () => { assert.equal(stableStringify({ b: 1, a: 2 }), stableStringify({ a: 2, b: 1 })); });