fix(tests+mutator): unbreak the docker-shadow test env + let mutator delete from active
Two related fixes that came out of running the W5 tests locally:
1. tests/__init__.py — empty file, makes 'tests/' a package so pytest
stops inserting it into sys.path. Without it, 'tests/docker/'
(the docker-image test category) shadowed the installed docker SDK
on every engine-touching test in the repo:
module 'docker' has no attribute 'DockerClient'
Pytest's default --import-mode=prepend was the culprit; making
tests/ a package is the cheapest fix and doesn't change
--import-mode for the whole tree.
2. delete_topology_decky / delete_topology_edge / delete_lan grow an
'enforce_pending: bool = True' kwarg. Default preserves the HTTP
CRUD guard (api_decky_crud / api_edge_crud / api_lan_crud get the
409 for free). apply_remove_decky / apply_detach_decky /
apply_remove_lan now pass enforce_pending=False — the mutator
queue is the live-editing surface and has its own active-topology
gating; the repo's pending-only guard was for design-time CRUD
that mustn't bypass it. Without this, apply_remove_decky was
silently broken on active topologies pre-W5; W5's new test
surfaced it on first run.
10/10 new W5 tests pass; 58/58 across mutator + topology suites.
This commit is contained in:
@@ -33,7 +33,12 @@ class TopologyEdgesMixin:
|
||||
edge_id: str,
|
||||
*,
|
||||
expected_version: Optional[int] = None,
|
||||
enforce_pending: bool = True,
|
||||
) -> None:
|
||||
"""Delete one edge. ``enforce_pending=True`` by default — the
|
||||
mutator's ``apply_detach_decky`` opts out, same rationale as
|
||||
``delete_topology_decky``.
|
||||
"""
|
||||
async with self._session() as session:
|
||||
result = await session.execute(
|
||||
select(TopologyEdge).where(TopologyEdge.id == edge_id)
|
||||
@@ -41,7 +46,8 @@ class TopologyEdgesMixin:
|
||||
edge = result.scalar_one_or_none()
|
||||
if edge is None:
|
||||
return
|
||||
await self._assert_pending(session, edge.topology_id)
|
||||
if enforce_pending:
|
||||
await self._assert_pending(session, edge.topology_id)
|
||||
if expected_version is not None:
|
||||
await self._check_and_bump_version(
|
||||
session, edge.topology_id, expected_version
|
||||
|
||||
Reference in New Issue
Block a user