48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
"""
|
|
Tests HTTP d'integration contre l'API Docker.
|
|
"""
|
|
|
|
import os
|
|
|
|
import pytest
|
|
import httpx
|
|
|
|
|
|
API_BASE = os.getenv("PW_API_BASE", "http://localhost:8001")
|
|
API_TOKEN = os.getenv("PW_API_TOKEN", "change_me")
|
|
|
|
|
|
def _client() -> httpx.Client:
|
|
return httpx.Client(base_url=API_BASE, timeout=2.0)
|
|
|
|
|
|
def _is_api_up() -> bool:
|
|
try:
|
|
with _client() as client:
|
|
resp = client.get("/health")
|
|
return resp.status_code == 200
|
|
except Exception:
|
|
return False
|
|
|
|
|
|
@pytest.mark.skipif(not _is_api_up(), reason="API Docker indisponible")
|
|
def test_health_endpoint():
|
|
"""/health repond avec db/redis."""
|
|
with _client() as client:
|
|
resp = client.get("/health")
|
|
assert resp.status_code == 200
|
|
payload = resp.json()
|
|
assert "db" in payload and "redis" in payload
|
|
|
|
|
|
@pytest.mark.skipif(not _is_api_up(), reason="API Docker indisponible")
|
|
def test_products_requires_token():
|
|
"""/products demande un token valide."""
|
|
with _client() as client:
|
|
resp = client.get("/products")
|
|
assert resp.status_code == 401
|
|
|
|
resp = client.get("/products", headers={"Authorization": f"Bearer {API_TOKEN}"})
|
|
assert resp.status_code == 200
|
|
assert isinstance(resp.json(), list)
|