feat: tela Minha conta para trocar a propria senha
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
c4079b3e47
commit
4a5c70861d
@@ -0,0 +1,142 @@
|
||||
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
|
||||
Reference in New Issue
Block a user