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

1import pytest 

2from unittest.mock import MagicMock 

3 

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 

16 

17 response = await async_client.get("/api/v1/generations/1/reliability") 

18 

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 

26 

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 

39 

40 response = await async_client.get("/api/v1/generations/1/reliability/granular") 

41 

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 

49 

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 

58 

59 response = await async_client.get("/api/v1/generations/1/population") 

60 

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 

67 

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 

72 

73 response = await async_client.get("/api/v1/generations/999/population") 

74 

75 assert response.status_code == 404 

76 assert response.json()["detail"] == "Population data not found for this generation"