from app.services.ai_rag import chunk_text, local_embedding, cosine, redact, render_prompt


def test_chunking_has_overlap_and_no_empty_chunks():
    text=('A Chemitec possui processos corporativos importantes. '*100)
    chunks=chunk_text(text,size=300,overlap=40)
    assert len(chunks)>3
    assert all(chunks)
    assert all(len(c)<=320 for c in chunks)


def test_local_embedding_is_deterministic_and_searchable():
    a=local_embedding('vendas produtos clientes')
    b=local_embedding('vendas produtos clientes')
    c=local_embedding('servidores rede infraestrutura')
    assert a==b and len(a)==256
    assert cosine(a,b)>cosine(a,c)


def test_redaction_removes_cpf_cnpj_and_email():
    text='CPF 123.456.789-10 CNPJ 12.345.678/0001-99 email pessoa@empresa.com.br'
    safe,flags=redact(text,[])
    assert '123.456.789-10' not in safe
    assert '12.345.678/0001-99' not in safe
    assert 'pessoa@empresa.com.br' not in safe
    assert flags


def test_prompt_rendering_is_declarative():
    class P: template='Analise {{question}} para {{area}}'
    assert render_prompt(P(),'margem',{'area':'diretoria'})=='Analise margem para diretoria'
