diff --git a/features/steps/tdd_data_integrity_session_rollback_7489_steps.py b/features/steps/tdd_data_integrity_session_rollback_7489_steps.py index af663a5b7..9c41547d7 100644 --- a/features/steps/tdd_data_integrity_session_rollback_7489_steps.py +++ b/features/steps/tdd_data_integrity_session_rollback_7489_steps.py @@ -268,11 +268,23 @@ def step_create_resource(context: Context) -> None: # Configure the session to return a resource type row (so type validation passes) type_row_mock = MagicMock() type_row_mock.name = "test/resource-type" - query_mock = MagicMock() - # First query (for resource type) returns the type row - # Second query (for existing resource) returns None - query_mock.filter_by.return_value.first.side_effect = [type_row_mock, None] - context.shared_session.query.return_value = query_mock + + # Use a side_effect function on session.query so that each call returns + # the correct mock regardless of how many times the @database_retry + # decorator retries the operation. + from cleveragents.infrastructure.database.models import ResourceTypeModel + + def query_side_effect(model_class: Any) -> MagicMock: + q = MagicMock() + if model_class is ResourceTypeModel: + # Type-lookup query: always return the type row + q.filter_by.return_value.first.return_value = type_row_mock + else: + # Duplicate-check query: always return None (no existing resource) + q.filter_by.return_value.first.return_value = None + return q + + context.shared_session.query.side_effect = query_side_effect try: context.repo_under_test.create(_make_fake_resource()) except Exception as exc: