Skip to content

Commit 143d97a

Browse files
fregataaclaude
andcommitted
fix(BA-5040): Fix test fixtures for RBAC-validated Image processors
Replace MagicMock(spec=ActionValidators) with plain MagicMock and AsyncMock validators to support nested attribute access and async validate() calls required by ScopeActionProcessor and SingleEntityActionProcessor. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 23f3570 commit 143d97a

2 files changed

Lines changed: 9 additions & 5 deletions

File tree

tests/component/image/conftest.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@
22

33
import uuid
44
from collections.abc import AsyncIterator, Callable
5-
from unittest.mock import MagicMock
5+
from unittest.mock import AsyncMock, MagicMock
66

77
import pytest
88
import sqlalchemy as sa
99
from sqlalchemy.ext.asyncio.engine import AsyncEngine as SAEngine
1010

1111
from ai.backend.common.container_registry import ContainerRegistryType
12-
from ai.backend.manager.actions.validators import ActionValidators
1312
from ai.backend.manager.api.rest.admin.handler import AdminHandler
1413
from ai.backend.manager.api.rest.admin.registry import register_admin_routes
1514
from ai.backend.manager.api.rest.image.handler import ImageHandler
@@ -37,8 +36,11 @@ def image_processors(
3736
) -> ImageProcessors:
3837
repo = ImageRepository(database_engine, valkey_clients.image, config_provider)
3938
service = ImageService(agent_registry, repo, config_provider)
39+
mock_validators = MagicMock()
40+
mock_validators.rbac.scope.validate = AsyncMock()
41+
mock_validators.rbac.single_entity.validate = AsyncMock()
4042
return ImageProcessors(
41-
service=service, action_monitors=[], validators=MagicMock(spec=ActionValidators)
43+
service=service, action_monitors=[], validators=mock_validators
4244
)
4345

4446

tests/unit/manager/services/image/test_image_service.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
from ai.backend.common.dto.agent.response import PurgeImageResp, PurgeImagesResp
2121
from ai.backend.common.exception import UnknownImageReference
2222
from ai.backend.common.types import AgentId, ImageCanonical, ImageID, SlotName
23-
from ai.backend.manager.actions.validators import ActionValidators
2423
from ai.backend.manager.data.container_registry.types import ContainerRegistryData
2524
from ai.backend.manager.data.image.types import (
2625
ImageAliasData,
@@ -119,7 +118,10 @@ def image_service(
119118
@pytest.fixture
120119
def processors(self, image_service: ImageService) -> ImageProcessors:
121120
"""Create ImageProcessors with mock ImageService."""
122-
return ImageProcessors(image_service, [], MagicMock(spec=ActionValidators))
121+
mock_validators = MagicMock()
122+
mock_validators.rbac.scope.validate = AsyncMock()
123+
mock_validators.rbac.single_entity.validate = AsyncMock()
124+
return ImageProcessors(image_service, [], mock_validators)
123125

124126
@pytest.fixture
125127
def container_registry_id(self) -> uuid.UUID:

0 commit comments

Comments
 (0)