50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
# [DEF:backend.tests.test_resource_service:Module]
|
|
# @TIER: STANDARD
|
|
# @PURPOSE: Contract-driven tests for ResourceService
|
|
# @RELATION: TESTS -> backend.src.services.resource_service
|
|
|
|
import pytest
|
|
from unittest.mock import MagicMock, patch
|
|
from src.services.resource_service import ResourceService
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_dashboards_with_status():
|
|
# [DEF:test_get_dashboards_with_status:Function]
|
|
# @TEST: ResourceService correctly enhances dashboard data
|
|
# @PRE: SupersetClient returns raw dashboards
|
|
# @POST: Returned dicts contain git_status and last_task
|
|
|
|
with patch("src.services.resource_service.SupersetClient") as mock_client, \
|
|
patch("src.services.resource_service.GitService") as mock_git:
|
|
|
|
service = ResourceService()
|
|
|
|
# Mock Superset response
|
|
mock_client.return_value.get_dashboards_summary.return_value = [
|
|
{"id": 1, "title": "Test Dashboard", "slug": "test"}
|
|
]
|
|
|
|
# Mock Git status
|
|
mock_git.return_value.get_repo.return_value = None # No repo
|
|
|
|
# Mock tasks
|
|
mock_task = MagicMock()
|
|
mock_task.id = "task-123"
|
|
mock_task.status = "RUNNING"
|
|
mock_task.params = {"resource_id": "dashboard-1"}
|
|
|
|
env = MagicMock()
|
|
env.id = "prod"
|
|
|
|
result = await service.get_dashboards_with_status(env, [mock_task])
|
|
|
|
assert len(result) == 1
|
|
assert result[0]["id"] == 1
|
|
assert "git_status" in result[0]
|
|
assert result[0]["last_task"]["task_id"] == "task-123"
|
|
assert result[0]["last_task"]["status"] == "RUNNING"
|
|
|
|
# [/DEF:test_get_dashboards_with_status:Function]
|
|
|
|
# [/DEF:backend.tests.test_resource_service:Module]
|