"""Builders for integration tests. Keeps the tests about the behaviour under test.""" from __future__ import annotations from datetime import UTC, datetime from uuid import UUID, uuid4 from svcforge_core.domain.models import Instance from svcforge_core.domain.states import InstanceState from svcforge_core.repo.db import DictPool from svcforge_core.repo.instances import InstanceRepo def build_instance( team: str = "platform", service_type: str = "elasticsearch", size: str = "small", state: InstanceState = InstanceState.REQUESTED, chart_version: str = "21.3.19", ) -> Instance: """An Instance with a deterministic release_name, as the domain requires.""" iid = uuid4() now = datetime.now(UTC) return Instance( id=iid, team=team, service_type=service_type, size=size, state=state, namespace=f"tenant-{team}", release_name=f"{team}-{service_type}-{str(iid)[:8]}", chart_version=chart_version, created_at=now, updated_at=now, ) async def make_instance(pool: DictPool, **kwargs: object) -> UUID: """Insert an instance and return its id.""" inst = build_instance(**kwargs) # type: ignore[arg-type] repo = InstanceRepo(pool) async with pool.connection() as conn: await repo.create(conn, inst) return inst.id