import { describe, it, expect } from 'vitest'; import { normalizarUrl } from '../src/core/pipeline.js'; import { acharVerbete } from '../src/knowledge/tecnologias.js'; import { montarTrilha } from '../src/knowledge/trilhas.js'; import type { Detection } from '../src/core/types.js'; describe('normalizarUrl', () => { it('adiciona https:// quando ausente', () => { expect(normalizarUrl('exemplo.com')).toBe('https://exemplo.com'); }); it('preserva o protocolo existente', () => { expect(normalizarUrl('http://exemplo.com')).toBe('http://exemplo.com'); }); }); describe('base de conhecimento', () => { it('acha verbete por sinônimo', () => { expect(acharVerbete('nextjs')?.nome).toBe('Next.js'); }); it('retorna indefinido para desconhecido', () => { expect(acharVerbete('tecnologia-inexistente-xyz')).toBeUndefined(); }); }); describe('trilha de estudo', () => { it('ancora a trilha no framework detectado', () => { const deteccoes: Detection[] = [ { nome: 'Next.js', categorias: ['Web frameworks'], confianca: 100, faixa: 'praticamente confirmado', evidencias: [] }, { nome: 'React', categorias: ['JavaScript frameworks'], confianca: 60, faixa: 'possível', evidencias: [] }, ]; const trilha = montarTrilha(deteccoes); expect(trilha[0]).toBe('HTML semântico'); expect(trilha).toContain('componentes React'); }); });