Rail_Mind / tests /integration /test_api.py
Gaurav711's picture
fix(tests): resolve path error on Linux and clean unused imports
bf4313e
Raw
History Blame Contribute Delete
3.86 kB
import pytest
from httpx import AsyncClient
@pytest.mark.asyncio
async def test_health_endpoints(client: AsyncClient):
response = await client.get("/api/v1/health")
assert response.status_code == 200
data = response.json()
assert data["status"] == "healthy"
response = await client.get("/api/v1/health/agents")
assert response.status_code == 200
data = response.json()
assert "MonitorAgent" in data
assert "DispatchAgent" in data
response = await client.get("/api/v1/health/data-freshness")
assert response.status_code == 200
assert "watchlist" in response.json()
response = await client.get("/api/v1/health/system")
assert response.status_code == 200
system_data = response.json()
assert system_data["status"] in ("operational", "degraded")
assert "uptime_seconds" in system_data
assert "performance" in system_data
assert "components" in system_data
assert system_data["components"]["database"] == "connected"
assert "test_coverage" in system_data
@pytest.mark.asyncio
async def test_auth_flow(client: AsyncClient):
# Register a test user
reg_response = await client.post(
"/api/v1/auth/register",
json={"username": "test_controller", "password": "securepassword123"},
)
assert reg_response.status_code == 200
reg_data = reg_response.json()
assert reg_data["username"] == "test_controller"
# Login
login_response = await client.post(
"/api/v1/auth/login",
json={"username": "test_controller", "password": "securepassword123"},
)
assert login_response.status_code == 200
login_data = login_response.json()
assert "access_token" in login_data
assert "refresh_token" in login_data
assert login_data["role"] == "PASSENGER" # default role
# Refresh token
refresh_response = await client.post(
"/api/v1/auth/refresh", json={"refresh_token": login_data["refresh_token"]}
)
assert refresh_response.status_code == 200
refresh_data = refresh_response.json()
assert "access_token" in refresh_data
assert "refresh_token" in refresh_data
@pytest.mark.asyncio
async def test_train_endpoints(client: AsyncClient):
response = await client.get("/api/v1/trains")
assert response.status_code == 200
data = response.json()
assert len(data) > 0
assert data[0]["train_no"] in ["12002", "22415", "BOXN-902"]
# Get details of train 12002
response_12002 = await client.get("/api/v1/trains/12002")
assert response_12002.status_code == 200
data_12002 = response_12002.json()
assert data_12002["train_no"] == "12002"
assert len(data_12002["route"]) > 0
@pytest.mark.asyncio
async def test_recommendations_and_rerouting(client: AsyncClient):
# List recommendations
response = await client.get("/api/v1/recommendations")
assert response.status_code == 200
recs = response.json()
assert len(recs) > 0
rec_id = recs[0]["id"]
# Approve recommendation
response_approve = await client.post(f"/api/v1/recommendations/{rec_id}/approve")
assert response_approve.status_code == 200
assert response_approve.json()["is_approved"] is True
# Suggest rerouting path
response_reroute = await client.post(
"/api/v1/rerouting/suggest",
json={"from_station": "NDLS", "to_station": "ALJN", "train_no": "12002"},
)
assert response_reroute.status_code == 200
reroute_data = response_reroute.json()
assert "suggested path" in reroute_data["advisory_text"].lower()
assert "bypassed" in reroute_data["advisory_text"].lower()
# Get network state
response_net = await client.get("/api/v1/rerouting/network-state")
assert response_net.status_code == 200
net_data = response_net.json()
assert "nodes" in net_data
assert "edges" in net_data