sand-boxer/tests/test_api.py
tegwick 8e0465865a Finish SAND-WP-0002: remote smoke, podman-compose, HTTP stub
- T10 smoke passed on CoulombCore (sand-boxer self-deploy, sandbox 4e542c51)
- Add e2e smoke compose, scripts/smoke-compose-e2e.sh, make smoke-remote
- Support SANDBOXER_COMPOSE_CMD for podman-compose hosts
- FastAPI v0 stub at sandboxer.api.app; migration gaps doc
- Mark workplan finished (all 10 tasks done)
2026-06-23 16:52:29 +02:00

49 lines
No EOL
1.5 KiB
Python

"""HTTP API v0 stub tests."""
from unittest.mock import patch
from fastapi.testclient import TestClient
from sandboxer.api.app import app
from sandboxer.models import ActorType, Consumer, SandboxState, SandboxStatus
def test_list_sandboxes_empty() -> None:
with patch("sandboxer.api.app._manager") as mgr:
mgr.list.return_value = []
client = TestClient(app)
assert client.get("/v1/sandboxes").json() == []
def test_get_sandbox_not_found() -> None:
with patch("sandboxer.api.app._manager") as mgr:
mgr.get.return_value = None
client = TestClient(app)
assert client.get("/v1/sandboxes/missing").status_code == 404
def test_create_sandbox() -> None:
from datetime import UTC, datetime
status = SandboxStatus(
sandbox_id="abc12345",
profile_id="profile.compose-e2e",
extension_id="ext.compose-ssh",
state=SandboxState.READY,
consumer=Consumer(actor=ActorType.ADM, project="sand-boxer"),
created_at=datetime.now(UTC),
updated_at=datetime.now(UTC),
)
with patch("sandboxer.api.app._manager") as mgr:
mgr.create.return_value = status
client = TestClient(app)
resp = client.post(
"/v1/sandboxes",
json={
"profile": "profile.compose-e2e",
"inputs": {"repo": "/tmp/x"},
"consumer": {"actor": "adm", "project": "sand-boxer"},
},
)
assert resp.status_code == 200
assert resp.json()["sandbox_id"] == "abc12345"