From a263b28a70ee9c7b0d621a51ec1f3cc3f56c8361 Mon Sep 17 00:00:00 2001 From: kotolex Date: Sat, 23 Dec 2023 16:51:28 +0500 Subject: [PATCH] =?UTF-8?q?fix=20test:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BC=D0=BE=D0=BA=D0=B8=20=D0=B0=D0=BD=D1=82?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D0=B0=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_bot.py | 166 ++++++++++++++++++++++++++++------------------ 1 file changed, 101 insertions(+), 65 deletions(-) diff --git a/tests/test_bot.py b/tests/test_bot.py index eb7fd6d..c6da398 100644 --- a/tests/test_bot.py +++ b/tests/test_bot.py @@ -87,8 +87,11 @@ class TestBot(IsolatedAsyncioTestCase): RESULTS.clear() async def test_start(self): - await self.bot.process_new_updates([get_update('/start')]) - self.assertEqual(RESULTS[0][0]['text'], "Начни с прочтения") + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/start')]) + self.assertEqual(RESULTS[0][0]['text'], "Начни с прочтения") async def test_non_grata(self): await self.bot.process_new_updates([get_update('как вам дударь?')]) @@ -99,96 +102,134 @@ class TestBot(IsolatedAsyncioTestCase): self.assertEqual(RESULTS[0][0]['text'], "у нас тут таких не любят") async def test_rules(self): - await self.bot.process_new_updates([get_update('/rules')]) - self.assertEqual(RESULTS[0][0]['text'], "Читай...") - self.assertTrue("https://telegra.ph/pythonchatru-07-07" in RESULTS[0][0]['reply_markup']) + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/rules')]) + self.assertEqual(RESULTS[0][0]['text'], "Читай...") + self.assertTrue("https://telegra.ph/pythonchatru-07-07" in RESULTS[0][0]['reply_markup']) async def test_faq(self): - await self.bot.process_new_updates([get_update('/faq')]) - self.assertEqual(RESULTS[0][0]['text'], "Читай...") - self.assertTrue("https://telegra.ph/faq-10-07-4" in RESULTS[0][0]['reply_markup']) + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/faq')]) + self.assertEqual(RESULTS[0][0]['text'], "Читай...") + self.assertTrue("https://telegra.ph/faq-10-07-4" in RESULTS[0][0]['reply_markup']) async def test_lib(self): - await self.bot.process_new_updates([get_update('/lib')]) - self.assertEqual(RESULTS[0][0]['text'], "Читай...") - self.assertTrue("https://telegra.ph/what-to-read-10-06" in RESULTS[0][0]['reply_markup']) + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/lib')]) + self.assertEqual(RESULTS[0][0]['text'], "Читай...") + self.assertTrue("https://telegra.ph/what-to-read-10-06" in RESULTS[0][0]['reply_markup']) async def test_tr(self): - await self.bot.process_new_updates([get_update('/tr', reply_to="ghbdtn")]) - self.assertEqual(RESULTS[0][0]['text'], "привет") + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/tr', reply_to="ghbdtn")]) + self.assertEqual(RESULTS[0][0]['text'], "привет") async def test_tr2(self): - await self.bot.process_new_updates([get_update('/tr', reply_to="руддщ")]) - self.assertEqual(RESULTS[0][0]['text'], "hello") + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/tr', reply_to="руддщ")]) + self.assertEqual(RESULTS[0][0]['text'], "hello") async def test_tsya(self): - await self.bot.process_new_updates([get_update('/tsya')]) - self.assertEqual(RESULTS[0][0]['text'], "-тся и -ться в глаголах") - self.assertTrue("https://tsya.ru/" in RESULTS[0][0]['reply_markup']) + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/tsya')]) + self.assertEqual(RESULTS[0][0]['text'], "-тся и -ться в глаголах") + self.assertTrue("https://tsya.ru/" in RESULTS[0][0]['reply_markup']) async def test_nometa(self): text = """Не задавай мета-вопросов вроде:\n «Можно задать вопрос?»\n «Кто-нибудь пользовался .. ?»\n «Привет, мне нужна помощь по .. !»\n\nПросто спроси сразу! И чем лучше объяснишь проблему, тем вероятнее получишь помощь.""" - await self.bot.process_new_updates([get_update('/nometa', reply_to="кто тут питонист?")]) - self.assertEqual(RESULTS[0][0]['text'], text) + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/nometa', reply_to="кто тут питонист?")]) + self.assertEqual(RESULTS[0][0]['text'], text) async def test_neprivet(self): - await self.bot.process_new_updates([get_update('/neprivet', reply_to="привет всем")]) - self.assertEqual(RESULTS[0][0]['text'], "Пожалуйста, не пишите просто «Привет» в чате.") - self.assertTrue("https://neprivet.com/" in RESULTS[0][0]['reply_markup']) + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/neprivet', reply_to="привет всем")]) + self.assertEqual(RESULTS[0][0]['text'], "Пожалуйста, не пишите просто «Привет» в чате.") + self.assertTrue("https://neprivet.com/" in RESULTS[0][0]['reply_markup']) async def test_lutz(self): - await self.bot.process_new_updates([get_update('/lutz', reply_to="привет всем")]) - self.assertEqual(RESULTS[0][0]['caption'], "вот, не позорься") - self.assertEqual(RESULTS[0][0]['document'], LUTZ_ID) - self.assertEqual(RESULTS[0][1], "sendDocument") - self.assertEqual(RESULTS[1][1], "deleteMessage") + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/lutz', reply_to="привет всем")]) + self.assertEqual(RESULTS[0][0]['caption'], "вот, не позорься") + self.assertEqual(RESULTS[0][0]['document'], LUTZ_ID) + self.assertEqual(RESULTS[0][1], "sendDocument") + self.assertEqual(RESULTS[1][1], "deleteMessage") async def test_bdmtss(self): - await self.bot.process_new_updates([get_update('/bdmtss', reply_to="привет всем")]) - self.assertEqual(RESULTS[0][0]['voice'], BDMTSS_ID) - self.assertEqual(RESULTS[0][1], "sendVoice") - self.assertEqual(RESULTS[1][1], "deleteMessage") + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/bdmtss', reply_to="привет всем")]) + self.assertEqual(RESULTS[0][0]['voice'], BDMTSS_ID) + self.assertEqual(RESULTS[0][1], "sendVoice") + self.assertEqual(RESULTS[1][1], "deleteMessage") async def test_google(self): - await self.bot.process_new_updates([get_update('/g', reply_to="python")]) - self.assertEqual(RESULTS[0][0]['text'], "Ищем «python»...") - self.assertTrue("https://www.google.com/search?q=python" in RESULTS[0][0]['reply_markup']) + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/g', reply_to="python")]) + self.assertEqual(RESULTS[0][0]['text'], "Ищем «python»...") + self.assertTrue("https://www.google.com/search?q=python" in RESULTS[0][0]['reply_markup']) async def test_nojob(self): text = """Мы здесь не для того, чтобы за тебя решать задачи.\n\nЗдесь помогают по конкретным вопросам в ТВОЁМ коде, поэтому тебе нужно показать код, который ты написал сам и объяснить где и почему застрял... всё просто. 🤷🏼️""" - await self.bot.process_new_updates([get_update('/nojob', reply_to="есть работа")]) - self.assertEqual(RESULTS[0][0]['text'], text) + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/nojob', reply_to="есть работа")]) + self.assertEqual(RESULTS[0][0]['text'], text) async def test_nobot(self): text = """Внимание:\nТелеграм бот не должен быть твоим первым проектом на Python. Пожалуйста, изучи основы Python, работу с модулями, основы веб-технологий, асинхронное программирование и отладку до начала работы с Телеграм ботами. Существует много ресурсов для этого в интернете.""" - await self.bot.process_new_updates([get_update('/nobot', reply_to="как бота написать?")]) - self.assertEqual(RESULTS[0][0]['text'], text) + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/nobot', reply_to="как бота написать?")]) + self.assertEqual(RESULTS[0][0]['text'], text) async def test_nogui(self): text = """Внимание:\nGUI приложение не должно быть твоим первым проектом на Python. Пожалуйста, изучи основы Python, работу с модулями, циклы событий и отладку до начала работы с какими-либо GUI-фреймворками. Существует много ресурсов для этого в интернете.""" - await self.bot.process_new_updates([get_update('/nogui', reply_to="как gui написать?")]) - self.assertEqual(RESULTS[0][0]['text'], text) + # Нужно пропустить проверку на спам + with patch("src.filters.is_antispam_enabled") as mocked: + mocked.return_value = False + await self.bot.process_new_updates([get_update('/nogui', reply_to="как gui написать?")]) + self.assertEqual(RESULTS[0][0]['text'], text) async def test_spam_text(self): # Нужно подставить антиспам вкл. with patch("src.filters.is_antispam_enabled") as mocked: - # Нужно подменить инкремент, нельзя реально в шелве работать в тестах - with patch("src.commands.increment") as _mocked_shelve: - mocked.return_value = True - await self.bot.process_new_updates([get_update('пишите мне в ЛС, Писать в ЛС')]) - self.assertEqual(RESULTS[0][1], "deleteMessage") - self.assertEqual(RESULTS[1][1], "banChatMember") - self.assertEqual(RESULTS[1][0], {'chat_id': 11, 'user_id': 10, 'until_date': None}) + mocked.return_value = True + await self.bot.process_new_updates([get_update('пишите мне в ЛС, Писать в ЛС')]) + self.assertEqual(RESULTS[0][1], "deleteMessage") + self.assertEqual(RESULTS[1][1], "banChatMember") + self.assertEqual(RESULTS[1][0], {'chat_id': 11, 'user_id': 10, 'until_date': None}) async def test_wrong_url(self): # Нужно подставить антиспам вкл. with patch("src.filters.is_antispam_enabled") as mocked: - # Нужно подменить инкремент, нельзя реально в шелве работать в тестах - with patch("src.commands.increment") as _mocked_shelve: - mocked.return_value = True - await self.bot.process_new_updates([get_update('тут подробнее https://zvuk.com/artist/61375')]) - self.assertEqual(RESULTS[0][1], "deleteMessage") - self.assertEqual(RESULTS[0][0], {'chat_id': 11, 'message_id': 1}) + mocked.return_value = True + await self.bot.process_new_updates([get_update('тут подробнее https://zvuk.com/artist/61375')]) + self.assertEqual(RESULTS[0][1], "deleteMessage") + self.assertEqual(RESULTS[0][0], {'chat_id': 11, 'message_id': 1}) async def test_update_stats(self): # Нужно подставить антиспам вкл. @@ -205,15 +246,10 @@ class TestBot(IsolatedAsyncioTestCase): async def test_admin_can_delete(self): # Нужно подставить антиспам вкл. with patch("src.filters.is_antispam_enabled") as mocked: - # Нужно подменить инкремент, нельзя реально в шелве работать в тестах - with patch("src.commands.increment") as _mocked_shelve: - # Подменяем обновление статистики, нам важно что оно просто было вызвано - with patch("src.commands.update_stats") as update_stats: - mocked.return_value = True - update_stats.side_effect = lambda x: None - await self.bot.process_new_updates([get_update('/ddel', reply_to="shit text", user_id=ADMIN_ID)]) - self.assertEqual(RESULTS[0], ({'chat_id': 11, 'message_id': 1}, 'deleteMessage')) - self.assertEqual(RESULTS[1], ({'chat_id': 11, 'message_id': 2}, 'deleteMessage')) + mocked.return_value = True + await self.bot.process_new_updates([get_update('/ddel', reply_to="shit text", user_id=ADMIN_ID)]) + self.assertEqual(RESULTS[0], ({'chat_id': 11, 'message_id': 1}, 'deleteMessage')) + self.assertEqual(RESULTS[1], ({'chat_id': 11, 'message_id': 2}, 'deleteMessage')) async def test_user_cant(self): for command in ('/ddel', '/bban', '/unban_id', '/unban_id 1', '/add', '/remove'): @@ -265,9 +301,9 @@ class TestBot(IsolatedAsyncioTestCase): # Нужно подменить инкремент, нельзя реально в шелве работать в тестах with patch("src.commands.increment") as _mocked_shelve: # Подменяем обновление статистики, нам важно что оно просто было вызвано - with patch("src.commands.update_stats") as update_stats: + with patch("src.stan.add_quote") as aq: mocked.return_value = [] - update_stats.side_effect = lambda x: None + aq.side_effect = lambda *a: None await self.bot.process_new_updates([get_update('/add', reply_to="good text", user_id=100)]) self.assertEqual(RESULTS[0][1], 'sendMessage') self.assertEqual(RESULTS[0][0]['text'], '➕\n └ good text')