121 lines
4.8 KiB
Python
121 lines
4.8 KiB
Python
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
|
|
|
|
|
|
def test_pagina_log_secoes_comecam_fechadas(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
|
|
texto = resposta.text
|
|
assert texto.count('<details class="secao-log">') == 2
|
|
assert "<details class=\"secao-log\" open>" not in texto
|
|
assert "<details class='secao-log' open>" not in texto
|