"""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") 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 "SENHA_HASH" not in f # obter_funcionario não expõe o hash def test_obter_por_login_inclui_senha_hash(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 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): logins = [f["LOGIN"] for f in db_funcionarios.listar_funcionarios()] assert LOGIN_TESTE in logins def test_atualizar_funcionario(funcionario_id): novo_login = "teste.db.funcionarios.editado" db_funcionarios.atualizar_funcionario(funcionario_id, "Fulano Editado", novo_login) f = db_funcionarios.obter_funcionario(funcionario_id) assert f["NOME"] == "Fulano Editado" assert f["LOGIN"] == novo_login 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