| 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): |
| |
| 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_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" |
|
|
| |
| 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"] |
|
|
| |
| 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): |
| |
| response = await client.get("/api/v1/recommendations") |
| assert response.status_code == 200 |
| recs = response.json() |
| assert len(recs) > 0 |
| rec_id = recs[0]["id"] |
|
|
| |
| 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 |
|
|
| |
| 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() |
|
|
| |
| 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 |
|
|