""" 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) == ""