Files
GTI_GERENCIADOR_FISCAL/tests/test_cnpj_lookup.py
T
Gustavo 3158a416a9 feat: preenchimento automatico de dados do cliente a partir do CNPJ
Ao sair do campo CNPJ no formulario de cliente, busca automaticamente
na BrasilAPI (publica, gratuita, sem chave - dados abertos da Receita)
e preenche Razao/Fantasia/Endereco/Cidade/Bairro/UF/CEP/Telefone/
E-mail, so nos campos que estiverem vazios (nunca sobrescreve o que
ja foi digitado). So funciona para CNPJ - CPF e dado pessoal, sem
consulta publica, e a rota recusa (404) se detectar CPF.

- app/cnpj_lookup.py: cliente HTTP pra BrasilAPI, degrada em silencio
  (retorna None) se nao encontrar/rede cair/formato nao reconhecido
  (ex.: CNPJ alfanumerico novo, que a BrasilAPI pode nao cobrir ainda).
- Nova rota GET /clientes/consulta-cnpj/{documento}, chamada via
  fetch() no formulario (JS vanilla, sem framework).
- Testado ponta a ponta contra a API real.

106/106 testes passando (10 novos).
2026-08-13 15:05:26 -03:00

76 lines
2.4 KiB
Python

import httpx
from app import cnpj_lookup
def test_documento_com_tamanho_errado_nao_consulta(monkeypatch):
chamou = {}
monkeypatch.setattr(cnpj_lookup.httpx, "get", lambda *a, **k: chamou.setdefault("ok", True))
assert cnpj_lookup.consultar_cnpj("123") is None
assert "ok" not in chamou
def test_consulta_com_sucesso_mapeia_campos(monkeypatch):
class _RespostaFalsa:
status_code = 200
def json(self):
return {
"razao_social": "EMPRESA TESTE LTDA",
"nome_fantasia": "EMPRESA TESTE",
"logradouro": "RUA TESTE",
"numero": "123",
"bairro": "CENTRO",
"municipio": "FEIRA DE SANTANA",
"uf": "BA",
"cep": "44000000",
"ddd_telefone_1": "7533334444",
"email": "contato@empresateste.com",
}
monkeypatch.setattr(cnpj_lookup.httpx, "get", lambda url, timeout=None: _RespostaFalsa())
resultado = cnpj_lookup.consultar_cnpj("11222333000181")
assert resultado == {
"RAZAO": "EMPRESA TESTE LTDA",
"FANTASIA": "EMPRESA TESTE",
"ENDERECO": "RUA TESTE, 123",
"CIDADE": "FEIRA DE SANTANA",
"BAIRRO": "CENTRO",
"UF": "BA",
"CEP": "44000000",
"TELEFONE": "7533334444",
"EMAIL": "contato@empresateste.com",
}
def test_consulta_nao_encontrada_retorna_none(monkeypatch):
class _RespostaFalsa:
status_code = 404
def json(self):
return {}
monkeypatch.setattr(cnpj_lookup.httpx, "get", lambda url, timeout=None: _RespostaFalsa())
assert cnpj_lookup.consultar_cnpj("11222333000181") is None
def test_falha_de_rede_retorna_none(monkeypatch):
def _get_com_erro(url, timeout=None):
raise httpx.ConnectError("falhou")
monkeypatch.setattr(cnpj_lookup.httpx, "get", _get_com_erro)
assert cnpj_lookup.consultar_cnpj("11222333000181") is None
def test_sem_nome_fantasia_usa_razao_social(monkeypatch):
class _RespostaFalsa:
status_code = 200
def json(self):
return {"razao_social": "EMPRESA TESTE LTDA", "nome_fantasia": None}
monkeypatch.setattr(cnpj_lookup.httpx, "get", lambda url, timeout=None: _RespostaFalsa())
resultado = cnpj_lookup.consultar_cnpj("11222333000181")
assert resultado["FANTASIA"] == "EMPRESA TESTE LTDA"