from unittest.mock import AsyncMock, MagicMock, patch import pytest from remodel_api.db.models import Scenario from remodel_api.workers.tasks import run_dummy_scenario @pytest.fixture() def mock_redis() -> AsyncMock: r = AsyncMock() r.publish = AsyncMock() r.aclose = AsyncMock() return r async def test_run_dummy_scenario_success(mock_redis: AsyncMock) -> None: scenario = Scenario(name="worker-test", status="queued") session_mock = AsyncMock() session_mock.__aenter__ = AsyncMock(return_value=session_mock) session_mock.__aexit__ = AsyncMock(return_value=False) session_mock.get = AsyncMock(return_value=scenario) session_mock.commit = AsyncMock() factory_mock = MagicMock() factory_mock.return_value = session_mock with ( patch("remodel_api.workers.tasks.aioredis.from_url", return_value=mock_redis), patch("remodel_api.workers.tasks.AsyncSessionLocal", factory_mock), ): result = await run_dummy_scenario({}, "dummy-id") assert result["result"] == "dummy" assert result["id"] == "dummy-id" assert mock_redis.publish.called async def test_run_dummy_scenario_not_found(mock_redis: AsyncMock) -> None: session_mock = AsyncMock() session_mock.__aenter__ = AsyncMock(return_value=session_mock) session_mock.__aexit__ = AsyncMock(return_value=False) session_mock.get = AsyncMock(return_value=None) factory_mock = MagicMock() factory_mock.return_value = session_mock with ( patch("remodel_api.workers.tasks.aioredis.from_url", return_value=mock_redis), patch("remodel_api.workers.tasks.AsyncSessionLocal", factory_mock), ): result = await run_dummy_scenario({}, "missing-id") assert "error" in result