143 lines
5.1 KiB
Python
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
|