REST Testing¶
loom.testing provides lightweight, deterministic test utilities for the REST
stack. You can test use cases in isolation, run full HTTP-level assertions
against a FastAPI TestClient, or seed real SQLAlchemy repositories for
integration tests.
Unit-test a use case directly¶
UseCaseTest compiles and executes the real execution plan without HTTP or
framework overhead.
from loom.testing import UseCaseTest
async def test_create_user():
fake_repo = InMemoryRepository(User)
result = await (
UseCaseTest(CreateUserUseCase())
.with_main_repo(fake_repo)
.with_input(full_name="Ada Lovelace", email="ada@example.com")
.run()
)
assert result.email == "ada@example.com"
Builder methods: with_params, with_input, with_command, with_loaded,
with_deps, with_main_repo. The .plan property returns the compiled
ExecutionPlan.
HTTP-level testing¶
HttpTestHarness builds a TestClient from RestInterface declarations with
fake repositories injected by model type.
from loom.testing import HttpTestHarness, InMemoryRepository
harness = HttpTestHarness()
harness.inject_repo(Product, InMemoryRepository(Product))
client = harness.build_app(interfaces=[ProductRestInterface])
resp = client.get("/products/")
assert resp.status_code == 200
Force errors on specific methods:
from loom.core.errors import NotFound
harness.force_error(Product, "get_by_id", NotFound("not found"))
Golden harness¶
GoldenHarness runs use cases in isolation with injected fake repositories.
run_with_baseline asserts execution time against a threshold.
Integration tests¶
RepositoryIntegrationHarness (via build_repository_harness) seeds real
SQLAlchemy repositories with declarative scenarios.
Snapshot testing¶
serialize_plan produces a deterministic, JSON-serialisable snapshot of an
ExecutionPlan for golden tests.