Files
GTI_GERENCIADOR_FISCAL/tests/test_router_minha_conta.py
T
2026-08-13 20:44:15 -03:00

143 lines
5.1 KiB
Python

import pytest
from fastapi import FastAPI
from fastapi.testclient import TestClient
from app.auth import UsuarioLogado, exigir_login
from app.routers import minha_conta as router_minha_conta
app_teste = FastAPI()
app_teste.include_router(router_minha_conta.router)
client = TestClient(app_teste, follow_redirects=False)
CSRF_TESTE = "teste-csrf-token"
client.cookies.set("csrf_token", CSRF_TESTE)
@pytest.fixture(autouse=True)
def _sem_log_real(monkeypatch):
monkeypatch.setattr(router_minha_conta.db_log, "registrar", lambda *args, **kwargs: None)
def _logar_como(login: str, nome: str, perfil: str = "PADRAO"):
app_teste.dependency_overrides[exigir_login] = lambda: UsuarioLogado(login=login, nome=nome, perfil=perfil)
def test_get_minha_conta_mostra_nome_e_login(monkeypatch):
_logar_como("fulano", "Fulano da Silva")
monkeypatch.setattr(
router_minha_conta.db_funcionarios,
"obter_por_login",
lambda login: {"ID": 1, "NOME": "Fulano da Silva", "LOGIN": "fulano", "SENHA_HASH": "x", "PERFIL": "PADRAO", "ATIVO": 1},
)
resposta = client.get("/minha-conta")
assert resposta.status_code == 200
assert "Fulano da Silva" in resposta.text
assert "fulano" in resposta.text
def test_get_minha_conta_admin_env_mostra_aviso(monkeypatch):
import os
monkeypatch.setenv("ADMIN_USER", "admin")
_logar_como("admin", "admin")
monkeypatch.setattr(router_minha_conta.db_funcionarios, "obter_por_login", lambda login: None)
resposta = client.get("/minha-conta")
assert resposta.status_code == 200
assert ".env" in resposta.text
def test_post_trocar_senha_com_sucesso(monkeypatch):
_logar_como("fulano", "Fulano da Silva")
monkeypatch.setattr(
router_minha_conta.db_funcionarios,
"obter_por_login",
lambda login: {"ID": 1, "NOME": "Fulano da Silva", "LOGIN": "fulano", "SENHA_HASH": "hash-atual", "PERFIL": "PADRAO", "ATIVO": 1},
)
monkeypatch.setattr(router_minha_conta, "verificar_senha", lambda senha, hash_: True)
capturado = {}
monkeypatch.setattr(
router_minha_conta.db_funcionarios,
"redefinir_senha",
lambda fid, nova: capturado.setdefault("dados", (fid, nova)),
)
resposta = client.post(
"/minha-conta/senha",
data={
"senha_atual": "senhaAtual123", "nova_senha": "senhaNova456", "confirmar_nova_senha": "senhaNova456",
"csrf_token": CSRF_TESTE,
},
follow_redirects=True,
)
assert resposta.status_code == 200
assert capturado["dados"] == (1, "senhaNova456")
def test_post_trocar_senha_atual_errada_bloqueia(monkeypatch):
_logar_como("fulano", "Fulano da Silva")
monkeypatch.setattr(
router_minha_conta.db_funcionarios,
"obter_por_login",
lambda login: {"ID": 1, "NOME": "Fulano da Silva", "LOGIN": "fulano", "SENHA_HASH": "hash-atual", "PERFIL": "PADRAO", "ATIVO": 1},
)
monkeypatch.setattr(router_minha_conta, "verificar_senha", lambda senha, hash_: False)
chamou = {}
monkeypatch.setattr(
router_minha_conta.db_funcionarios, "redefinir_senha", lambda fid, nova: chamou.setdefault("ok", True)
)
resposta = client.post(
"/minha-conta/senha",
data={
"senha_atual": "senhaErrada", "nova_senha": "senhaNova456", "confirmar_nova_senha": "senhaNova456",
"csrf_token": CSRF_TESTE,
},
)
assert resposta.status_code == 200
assert "senha atual" in resposta.text.lower()
assert "ok" not in chamou
def test_post_trocar_senha_confirmacao_nao_bate_bloqueia(monkeypatch):
_logar_como("fulano", "Fulano da Silva")
monkeypatch.setattr(
router_minha_conta.db_funcionarios,
"obter_por_login",
lambda login: {"ID": 1, "NOME": "Fulano da Silva", "LOGIN": "fulano", "SENHA_HASH": "hash-atual", "PERFIL": "PADRAO", "ATIVO": 1},
)
monkeypatch.setattr(router_minha_conta, "verificar_senha", lambda senha, hash_: True)
chamou = {}
monkeypatch.setattr(
router_minha_conta.db_funcionarios, "redefinir_senha", lambda fid, nova: chamou.setdefault("ok", True)
)
resposta = client.post(
"/minha-conta/senha",
data={
"senha_atual": "senhaAtual123", "nova_senha": "senhaNova456", "confirmar_nova_senha": "outraCoisa",
"csrf_token": CSRF_TESTE,
},
)
assert resposta.status_code == 200
assert "não coincidem" in resposta.text
assert "ok" not in chamou
def test_post_trocar_senha_admin_env_bloqueia(monkeypatch):
_logar_como("admin", "admin")
monkeypatch.setattr(router_minha_conta.db_funcionarios, "obter_por_login", lambda login: None)
chamou = {}
monkeypatch.setattr(
router_minha_conta.db_funcionarios, "redefinir_senha", lambda fid, nova: chamou.setdefault("ok", True)
)
resposta = client.post(
"/minha-conta/senha",
data={
"senha_atual": "qualquer", "nova_senha": "senhaNova456", "confirmar_nova_senha": "senhaNova456",
"csrf_token": CSRF_TESTE,
},
)
assert resposta.status_code == 200
assert ".env" in resposta.text
assert "ok" not in chamou