all repos — red-anatomia @ 43cc40161c75c7c9bb5bef2c1ce2d551b7f24484

red-anatomia

test/pipeline.test.ts (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
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');
  });
});