git-subtree-dir: gerenciador git-subtree-mainline:f4f546c928git-subtree-split:34cc9c75a5
99 lines
3.4 KiB
Python
99 lines
3.4 KiB
Python
"""Testes de integração contra o banco de dev (ver test_db_connection.py)."""
|
|
import pytest
|
|
|
|
from app.db import funcionarios as db_funcionarios
|
|
from app.db.connection import get_connection
|
|
|
|
LOGIN_TESTE = "teste.db.funcionarios"
|
|
|
|
|
|
def _limpar():
|
|
conn = get_connection()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
cur.execute("DELETE FROM FUNCIONARIO_PAINEL WHERE LOGIN LIKE 'teste.db.funcionarios%'")
|
|
finally:
|
|
conn.close()
|
|
|
|
|
|
@pytest.fixture
|
|
def funcionario_id():
|
|
_limpar()
|
|
novo_id = db_funcionarios.criar_funcionario("Fulano Teste", LOGIN_TESTE, "senhaForte123", "PADRAO")
|
|
yield novo_id
|
|
_limpar()
|
|
|
|
|
|
def test_criar_e_obter_funcionario(funcionario_id):
|
|
f = db_funcionarios.obter_funcionario(funcionario_id)
|
|
assert f is not None
|
|
assert f["NOME"] == "Fulano Teste"
|
|
assert f["LOGIN"] == LOGIN_TESTE
|
|
assert f["ATIVO"] == 1
|
|
assert f["PERFIL"] == "PADRAO"
|
|
assert "SENHA_HASH" not in f # obter_funcionario não expõe o hash
|
|
|
|
|
|
def test_obter_por_login_inclui_senha_hash_e_perfil(funcionario_id):
|
|
f = db_funcionarios.obter_por_login(LOGIN_TESTE)
|
|
assert f is not None
|
|
assert "SENHA_HASH" in f
|
|
assert f["SENHA_HASH"] != "senhaForte123" # nunca em texto puro
|
|
assert f["PERFIL"] == "PADRAO"
|
|
|
|
|
|
def test_obter_por_login_inexistente(funcionario_id):
|
|
assert db_funcionarios.obter_por_login("nao-existe-esse-login-xyz") is None
|
|
|
|
|
|
def test_login_em_uso(funcionario_id):
|
|
assert db_funcionarios.login_em_uso(LOGIN_TESTE) is True
|
|
assert db_funcionarios.login_em_uso(LOGIN_TESTE, ignorar_id=funcionario_id) is False
|
|
assert db_funcionarios.login_em_uso("login-que-nao-existe") is False
|
|
|
|
|
|
def test_listar_funcionarios_inclui_o_criado(funcionario_id):
|
|
encontrados = {f["LOGIN"]: f for f in db_funcionarios.listar_funcionarios()}
|
|
assert LOGIN_TESTE in encontrados
|
|
assert encontrados[LOGIN_TESTE]["PERFIL"] == "PADRAO"
|
|
|
|
|
|
def test_atualizar_funcionario(funcionario_id):
|
|
novo_login = "teste.db.funcionarios.editado"
|
|
db_funcionarios.atualizar_funcionario(funcionario_id, "Fulano Editado", novo_login, "ADMIN")
|
|
f = db_funcionarios.obter_funcionario(funcionario_id)
|
|
assert f["NOME"] == "Fulano Editado"
|
|
assert f["LOGIN"] == novo_login
|
|
assert f["PERFIL"] == "ADMIN"
|
|
|
|
|
|
def test_redefinir_senha(funcionario_id):
|
|
hash_antes = db_funcionarios.obter_por_login(LOGIN_TESTE)["SENHA_HASH"]
|
|
db_funcionarios.redefinir_senha(funcionario_id, "outraSenha456")
|
|
hash_depois = db_funcionarios.obter_por_login(LOGIN_TESTE)["SENHA_HASH"]
|
|
assert hash_antes != hash_depois
|
|
|
|
|
|
def test_alternar_ativo(funcionario_id):
|
|
assert db_funcionarios.obter_funcionario(funcionario_id)["ATIVO"] == 1
|
|
db_funcionarios.alternar_ativo(funcionario_id)
|
|
assert db_funcionarios.obter_funcionario(funcionario_id)["ATIVO"] == 0
|
|
db_funcionarios.alternar_ativo(funcionario_id)
|
|
assert db_funcionarios.obter_funcionario(funcionario_id)["ATIVO"] == 1
|
|
|
|
|
|
def test_contar_admins_ativos(funcionario_id):
|
|
# funcionario_id é PADRAO (fixture acima) — não conta.
|
|
antes = db_funcionarios.contar_admins_ativos()
|
|
|
|
admin_id = db_funcionarios.criar_funcionario(
|
|
"Admin Teste", "teste.db.funcionarios.admin", "senhaForte123", "ADMIN"
|
|
)
|
|
try:
|
|
assert db_funcionarios.contar_admins_ativos() == antes + 1
|
|
|
|
db_funcionarios.alternar_ativo(admin_id) # desativa
|
|
assert db_funcionarios.contar_admins_ativos() == antes
|
|
finally:
|
|
_limpar()
|