feat: bloquear CNPJ com DV inválido, gravar telefone/UF/CEP normalizados
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
8b5e7e251e
commit
59f15d9ac0
@@ -295,8 +295,8 @@ def test_criar_cliente_normaliza_cnpj_e_telefones(monkeypatch):
|
||||
resposta = client.post("/clientes/novo", data=dados_form)
|
||||
assert resposta.status_code == 303
|
||||
assert capturado["dados"]["CNPJ"] == "11222333000181"
|
||||
assert capturado["dados"]["TELEFONE"] == "7533334444"
|
||||
assert capturado["dados"]["CELULAR"] == "75999091780"
|
||||
assert capturado["dados"]["TELEFONE"] == "557533334444"
|
||||
assert capturado["dados"]["CELULAR"] == "5575999091780"
|
||||
|
||||
|
||||
def test_editar_cliente_normaliza_cnpj_e_telefones(monkeypatch):
|
||||
@@ -320,8 +320,8 @@ def test_editar_cliente_normaliza_cnpj_e_telefones(monkeypatch):
|
||||
resposta = client.post("/clientes/1/editar", data=dados_form)
|
||||
assert resposta.status_code == 303
|
||||
assert capturado["dados"]["CNPJ"] == "11144477735"
|
||||
assert capturado["dados"]["TELEFONE"] == "7533334444"
|
||||
assert capturado["dados"]["CELULAR"] == "75999091780"
|
||||
assert capturado["dados"]["TELEFONE"] == "557533334444"
|
||||
assert capturado["dados"]["CELULAR"] == "5575999091780"
|
||||
|
||||
|
||||
def test_editar_cliente_codigo_duplicado_bloqueia_sem_bypass(monkeypatch):
|
||||
@@ -407,3 +407,116 @@ def test_criar_cliente_com_dv_invalido_exige_confirmacao(monkeypatch):
|
||||
resposta = client.post("/clientes/novo", data=dados_form)
|
||||
assert resposta.status_code == 303
|
||||
assert criado.get("ok") is True
|
||||
|
||||
|
||||
def test_criar_cliente_com_cnpj_dv_invalido_bloqueia_sempre(monkeypatch):
|
||||
"""
|
||||
Diferente de CPF: CNPJ com DV inválido bloqueia sempre, sem opção de
|
||||
"cadastrar mesmo assim" — nem com confirmar_dv_invalido=1.
|
||||
"""
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "codigo_em_uso", lambda codigo, ignorar_id=None: False)
|
||||
criado = {}
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes, "criar_cliente", lambda dados: criado.setdefault("ok", True) and 42
|
||||
)
|
||||
|
||||
dados_form = _form_valido()
|
||||
dados_form["CNPJ"] = "11222333000180" # último dígito trocado: DV inválido
|
||||
|
||||
resposta = client.post("/clientes/novo", data=dados_form)
|
||||
assert resposta.status_code == 200
|
||||
assert "não confere" in resposta.text
|
||||
assert "ok" not in criado
|
||||
|
||||
# Mesmo confirmando, continua bloqueando (diferente do fluxo de CPF).
|
||||
dados_form["confirmar_dv_invalido"] = "1"
|
||||
resposta = client.post("/clientes/novo", data=dados_form)
|
||||
assert resposta.status_code == 200
|
||||
assert "ok" not in criado
|
||||
|
||||
|
||||
def test_editar_cliente_com_cnpj_dv_invalido_bloqueia(monkeypatch):
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "codigo_em_uso", lambda codigo, ignorar_id=None: False)
|
||||
atualizado = {}
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"atualizar_cliente",
|
||||
lambda cliente_id, dados: atualizado.setdefault("ok", True),
|
||||
)
|
||||
|
||||
dados_form = _form_valido()
|
||||
dados_form["CNPJ"] = "11222333000180"
|
||||
|
||||
resposta = client.post("/clientes/1/editar", data=dados_form)
|
||||
assert resposta.status_code == 200
|
||||
assert "não confere" in resposta.text
|
||||
assert "ok" not in atualizado
|
||||
|
||||
|
||||
def test_criar_cliente_com_cpf_dv_invalido_continua_permitindo_confirmar(monkeypatch):
|
||||
"""Regressão: CPF com DV inválido não muda de comportamento."""
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "codigo_em_uso", lambda codigo, ignorar_id=None: False)
|
||||
criado = {}
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes, "criar_cliente", lambda dados: criado.setdefault("ok", True) and 42
|
||||
)
|
||||
|
||||
dados_form = _form_valido()
|
||||
dados_form["CNPJ"] = "11144477734" # CPF com DV inválido
|
||||
|
||||
resposta = client.post("/clientes/novo", data=dados_form)
|
||||
assert resposta.status_code == 200
|
||||
assert "não confere" in resposta.text
|
||||
assert "ok" not in criado
|
||||
|
||||
dados_form["confirmar_dv_invalido"] = "1"
|
||||
resposta = client.post("/clientes/novo", data=dados_form)
|
||||
assert resposta.status_code == 303
|
||||
assert criado.get("ok") is True
|
||||
|
||||
|
||||
def test_criar_cliente_grava_telefone_com_ddi_55(monkeypatch):
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "codigo_em_uso", lambda codigo, ignorar_id=None: False)
|
||||
capturado = {}
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes, "criar_cliente", lambda dados: capturado.setdefault("dados", dados) and 42
|
||||
)
|
||||
|
||||
dados_form = _form_valido()
|
||||
dados_form.update({"TELEFONE": "(75) 3333-4444", "CELULAR": "(75) 99909-1780"})
|
||||
|
||||
resposta = client.post("/clientes/novo", data=dados_form)
|
||||
assert resposta.status_code == 303
|
||||
assert capturado["dados"]["TELEFONE"] == "557533334444"
|
||||
assert capturado["dados"]["CELULAR"] == "5575999091780"
|
||||
|
||||
|
||||
def test_criar_cliente_telefone_ja_com_55_nao_duplica(monkeypatch):
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "codigo_em_uso", lambda codigo, ignorar_id=None: False)
|
||||
capturado = {}
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes, "criar_cliente", lambda dados: capturado.setdefault("dados", dados) and 42
|
||||
)
|
||||
|
||||
dados_form = _form_valido()
|
||||
dados_form["CELULAR"] = "5575999091780"
|
||||
|
||||
resposta = client.post("/clientes/novo", data=dados_form)
|
||||
assert resposta.status_code == 303
|
||||
assert capturado["dados"]["CELULAR"] == "5575999091780"
|
||||
|
||||
|
||||
def test_criar_cliente_grava_uf_maiuscula_e_cep_sem_traco(monkeypatch):
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "codigo_em_uso", lambda codigo, ignorar_id=None: False)
|
||||
capturado = {}
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes, "criar_cliente", lambda dados: capturado.setdefault("dados", dados) and 42
|
||||
)
|
||||
|
||||
dados_form = _form_valido()
|
||||
dados_form.update({"UF": "ba", "CEP": "44430-174"})
|
||||
|
||||
resposta = client.post("/clientes/novo", data=dados_form)
|
||||
assert resposta.status_code == 303
|
||||
assert capturado["dados"]["UF"] == "BA"
|
||||
assert capturado["dados"]["CEP"] == "44430174"
|
||||
|
||||
Reference in New Issue
Block a user