From b830ce14dc149e4fe6acf4404f92161ed0c77c37 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Thu, 20 Aug 2026 09:30:08 -0300 Subject: [PATCH] feat: passa csrf_token no contexto da listagem de clientes --- app/routers/clientes.py | 1 + tests/test_router_clientes.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/app/routers/clientes.py b/app/routers/clientes.py index 33da3a5..6c08a89 100644 --- a/app/routers/clientes.py +++ b/app/routers/clientes.py @@ -198,6 +198,7 @@ def listar( "por_pagina": por_pagina_efetivo, "opcoes_por_pagina": OPCOES_POR_PAGINA, "primeiro_item": primeiro_item, "ultimo_item": ultimo_item, "janela_paginas": _janela_paginas(pagina, total_paginas), + "csrf_token": token_do_contexto(request), }, ) if por_pagina in OPCOES_POR_PAGINA: diff --git a/tests/test_router_clientes.py b/tests/test_router_clientes.py index 42fd66d..ab72093 100644 --- a/tests/test_router_clientes.py +++ b/tests/test_router_clientes.py @@ -170,6 +170,23 @@ def test_listar_clientes(monkeypatch): assert "Cliente Um" in resposta.text +def test_listar_clientes_inclui_csrf_token_no_contexto(monkeypatch): + monkeypatch.setattr( + router_clientes.db_clientes, + "listar_clientes", + lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc": [], + ) + monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 0) + + resposta = client.get("/clientes") + assert resposta.status_code == 200 + # Este app de teste não monta o middleware de CSRF (ver comentário no + # topo do arquivo), então token_do_contexto() retorna "" — o que + # importa aqui é que o template usa a variável sem quebrar e ela + # aparece no script embutido da página. + assert 'const CSRF_TOKEN = "";' in resposta.text + + def test_listar_clientes_pagina_com_controles_de_paginacao(monkeypatch): monkeypatch.setattr( router_clientes.db_clientes,