Spaces:
Running on Zero
Running on Zero
File size: 1,719 Bytes
83381c9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | from __future__ import annotations
import json
from pathlib import Path
from fastapi.testclient import TestClient
from drift_quant.api.app import app
def _write_artifacts(root: Path) -> None:
experiments = root / "experiments"
experiments.mkdir(parents=True)
identifier = "123e4567-e89b-12d3-a456-426614174000"
index = [
{
"experiment_id": identifier,
"strategy_name": "example",
"strategy_version": "1",
"dataset_id": "fixture",
"period_start": "2024-01-01",
"period_end_exclusive": "2024-02-01",
"metrics": {"cumulative_return": 0.1},
}
]
payload = {
**index[0],
"config": {"initial_capital": 1000},
"equity_curve": [{"timestamp": "2024-01-01 09:15:00", "equity": 1000, "gross_exposure": 0}],
"trades": [],
}
(experiments / "index.json").write_text(json.dumps(index), encoding="utf-8")
(experiments / f"{identifier}.json").write_text(json.dumps(payload), encoding="utf-8")
(root / "dataset_audit.json").write_text(json.dumps({"rows": 1}), encoding="utf-8")
def test_api_reads_persisted_artifacts_without_path_input(
tmp_path: Path, monkeypatch: object
) -> None:
_write_artifacts(tmp_path)
monkeypatch.setenv("DRIFT_ARTIFACTS_DIR", str(tmp_path)) # type: ignore[attr-defined]
client = TestClient(app)
listing = client.get("/api/v1/experiments")
assert listing.status_code == 200
experiment_id = listing.json()["items"][0]["experiment_id"]
assert client.get(f"/api/v1/experiments/{experiment_id}/equity").status_code == 200
assert client.get("/api/v1/experiments/../../etc/passwd").status_code == 404
|