Remodel/packages/api/tests/test_worker_tasks.py

55 lines
1.7 KiB
Python

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