diff --git a/app/templates/cliente_detalhe.html b/app/templates/cliente_detalhe.html
index 057bbfb..f9dc7e7 100644
--- a/app/templates/cliente_detalhe.html
+++ b/app/templates/cliente_detalhe.html
@@ -18,6 +18,18 @@
| {{ ct.NOME }} | {{ ct.TELEFONE }} | {{ ct.EMAIL or "" }} |
+
+ Editar
+
+
diff --git a/tests/test_router_clientes.py b/tests/test_router_clientes.py
index d5907ef..f74768a 100644
--- a/tests/test_router_clientes.py
+++ b/tests/test_router_clientes.py
@@ -29,6 +29,26 @@ def test_listar_clientes(monkeypatch):
assert "Cliente Um" in resposta.text
+def test_detalhe_cliente_mostra_formulario_de_edicao_de_contato(monkeypatch):
+ monkeypatch.setattr(
+ router_clientes.db_clientes,
+ "obter_cliente",
+ lambda cid: {"ID": cid, "CODIGO": "000001", "RAZAO": "Cliente Um", "FANTASIA": "Um", "CNPJ": "11222333000181"},
+ )
+ monkeypatch.setattr(
+ router_clientes.db_contatos,
+ "listar_contatos_por_cliente",
+ lambda cid: [{"ID": 7, "NOME": "Fulano", "TELEFONE": "75999090001", "EMAIL": None}],
+ )
+ monkeypatch.setattr(router_clientes.db_chaves, "status_chaves", lambda codigo: None)
+
+ resposta = client.get("/clientes/1")
+ assert resposta.status_code == 200
+ assert '/clientes/1/contatos/7/editar' in resposta.text
+ assert 'value="Fulano"' in resposta.text
+ assert 'value="75999090001"' in resposta.text
+
+
def test_criar_cliente_codigo_duplicado_exige_confirmacao(monkeypatch):
monkeypatch.setattr(router_clientes.db_clientes, "codigo_em_uso", lambda codigo, ignorar_id=None: True)
criado = {}
diff --git a/tests/test_router_contatos.py b/tests/test_router_contatos.py
index af3e724..f36901a 100644
--- a/tests/test_router_contatos.py
+++ b/tests/test_router_contatos.py
@@ -39,6 +39,39 @@ def test_adicionar_contato_duplicado_avisa(monkeypatch):
assert "já está cadastrado" in resposta.text
+def test_editar_contato_com_sucesso(monkeypatch):
+ monkeypatch.setattr(router_contatos.db_contatos, "contato_duplicado", lambda cid, tel, ignorar_id=None: False)
+ chamadas = {}
+ monkeypatch.setattr(
+ router_contatos.db_contatos,
+ "atualizar_contato",
+ lambda contato_id, cid, nome, tel, email=None: chamadas.setdefault(
+ "dados", (contato_id, cid, nome, tel, email)
+ ),
+ )
+
+ resposta = client.post(
+ "/clientes/1/contatos/5/editar",
+ data={"nome": "Fulano Editado", "telefone": "(75) 99909-0002", "email": "fulano@example.com"},
+ )
+ assert resposta.status_code == 303
+ assert chamadas["dados"] == (5, 1, "Fulano Editado", "75999090002", "fulano@example.com")
+
+
+def test_editar_contato_duplicado_avisa(monkeypatch):
+ monkeypatch.setattr(router_contatos.db_contatos, "contato_duplicado", lambda cid, tel, ignorar_id=None: True)
+ monkeypatch.setattr(router_clientes.db_clientes, "obter_cliente", lambda cid: {"ID": cid, "CODIGO": "000001", "RAZAO": "Cliente", "FANTASIA": "Cliente"})
+ monkeypatch.setattr(router_clientes.db_contatos, "listar_contatos_por_cliente", lambda cid: [])
+ monkeypatch.setattr(router_clientes.db_chaves, "status_chaves", lambda codigo: None)
+
+ resposta = client.post(
+ "/clientes/1/contatos/5/editar",
+ data={"nome": "Fulano", "telefone": "75999090001"},
+ follow_redirects=True,
+ )
+ assert "já está cadastrado" in resposta.text
+
+
def test_excluir_contato(monkeypatch):
monkeypatch.setattr(router_contatos.db_clientes, "obter_cliente", lambda cid: {"ID": cid, "CODIGO": "000001"})
chamadas = {}
|