Coverage for tests/test_predictive.py: 100%
47 statements
« prev ^ index » next coverage.py v7.14.1, created at 2026-05-31 21:56 +0000
« prev ^ index » next coverage.py v7.14.1, created at 2026-05-31 21:56 +0000
1import pytest
2from unittest.mock import MagicMock
4@pytest.mark.asyncio
5async def test_get_reliability_summary(async_client, mock_db_session):
6 # Mock the duckdb result
7 mock_db_session.fetchall.return_value = [
8 ("Brakes", 15.2),
9 ("Suspension", 12.5),
10 ("Visibility", 8.0)
11 ]
12 mock_db_session.description = [
13 ("category",), ("incidence_rate",)
14 ]
15 mock_db_session.execute.return_value = mock_db_session
17 response = await async_client.get("/api/v1/generations/1/reliability")
19 assert response.status_code == 200
20 data = response.json()
21 assert data["generation_id"] == 1
22 assert len(data["top_categories"]) == 3
23 assert data["top_categories"][0]["category"] == "Brakes"
24 assert data["top_categories"][0]["incidence_rate"] == 15.2
25 assert "Cache-Control" in response.headers
27@pytest.mark.asyncio
28async def test_get_reliability_granular(async_client, mock_db_session):
29 # Mock the duckdb result
30 mock_db_session.fetchall.return_value = [
31 ("Brakes", "Brake pads worn", 12.0),
32 ("Brakes", "Brake disc excessively pitted", 5.5),
33 ("Suspension", "Shock absorber leaking", 8.2)
34 ]
35 mock_db_session.description = [
36 ("category",), ("defect_description",), ("incidence_rate",)
37 ]
38 mock_db_session.execute.return_value = mock_db_session
40 response = await async_client.get("/api/v1/generations/1/reliability/granular")
42 assert response.status_code == 200
43 data = response.json()
44 assert len(data) == 3
45 assert data[0]["category"] == "Brakes"
46 assert data[0]["defect_description"] == "Brake pads worn"
47 assert data[0]["incidence_rate"] == 12.0
48 assert "Cache-Control" in response.headers
50@pytest.mark.asyncio
51async def test_get_population_found(async_client, mock_db_session):
52 # Mock the database result
53 mock_db_session.fetchone.return_value = (150000, 25000)
54 mock_db_session.description = [
55 ("total_on_road",), ("total_sorn",)
56 ]
57 mock_db_session.execute.return_value = mock_db_session
59 response = await async_client.get("/api/v1/generations/1/population")
61 assert response.status_code == 200
62 data = response.json()
63 assert data["generation_id"] == 1
64 assert data["total_on_road"] == 150000
65 assert data["total_sorn"] == 25000
66 assert "Cache-Control" in response.headers
68@pytest.mark.asyncio
69async def test_get_population_not_found(async_client, mock_db_session):
70 mock_db_session.fetchone.return_value = None
71 mock_db_session.execute.return_value = mock_db_session
73 response = await async_client.get("/api/v1/generations/999/population")
75 assert response.status_code == 404
76 assert response.json()["detail"] == "Population data not found for this generation"