mirror of
https://github.com/tiennm99/export-telegram-group-members.git
synced 2026-09-10 04:19:43 +00:00
69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
import os
|
|
import unittest
|
|
from unittest.mock import MagicMock, call, patch
|
|
|
|
os.environ.setdefault('REDIS_URL', 'redis://localhost')
|
|
|
|
import crawl
|
|
|
|
|
|
class FakeChat:
|
|
def __init__(self, group_id):
|
|
self.id = group_id
|
|
self.title = f'Group {group_id}'
|
|
|
|
|
|
class FakeMember:
|
|
def __init__(self, member_id):
|
|
self.id = member_id
|
|
|
|
|
|
class CrawlMainTest(unittest.TestCase):
|
|
@patch.object(crawl, 'save_group_export')
|
|
@patch.object(crawl, 'save_session')
|
|
@patch.object(crawl, 'load_session', return_value='stored-session')
|
|
@patch.object(crawl, 'load_app_config')
|
|
@patch.object(crawl, 'TelegramClient')
|
|
def test_crawls_configured_group_ids(
|
|
self,
|
|
telegram_client,
|
|
load_app_config,
|
|
load_session,
|
|
save_session,
|
|
save_group_export,
|
|
):
|
|
load_app_config.return_value = {
|
|
'api_id': 123,
|
|
'api_hash': 'hash',
|
|
'phone': '+15551234567',
|
|
'group_ids': [101, 202],
|
|
}
|
|
client = MagicMock()
|
|
telegram_client.return_value = client
|
|
client.is_user_authorized.return_value = True
|
|
client.session.save.return_value = 'updated-session'
|
|
client.get_entity.side_effect = [FakeChat(101), FakeChat(202)]
|
|
client.get_participants.side_effect = [
|
|
[FakeMember(2), FakeMember(1)],
|
|
[FakeMember(4), FakeMember(3)],
|
|
]
|
|
|
|
with (
|
|
patch.object(crawl, 'Chat', FakeChat),
|
|
patch.object(crawl, 'Channel', FakeChat),
|
|
patch.object(crawl, 'StringSession', return_value='session'),
|
|
patch.object(crawl, 'new_run_time', return_value='20260724120000'),
|
|
):
|
|
result = crawl.main()
|
|
|
|
self.assertEqual(result, 0)
|
|
self.assertEqual(client.get_entity.call_args_list, [call(101), call(202)])
|
|
save_session.assert_called_once_with('updated-session')
|
|
self.assertEqual(save_group_export.call_count, 2)
|
|
first_members = save_group_export.call_args_list[0].args[2]
|
|
self.assertEqual([member.id for member in first_members], [1, 2])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|