Touched up notebooks + webapp
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from webapp.app import app
|
||||
|
||||
|
||||
client = TestClient(app)
|
||||
|
||||
|
||||
def test_health_endpoint():
|
||||
response = client.get("/api/health")
|
||||
assert response.status_code == 200
|
||||
payload = response.json()
|
||||
assert payload["ok"] is True
|
||||
assert payload["version"] == "0.4.7"
|
||||
|
||||
|
||||
def test_simulation_endpoint_preserves_equal_budget():
|
||||
response = client.post(
|
||||
"/api/simulate",
|
||||
json={
|
||||
"rng_seed": 3,
|
||||
"n_paths": 5,
|
||||
"n_steps": 100,
|
||||
"drop_fraction": 0.05,
|
||||
"rise_fraction": 0.08,
|
||||
"max_detection_lag_steps": 3,
|
||||
},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
payload = response.json()
|
||||
assert payload["adaptive_total_samples"] == payload["fixed_total_samples"]
|
||||
assert payload["max_detection_lag_steps"] == 3
|
||||
|
||||
def test_webapp_imports_from_source_checkout_without_installed_package(tmp_path):
|
||||
"""The documented direct uvicorn command must resolve the src-layout package."""
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
repo_root = Path(__file__).resolve().parents[1]
|
||||
env = os.environ.copy()
|
||||
env.pop("PYTHONPATH", None)
|
||||
completed = subprocess.run(
|
||||
[sys.executable, "-c", "import webapp.app; print(webapp.app.app.title)"],
|
||||
cwd=repo_root,
|
||||
env=env,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=False,
|
||||
)
|
||||
assert completed.returncode == 0, completed.stderr
|
||||
assert "Adaptive Barrier Monitor" in completed.stdout
|
||||
|
||||
|
||||
|
||||
def test_simulation_endpoint_supports_fixed_cadence():
|
||||
response = client.post(
|
||||
"/api/simulate",
|
||||
json={
|
||||
"rng_seed": 3,
|
||||
"n_paths": 5,
|
||||
"n_steps": 200,
|
||||
"window_minutes": 200.0,
|
||||
"dt_cap_minutes": 2.0,
|
||||
"comparison_mode": "fixed_cadence",
|
||||
"fixed_cadence_minutes": 20.0,
|
||||
},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
payload = response.json()
|
||||
assert payload["comparison_mode"] == "fixed_cadence"
|
||||
assert payload["fixed_cadence_minutes"] == 20.0
|
||||
assert payload["adaptive_total_samples"] != payload["fixed_total_samples"]
|
||||
|
||||
|
||||
def test_simulation_endpoint_rejects_unknown_comparison_mode():
|
||||
response = client.post(
|
||||
"/api/simulate",
|
||||
json={"comparison_mode": "unknown"},
|
||||
)
|
||||
assert response.status_code == 422
|
||||
Reference in New Issue
Block a user