forked from HAL9000/cleveragents-core
31472b5413
Add Behave feature/step pairs that exercise uncovered branches across handlers, LSP, CLI, and service layers to reach the coverage gate. ISSUES CLOSED: #1232
178 lines
5.8 KiB
Python
178 lines
5.8 KiB
Python
"""Step definitions for _DefaultHandler NotImplementedError coverage (rhscov3).
|
|
|
|
Covers lines 275, 279, 283, 287, 291, 295-296, 308, 318-319, 330, 340
|
|
in resource_handler_service.py — all the CRUD and lifecycle stubs on the
|
|
private _DefaultHandler class that raise NotImplementedError.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
from behave import given, then, when
|
|
|
|
from cleveragents.application.services.resource_handler_service import (
|
|
_DefaultHandler,
|
|
)
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Given steps
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
@given("rhscov3 a _DefaultHandler with a dummy type spec")
|
|
def step_rhscov3_default_handler(context):
|
|
type_spec = MagicMock()
|
|
type_spec.name = "dummy-type"
|
|
type_spec.sandbox_strategy = "copy_on_write"
|
|
type_spec.handler = None
|
|
context.rhscov3_handler = _DefaultHandler(type_spec=type_spec)
|
|
context.rhscov3_error = None
|
|
|
|
|
|
@given("rhscov3 a dummy resource")
|
|
def step_rhscov3_dummy_resource(context):
|
|
resource = MagicMock()
|
|
resource.resource_id = "01ARZ3NDEKTSV4RRFFQ69G5FAV"
|
|
resource.resource_type_name = "dummy-type"
|
|
resource.location = "/tmp/dummy"
|
|
resource.sandbox_strategy = None
|
|
context.rhscov3_resource = resource
|
|
|
|
|
|
@given("rhscov3 a mock sandbox manager")
|
|
def step_rhscov3_mock_sandbox_manager(context):
|
|
context.rhscov3_sandbox_manager = MagicMock()
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# When steps — CRUD stubs
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
@when("rhscov3 I call read on the default handler")
|
|
def step_rhscov3_call_read(context):
|
|
try:
|
|
context.rhscov3_handler.read(resource=context.rhscov3_resource, path="")
|
|
except NotImplementedError as exc:
|
|
context.rhscov3_error = exc
|
|
|
|
|
|
@when("rhscov3 I call write on the default handler")
|
|
def step_rhscov3_call_write(context):
|
|
try:
|
|
context.rhscov3_handler.write(
|
|
resource=context.rhscov3_resource, path="file.txt", data=b"data"
|
|
)
|
|
except NotImplementedError as exc:
|
|
context.rhscov3_error = exc
|
|
|
|
|
|
@when("rhscov3 I call delete on the default handler")
|
|
def step_rhscov3_call_delete(context):
|
|
try:
|
|
context.rhscov3_handler.delete(resource=context.rhscov3_resource, path="")
|
|
except NotImplementedError as exc:
|
|
context.rhscov3_error = exc
|
|
|
|
|
|
@when("rhscov3 I call list_children on the default handler")
|
|
def step_rhscov3_call_list_children(context):
|
|
try:
|
|
context.rhscov3_handler.list_children(resource=context.rhscov3_resource)
|
|
except NotImplementedError as exc:
|
|
context.rhscov3_error = exc
|
|
|
|
|
|
@when("rhscov3 I call diff on the default handler")
|
|
def step_rhscov3_call_diff(context):
|
|
try:
|
|
context.rhscov3_handler.diff(
|
|
resource=context.rhscov3_resource, other_location="/tmp/other"
|
|
)
|
|
except NotImplementedError as exc:
|
|
context.rhscov3_error = exc
|
|
|
|
|
|
@when("rhscov3 I call discover_children on the default handler")
|
|
def step_rhscov3_call_discover_children(context):
|
|
try:
|
|
context.rhscov3_handler.discover_children(resource=context.rhscov3_resource)
|
|
except NotImplementedError as exc:
|
|
context.rhscov3_error = exc
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# When steps — lifecycle stubs
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
@when("rhscov3 I call create_sandbox on the default handler")
|
|
def step_rhscov3_call_create_sandbox(context):
|
|
try:
|
|
context.rhscov3_handler.create_sandbox(
|
|
resource=context.rhscov3_resource,
|
|
plan_id="plan-001",
|
|
sandbox_manager=context.rhscov3_sandbox_manager,
|
|
)
|
|
except NotImplementedError as exc:
|
|
context.rhscov3_error = exc
|
|
|
|
|
|
@when("rhscov3 I call create_checkpoint on the default handler")
|
|
def step_rhscov3_call_create_checkpoint(context):
|
|
try:
|
|
context.rhscov3_handler.create_checkpoint(
|
|
resource=context.rhscov3_resource,
|
|
plan_id="plan-001",
|
|
sandbox_manager=context.rhscov3_sandbox_manager,
|
|
phase="execution",
|
|
)
|
|
except NotImplementedError as exc:
|
|
context.rhscov3_error = exc
|
|
|
|
|
|
@when("rhscov3 I call rollback_to on the default handler")
|
|
def step_rhscov3_call_rollback_to(context):
|
|
try:
|
|
context.rhscov3_handler.rollback_to(
|
|
resource=context.rhscov3_resource,
|
|
plan_id="plan-001",
|
|
checkpoint_id="chk-001",
|
|
sandbox_manager=context.rhscov3_sandbox_manager,
|
|
)
|
|
except NotImplementedError as exc:
|
|
context.rhscov3_error = exc
|
|
|
|
|
|
@when("rhscov3 I call project_access on the default handler")
|
|
def step_rhscov3_call_project_access(context):
|
|
try:
|
|
context.rhscov3_handler.project_access(
|
|
resource=context.rhscov3_resource,
|
|
principal="agent-1",
|
|
action="read",
|
|
project_id="proj-001",
|
|
)
|
|
except NotImplementedError as exc:
|
|
context.rhscov3_error = exc
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Then steps
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
@then('rhscov3 a NotImplementedError is stored containing "{fragment}"')
|
|
def step_rhscov3_assert_not_implemented(context, fragment):
|
|
assert context.rhscov3_error is not None, (
|
|
"Expected a NotImplementedError but no error was raised"
|
|
)
|
|
assert isinstance(context.rhscov3_error, NotImplementedError), (
|
|
f"Expected NotImplementedError, got {type(context.rhscov3_error).__name__}: "
|
|
f"{context.rhscov3_error}"
|
|
)
|
|
assert fragment in str(context.rhscov3_error), (
|
|
f"Expected '{fragment}' in error message, got: {context.rhscov3_error}"
|
|
)
|