from uuid import uuid4 import pytest from fastapi.testclient import TestClient @pytest.fixture def client(api_client: TestClient) -> TestClient: return api_client def _create_scenario(client: TestClient) -> int: payload = { "name": f"Consumption Scenario {uuid4()}", "description": "Scenario for consumption tests", } response = client.post("/api/scenarios/", json=payload) assert response.status_code == 200 return response.json()["id"] def test_create_consumption(client: TestClient) -> None: scenario_id = _create_scenario(client) payload = { "scenario_id": scenario_id, "amount": 125.5, "description": "Fuel usage baseline", } response = client.post("/api/consumption/", json=payload) assert response.status_code == 201 body = response.json() assert body["id"] > 0 assert body["scenario_id"] == scenario_id assert body["amount"] == pytest.approx(125.5) assert body["description"] == "Fuel usage baseline" def test_list_consumption_returns_created_items(client: TestClient) -> None: scenario_id = _create_scenario(client) values = [50.0, 80.75] for amount in values: response = client.post( "/api/consumption/", json={ "scenario_id": scenario_id, "amount": amount, "description": f"Consumption {amount}", }, ) assert response.status_code == 201 list_response = client.get("/api/consumption/") assert list_response.status_code == 200 items = [item for item in list_response.json( ) if item["scenario_id"] == scenario_id] assert {item["amount"] for item in items} == set(values) def test_create_consumption_rejects_negative_amount(client: TestClient) -> None: scenario_id = _create_scenario(client) payload = { "scenario_id": scenario_id, "amount": -10, "description": "Invalid negative amount", } response = client.post("/api/consumption/", json=payload) assert response.status_code == 422