- Updated test functions in various test files to enhance code clarity by formatting long lines and improving indentation. - Adjusted assertions to use multi-line formatting for better readability. - Added new test cases for theme settings API to ensure proper functionality. - Ensured consistent use of line breaks and spacing across test files for uniformity.
95 lines
3.6 KiB
Python
95 lines
3.6 KiB
Python
from typing import Any, Dict
|
|
|
|
import pytest
|
|
from fastapi.testclient import TestClient
|
|
|
|
|
|
@pytest.mark.usefixtures("invalid_request_payloads")
|
|
def test_duplicate_scenario_returns_400(
|
|
api_client: TestClient, invalid_request_payloads: Dict[str, Any]
|
|
) -> None:
|
|
payload = invalid_request_payloads["scenario_duplicate"]
|
|
response = api_client.post("/api/scenarios/", json=payload)
|
|
assert response.status_code == 400
|
|
body = response.json()
|
|
assert body["detail"] == "Scenario already exists"
|
|
|
|
|
|
@pytest.mark.usefixtures("invalid_request_payloads")
|
|
def test_parameter_create_missing_scenario_returns_404(
|
|
api_client: TestClient, invalid_request_payloads: Dict[str, Any]
|
|
) -> None:
|
|
payload = invalid_request_payloads["parameter_missing_scenario"]
|
|
response = api_client.post("/api/parameters/", json=payload)
|
|
assert response.status_code == 404
|
|
assert response.json()["detail"] == "Scenario not found"
|
|
|
|
|
|
@pytest.mark.usefixtures("invalid_request_payloads")
|
|
def test_parameter_create_invalid_distribution_is_422(
|
|
api_client: TestClient,
|
|
) -> None:
|
|
response = api_client.post(
|
|
"/api/parameters/",
|
|
json={
|
|
"scenario_id": 1,
|
|
"name": "Bad Dist",
|
|
"value": 2.0,
|
|
"distribution_type": "invalid",
|
|
},
|
|
)
|
|
assert response.status_code == 422
|
|
errors = response.json()["detail"]
|
|
assert any("distribution_type" in err["loc"] for err in errors)
|
|
|
|
|
|
@pytest.mark.usefixtures("invalid_request_payloads")
|
|
def test_simulation_unknown_scenario_returns_404(
|
|
api_client: TestClient, invalid_request_payloads: Dict[str, Any]
|
|
) -> None:
|
|
payload = invalid_request_payloads["simulation_unknown_scenario"]
|
|
response = api_client.post("/api/simulations/run", json=payload)
|
|
assert response.status_code == 404
|
|
assert response.json()["detail"] == "Scenario not found"
|
|
|
|
|
|
@pytest.mark.usefixtures("invalid_request_payloads")
|
|
def test_simulation_missing_parameters_returns_400(
|
|
api_client: TestClient, invalid_request_payloads: Dict[str, Any]
|
|
) -> None:
|
|
payload = invalid_request_payloads["simulation_missing_parameters"]
|
|
response = api_client.post("/api/simulations/run", json=payload)
|
|
assert response.status_code == 400
|
|
assert response.json()["detail"] == "No parameters provided"
|
|
|
|
|
|
@pytest.mark.usefixtures("invalid_request_payloads")
|
|
def test_reporting_summary_rejects_non_list_payload(
|
|
api_client: TestClient, invalid_request_payloads: Dict[str, Any]
|
|
) -> None:
|
|
payload = invalid_request_payloads["reporting_non_list_payload"]
|
|
response = api_client.post("/api/reporting/summary", json=payload)
|
|
assert response.status_code == 400
|
|
assert response.json()["detail"] == "Invalid input format"
|
|
|
|
|
|
@pytest.mark.usefixtures("invalid_request_payloads")
|
|
def test_reporting_summary_requires_result_field(
|
|
api_client: TestClient, invalid_request_payloads: Dict[str, Any]
|
|
) -> None:
|
|
payload = invalid_request_payloads["reporting_missing_result"]
|
|
response = api_client.post("/api/reporting/summary", json=payload)
|
|
assert response.status_code == 400
|
|
assert "must include numeric 'result'" in response.json()["detail"]
|
|
|
|
|
|
@pytest.mark.usefixtures("invalid_request_payloads")
|
|
def test_maintenance_negative_cost_rejected_by_schema(
|
|
api_client: TestClient, invalid_request_payloads: Dict[str, Any]
|
|
) -> None:
|
|
payload = invalid_request_payloads["maintenance_negative_cost"]
|
|
response = api_client.post("/api/maintenance/", json=payload)
|
|
assert response.status_code == 422
|
|
error_locations = [tuple(item["loc"]) for item in response.json()["detail"]]
|
|
assert ("body", "cost") in error_locations
|