55 lines
1.7 KiB
Python
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
|