const { test } = require('node:test'); const assert = require('node:assert/strict'); const { buildFallbackClassification, AI_FALLBACK_CLASSIFICATION } = require('./fallback'); const { VALID_CLASSIFICATIONS } = require('./classification'); test('fallback e sempre seguro e marcado como tal', () => { const result = buildFallbackClassification('ai_timeout'); assert.equal(result.is_fallback, true); assert.equal(result.fallback_reason, 'ai_timeout'); assert.equal(result.confidence, 0); assert.ok(result.reason.includes('Fallback')); }); test('fallback NUNCA finge ser ACTIONABLE_NOW -- usa AI_FALLBACK, um estado tecnico explicito', () => { const result = buildFallbackClassification('ai_error'); assert.equal(result.classification, AI_FALLBACK_CLASSIFICATION); assert.notEqual(result.classification, 'ACTIONABLE_NOW'); assert.equal(result.actionable_today, false); }); test('AI_FALLBACK nunca e uma classe que a propria IA pode retornar (fica fora do schema enviado a OpenAI)', () => { assert.ok(!VALID_CLASSIFICATIONS.includes(AI_FALLBACK_CLASSIFICATION)); }); test('AI_MAX_CANDIDATES gera AI_FALLBACK, nao ACTIONABLE_NOW', () => { const result = buildFallbackClassification('ai_max_candidates_cap'); assert.equal(result.classification, AI_FALLBACK_CLASSIFICATION); assert.equal(result.fallback_reason, 'ai_max_candidates_cap'); }); test('erro de IA gera AI_FALLBACK', () => { assert.equal(buildFallbackClassification('ai_error').classification, AI_FALLBACK_CLASSIFICATION); }); test('IA desligada gera AI_FALLBACK', () => { assert.equal(buildFallbackClassification('ai_disabled').classification, AI_FALLBACK_CLASSIFICATION); }); test('JSON invalido gera AI_FALLBACK', () => { assert.equal(buildFallbackClassification('invalid_json').classification, AI_FALLBACK_CLASSIFICATION); });