Files
Gustavo Santos e322cec92b chore: import coordenador (subtree)
git-subtree-dir: coordenador
git-subtree-mainline: facbe2e340
git-subtree-split: ce7af94d55
2026-10-01 14:25:55 -03:00

42 lines
1.8 KiB
JavaScript

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