import base64 from fastapi import Depends, FastAPI from fastapi.testclient import TestClient from app.auth import exigir_login app_teste = FastAPI() @app_teste.get("/protegido") def rota_protegida(usuario: str = Depends(exigir_login)): return {"usuario": usuario} client = TestClient(app_teste) def _basic(usuario: str, senha: str) -> dict: token = base64.b64encode(f"{usuario}:{senha}".encode()).decode() return {"Authorization": f"Basic {token}"} def test_sem_credenciais_retorna_401(): resposta = client.get("/protegido") assert resposta.status_code == 401 def test_credenciais_erradas_retorna_401(): resposta = client.get("/protegido", headers=_basic("admin", "senha_errada")) assert resposta.status_code == 401 def test_credenciais_corretas_retorna_200(): # ADMIN_USER/ADMIN_PASSWORD vêm de tests/conftest.py ("admin"/"teste123") resposta = client.get("/protegido", headers=_basic("admin", "teste123")) assert resposta.status_code == 200 assert resposta.json() == {"usuario": "admin"} def test_admin_user_e_senha_vazios_nao_autentica_com_credenciais_vazias(monkeypatch): # Sem ADMIN_USER/ADMIN_PASSWORD configurados, o painel não pode ficar # aberto para uma requisição com usuário/senha vazios (Basic Og==). monkeypatch.setenv("ADMIN_USER", "") monkeypatch.setenv("ADMIN_PASSWORD", "") resposta = client.get("/protegido", headers=_basic("", "")) assert resposta.status_code == 401