#!/usr/bin/env python import unittest from unittest.mock import MagicMock import os import re import sys from dataclasses import dataclass fakes_dir = os.path.join(os.path.dirname(__file__), 'fakes') assert(os.path.exists(fakes_dir)) sys.path.insert(0, fakes_dir) import autobanbot CHAT_ID = "Chat ID" USER_ID = "User ID" MESSAGE_ID = "Message ID" BOT_SPEC = ["kick_chat_member", "delete_message"] @dataclass class Chat: ban_member = MagicMock() effective_name = "effective_chat_name" @dataclass class User: id = 0 name = "User name" @dataclass class Message: text = "Message text" delete = MagicMock() chat = Chat() from_user = User() @dataclass class Update: message = Message() def make_update(msg: str) -> Update: update = Update() update.message.text = msg return update class TestAutoBanBot(unittest.IsolatedAsyncioTestCase): def setUp(self): self.regexes = list(map(lambda r: re.compile(r, re.I), ["test123", "(t\\.me\\/|\\@)[a-z]+bot"])) async def test_not_bannable(self): messages = ["not bannable message", "siematest_123elo", "i am not a bot", "t.me, i'm not a bot"] for msg in messages: with self.subTest(msg=msg): update = make_update(msg) await autobanbot.new_msg(update, None, self.regexes) update.message.delete.assert_not_called() update.message.chat.ban_member.assert_not_called() if __name__ == '__main__': unittest.main()