Files
GTI_GERENCIADOR_FISCAL/tests/test_normalize.py
T
GustavoandClaude Sonnet 5 dea9dc4401 fix: corrige achados da revisao final (DDI idempotente, mascara DDI 12/13 digitos, status DV, validacao no load, autofill dispara mascaras)
Endereca 5 achados da revisao final de branch:
- Important #1: normalizar_telefone_com_ddi agora e idempotente (nao duplica 55 independente do tamanho)
- Important #2: mascara de telefone detecta DDI colado por tamanho total (12/13 digitos), nao mais so pelo campo especifico
- Minor #3: buscarCnpj pula lookup na Receita quando DV do CNPJ e invalido, preservando a mensagem de erro
- Minor #4: detectarEValidarDocumento roda uma vez no carregamento da pagina
- Minor #5: autofill da Receita dispara evento input para acionar as mascaras de UF/CEP/TELEFONE

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-14 12:31:20 -03:00

125 lines
3.8 KiB
Python

"""
Fixtures de CPF/CNPJ verificadas manualmente:
- CPF "11144477735": DV clássico módulo 11, exemplo público amplamente usado
em validadores de CPF.
- CNPJ numérico "11222333000181": exemplo público amplamente usado em
validadores de CNPJ.
- CNPJ alfanumérico "00000000E08G12": primeiro CNPJ alfanumérico realmente
emitido no Brasil (Banco do Bradil, 02/08/2026) — confirma que o algoritmo
bate com um caso real, não só um exemplo didático.
"""
from app.normalize import (
normalizar_documento,
normalizar_telefone,
validar_dv_cpf,
validar_dv_cnpj,
)
def test_normaliza_cpf_com_mascara():
doc, valido, tipo = normalizar_documento("111.444.777-35")
assert doc == "11144477735"
assert valido is True
assert tipo == "CPF"
def test_normaliza_cnpj_numerico_com_mascara():
doc, valido, tipo = normalizar_documento("11.222.333/0001-81")
assert doc == "11222333000181"
assert valido is True
assert tipo == "CNPJ"
def test_normaliza_cnpj_alfanumerico_com_mascara():
doc, valido, tipo = normalizar_documento("00.000.000/E08G-12")
assert doc == "00000000E08G12"
assert valido is True
assert tipo == "CNPJ"
def test_documento_invalido_tamanho_errado():
doc, valido, tipo = normalizar_documento("123")
assert valido is False
assert tipo is None
def test_documento_none():
doc, valido, tipo = normalizar_documento(None)
assert doc == ""
assert valido is False
assert tipo is None
def test_normaliza_telefone():
assert normalizar_telefone("(75) 99909-1780") == "75999091780"
assert normalizar_telefone(None) == ""
def test_validar_dv_cpf_correto():
assert validar_dv_cpf("11144477735") is True
def test_validar_dv_cpf_incorreto():
assert validar_dv_cpf("11144477734") is False
def test_validar_dv_cnpj_numerico_correto():
assert validar_dv_cnpj("11222333000181") is True
def test_validar_dv_cnpj_numerico_incorreto():
assert validar_dv_cnpj("11222333000180") is False
def test_validar_dv_cnpj_alfanumerico_correto():
# Primeiro CNPJ alfanumérico real emitido no Brasil.
assert validar_dv_cnpj("00000000E08G12") is True
def test_validar_dv_cnpj_alfanumerico_incorreto():
assert validar_dv_cnpj("00000000E08G13") is False
from app.normalize import normalizar_telefone_com_ddi, normalizar_uf, normalizar_cep
def test_normaliza_telefone_com_ddi_prefixa_55_quando_ausente():
assert normalizar_telefone_com_ddi("(75) 3333-4444") == "557533334444"
assert normalizar_telefone_com_ddi("(75) 99909-1780") == "5575999091780"
def test_normaliza_telefone_com_ddi_nao_duplica_55_ja_presente():
assert normalizar_telefone_com_ddi("55 75 99909-1780") == "5575999091780"
assert normalizar_telefone_com_ddi("5575333344440") != "555575333344440"
def test_normaliza_telefone_com_ddi_vazio_continua_vazio():
assert normalizar_telefone_com_ddi("") == ""
assert normalizar_telefone_com_ddi(None) == ""
def test_normaliza_telefone_com_ddi_e_idempotente():
"""Aplicar a função duas vezes seguidas nunca deve dobrar o DDI."""
casos = ["(75) 3333-4444", "(75) 99909-1780", "5575999091780", "3333-4444", ""]
for bruto in casos:
uma_vez = normalizar_telefone_com_ddi(bruto)
duas_vezes = normalizar_telefone_com_ddi(uma_vez)
assert duas_vezes == uma_vez, f"não é idempotente para {bruto!r}: {uma_vez!r} -> {duas_vezes!r}"
def test_normaliza_uf_maiusculas_e_trunca():
assert normalizar_uf("ba") == "BA"
assert normalizar_uf(" sp ") == "SP"
assert normalizar_uf("SAO") == "SA"
def test_normaliza_uf_remove_numeros_e_simbolos():
assert normalizar_uf("B4!") == "B"
assert normalizar_uf(None) == ""
def test_normaliza_cep_so_digitos_e_trunca():
assert normalizar_cep("44430-174") == "44430174"
assert normalizar_cep("44.430-174-extra") == "44430174"
assert normalizar_cep(None) == ""