69 lines
2.6 KiB
Python
69 lines
2.6 KiB
Python
import unittest
|
|
|
|
from types import SimpleNamespace
|
|
from unittest.mock import AsyncMock, Mock, patch
|
|
|
|
from database.scheduled_broadcasts import create_scheduled_broadcast, list_scheduled_broadcasts
|
|
|
|
|
|
class ScheduledBroadcastResolutionTests(unittest.IsolatedAsyncioTestCase):
|
|
async def test_create_scheduled_broadcast_resolves_user_and_mirror_tg(self):
|
|
session = SimpleNamespace(add=Mock(), commit=AsyncMock(), refresh=AsyncMock())
|
|
creator = SimpleNamespace(id=10, tg_id=555)
|
|
|
|
with patch("database.scheduled_broadcasts.resolve_user_optional", new=AsyncMock(return_value=creator)):
|
|
broadcast = await create_scheduled_broadcast(
|
|
session=session,
|
|
created_by_tg_id=999,
|
|
send_to="all",
|
|
cluster_name=None,
|
|
text="hello",
|
|
photo=None,
|
|
keyboard_json=None,
|
|
scheduled_for=SimpleNamespace(),
|
|
workers=5,
|
|
messages_per_second=20,
|
|
)
|
|
|
|
self.assertEqual(broadcast.created_by_user_id, 10)
|
|
self.assertEqual(broadcast.created_by_tg_id, 555)
|
|
session.commit.assert_awaited_once()
|
|
session.refresh.assert_awaited_once_with(broadcast)
|
|
|
|
async def test_create_scheduled_broadcast_keeps_legacy_tg_when_user_missing(self):
|
|
session = SimpleNamespace(add=Mock(), commit=AsyncMock(), refresh=AsyncMock())
|
|
|
|
with patch("database.scheduled_broadcasts.resolve_user_optional", new=AsyncMock(return_value=None)):
|
|
broadcast = await create_scheduled_broadcast(
|
|
session=session,
|
|
created_by_tg_id=123456,
|
|
send_to="all",
|
|
cluster_name=None,
|
|
text="hello",
|
|
photo=None,
|
|
keyboard_json=None,
|
|
scheduled_for=SimpleNamespace(),
|
|
workers=5,
|
|
messages_per_second=20,
|
|
)
|
|
|
|
self.assertIsNone(broadcast.created_by_user_id)
|
|
self.assertEqual(broadcast.created_by_tg_id, 123456)
|
|
|
|
async def test_list_scheduled_broadcasts_filters_by_created_by_tg(self):
|
|
rows = [SimpleNamespace(id="a"), SimpleNamespace(id="b")]
|
|
session = SimpleNamespace(
|
|
execute=AsyncMock(return_value=SimpleNamespace(scalars=lambda: SimpleNamespace(all=lambda: rows)))
|
|
)
|
|
|
|
result = await list_scheduled_broadcasts(
|
|
session=session,
|
|
statuses=None,
|
|
created_by_tg_id=777,
|
|
limit=10,
|
|
offset=0,
|
|
)
|
|
|
|
self.assertEqual(result, rows)
|
|
session.execute.assert_awaited_once()
|