import pytest from fastapi import FastAPI from fastapi.testclient import TestClient from app.auth import UsuarioLogado, exigir_login from app.routers import log as router_log app_teste = FastAPI() app_teste.include_router(router_log.router) app_teste.dependency_overrides[exigir_login] = lambda: UsuarioLogado(login="admin", nome="Admin", perfil="ADMIN") client = TestClient(app_teste, follow_redirects=False) CSRF_TESTE = "teste-csrf-token" client.cookies.set("csrf_token", CSRF_TESTE) @pytest.fixture(autouse=True) def _admin_como_padrao(): """Todo teste roda como admin por padrão (override acima). Testes que querem simular usuário padrão sobrescrevem de novo dentro do próprio teste e restauram no fim via yield.""" yield app_teste.dependency_overrides[exigir_login] = lambda: UsuarioLogado(login="admin", nome="Admin", perfil="ADMIN") @pytest.fixture(autouse=True) def _sem_log_real(monkeypatch): monkeypatch.setattr(router_log.db_log, "registrar", lambda *args, **kwargs: None) def test_pagina_log_mostra_acoes_do_painel(monkeypatch): capturado = {} monkeypatch.setattr( router_log.db_log, "listar", lambda limite=100: capturado.setdefault("limite", limite) and [ { "ID": 1, "CRIADO_EM": "2026-08-13 10:00:00", "USUARIO": "admin", "ACAO": "criar", "ENTIDADE": "cliente", "ENTIDADE_ID": "000001", "SUCESSO": 1, "DETALHE": None, } ], ) monkeypatch.setattr(router_log.n8n_client, "listar_envios", lambda limite=50: []) monkeypatch.setattr(router_log.n8n_client, "configurado", lambda: False) resposta = client.get("/log") assert resposta.status_code == 200 assert "admin" in resposta.text assert "criar" in resposta.text assert "N8N_API_URL" in resposta.text # aviso de integração não configurada assert capturado["limite"] == 20 def test_pagina_log_mostra_envios_quando_configurado(monkeypatch): monkeypatch.setattr(router_log.db_log, "listar", lambda limite=20: []) monkeypatch.setattr( router_log.n8n_client, "listar_envios", lambda limite=50: [ { "data_processamento": "2026-08-13T10:00:00", "nome_cliente": "Cliente Teste", "codigo_cliente": "000001", "competencia": "2026-08", "status": "enviado", "telefones_enviados": "5575999090000", "telefones_com_erro": "", } ], ) monkeypatch.setattr(router_log.n8n_client, "configurado", lambda: True) resposta = client.get("/log") assert resposta.status_code == 200 assert "Cliente Teste" in resposta.text assert "enviado" in resposta.text def test_pagina_log_admin_ve_botao_de_limpar(monkeypatch): monkeypatch.setattr(router_log.db_log, "listar", lambda limite=20: []) monkeypatch.setattr(router_log.n8n_client, "listar_envios", lambda limite=50: []) monkeypatch.setattr(router_log.n8n_client, "configurado", lambda: False) resposta = client.get("/log") assert resposta.status_code == 200 assert "/log/limpar" in resposta.text def test_pagina_log_usuario_padrao_nao_ve_botao_de_limpar(monkeypatch): app_teste.dependency_overrides[exigir_login] = lambda: UsuarioLogado(login="fulano", nome="Fulano", perfil="PADRAO") monkeypatch.setattr(router_log.db_log, "listar", lambda limite=20: []) monkeypatch.setattr(router_log.n8n_client, "listar_envios", lambda limite=50: []) monkeypatch.setattr(router_log.n8n_client, "configurado", lambda: False) resposta = client.get("/log") assert resposta.status_code == 200 assert "/log/limpar" not in resposta.text def test_limpar_log_admin_funciona(monkeypatch): chamou = {} monkeypatch.setattr(router_log.db_log, "limpar", lambda: chamou.setdefault("limpou", True)) resposta = client.post("/log/limpar", data={"csrf_token": CSRF_TESTE}) assert resposta.status_code == 303 assert resposta.headers["location"].startswith("/log?") assert chamou.get("limpou") is True def test_limpar_log_usuario_padrao_toma_403(): app_teste.dependency_overrides[exigir_login] = lambda: UsuarioLogado(login="fulano", nome="Fulano", perfil="PADRAO") resposta = client.post("/log/limpar", data={"csrf_token": CSRF_TESTE}) assert resposta.status_code == 403