TradeFlowAI / tests /integration /test_keycloak_auth_flow.py
muhammadghiffari's picture
Deploy TradeFlow API to HF
db4ba8d
Raw
History Blame Contribute Delete
2.02 kB
import os
import subprocess
import pytest
from fastapi.testclient import TestClient
from src.main import app
@pytest.mark.integration
def test_keycloak_token_allows_authenticated_api_call():
"""Provision Keycloak test client/user if needed, then call an authenticated endpoint.
Skipped unless `RUN_KEYCLOAK=1` is set. If `.env.e2e` is missing the test
will attempt to run the provisioning script `scripts/keycloak/provision_e2e.py`.
"""
if os.getenv("RUN_KEYCLOAK") != "1":
pytest.skip("Set RUN_KEYCLOAK=1 to run Keycloak auth flow test")
envfile = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..", ".env.e2e"))
if not os.path.exists(envfile):
# Attempt to provision Keycloak artifacts (best-effort)
provision_script = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..", "scripts", "keycloak", "provision_e2e.py"))
if not os.path.exists(provision_script):
pytest.skip("Keycloak provision script not found; please run it manually to create test client/user")
proc = subprocess.run(["python", provision_script], capture_output=True, text=True)
if proc.returncode != 0:
pytest.skip(f"Provisioning script failed: {proc.stdout}\n{proc.stderr}")
# Load token from .env.e2e
token = None
with open(envfile, encoding="utf-8") as fh:
for line in fh:
if line.strip().startswith("E2E_BEARER_TOKEN="):
token = line.strip().split("=", 1)[1]
break
if not token:
pytest.skip("E2E_BEARER_TOKEN not found in .env.e2e")
client = TestClient(app)
headers = {"Authorization": f"Bearer {token}"}
# Call a protected endpoint that uses get_current_user
r = client.get("/api/v1/batches", headers=headers)
# 200 OK expected (empty list) or 401 if setup incomplete
assert r.status_code in (200, 401), f"Unexpected status: {r.status_code} - {r.text}"