Beispiel #1
0
    def test_run_ok(self):
        send_mock = Mock()
        api_mock = Mock()
        api_mock.messages.send = send_mock

        events = []
        for input_text in self.INPUTS:
            event = deepcopy(self.RAW_EVENT)
            event['object']['message']['text'] = input_text
            events.append(VkBotMessageEvent(event))

        long_poller_mock = Mock()
        long_poller_mock.listen = Mock(return_value=events)

        time_now = time_machine.travel(
            datetime.datetime(year=2020, month=5, day=25))
        time_now.start()

        with patch('avia_ticket_bot.vk_api.bot_longpoll.VkBotLongPoll',
                   return_value=long_poller_mock):
            bot = ChatBot('', '')
            bot.api = api_mock
            bot.send_image = Mock()
            bot.run()

        time_now.stop()

        assert send_mock.call_count == len(self.INPUTS)

        real_outputs = []
        for call in send_mock.call_args_list:
            args, kwargs = call
            real_outputs.append(kwargs['message'])
        assert real_outputs == self.EXPECTED_OUTPUTS
Beispiel #2
0
    def test_bot(self):
        send_mock = Mock()
        api_mock = Mock()
        api_mock.messages.send = send_mock
        logger_mock = Mock('chatbot.logger')
        logger_mock.debug = Mock()
        logger_mock.info = Mock()

        events = []
        for input_text in self.INPUTS:
            event_row = deepcopy(self.RAW_EVENT)
            event_row['object']['text'] = input_text
            events.append(VkBotMessageEvent(raw=event_row))

        longpoller_listen_mock = Mock()
        longpoller_listen_mock.listen = Mock(return_value=events)

        with patch('chatbot.VkBotLongPoll',
                   return_value=longpoller_listen_mock):
            bot = Bot('', '', logger_mock)
            bot.api = api_mock
            bot.run()

        assert send_mock.call_count == len(self.INPUTS)

        real_outputs = []
        for call in send_mock.call_args_list:
            args, kwargs = call
            real_outputs.append(kwargs['message'])
        assert real_outputs == self.EXPECTED_OUTPUT
Beispiel #3
0
    def test_on_event(self):
        """
        Тестирование осноной функции on_event
        """
        send_mock = Mock()
        api_mock = Mock()
        api_mock.messages.send = send_mock

        events = []
        for input_text in self.INPUTS:
            event = deepcopy(self.RAW_EVENT)
            event["object"]["text"] = input_text
            events.append(VkBotMessageEvent(event))

        long_poller_mock = Mock()
        long_poller_mock.listen = Mock(return_value=events)

        with patch("bot.VkBotLongPoll", return_value=long_poller_mock):
            with patch("api_yandex.forming_answer",
                       return_value=self.LIST_FLIGHTS):
                bot = Bot("", "")
                bot.api = api_mock
                bot.send_image = Mock()
                bot.run()
        assert send_mock.call_count == len(self.INPUTS)

        real_outputs = []
        for call in send_mock.call_args_list:
            args, kwargs = call
            real_outputs.append(kwargs["message"])
        assert real_outputs == self.ANSWER
Beispiel #4
0
    def test_run_ok(self):
        api_mock = Mock()
        send_mock = Mock()
        api_mock.messages.send = send_mock

        events = []
        for input_text in self.INPUTS:
            event = deepcopy(self.RAW_EVENT)
            event["object"]["message"]["text"] = input_text
            events.append(VkBotMessageEvent(raw=event))

        long_poller_mock = Mock()
        long_poller_mock.listen = Mock(return_value=events)

        with patch("vkbot.VkBotLongPoll", return_value=long_poller_mock):
            bot = VKBot("", "")
            bot.api = api_mock
            bot.run()

        assert send_mock.call_count == len(self.INPUTS) + 5  # метод get_flight отправляет юзеру 5 полетов дополнительно

        real_outputs = []
        for call in send_mock.call_args_list:
            args, kwargs = call
            real_outputs.append(kwargs["message"])

        assert real_outputs == self.EXPECTED_OUTPUTS
    def test_run_ok(self):
        events = []
        for input_text in self.INPUTS:
            event = deepcopy(self.RAW_EVENT)
            event['object']['message']['text'] = input_text
            events.append(VkBotMessageEvent(event))

        send_mock = Mock()
        long_poller_mock = Mock()
        long_poller_mock.listen = Mock(return_value=events)

        with patch('air_ticket_bot.VkBotLongPoll',
                   return_value=long_poller_mock):
            bot = Bot(group_id='', group_token='')
            bot.api = Mock()
            bot.send_image = Mock()
            bot.api.messages.send = send_mock
            bot.run()
        assert send_mock.call_count == len(self.INPUTS)

        real_outputs = []
        for call in send_mock.call_args_list:
            args, kwargs = call
            real_outputs.append(kwargs['message'])

        # чтобы как-то упорядочить рандомную дату
        real_outputs[6] = settings.SCENARIOS['order_ticket']['steps']['step5'][
            'text'].format(result_flights_str=True)
        real_outputs[9] = settings.SCENARIOS['order_ticket']['steps']['step8'][
            'text'].format(name='Иван',
                           departure='Москва',
                           arrival='Лондон',
                           flight_date_to_output=True,
                           spaces='1')
        assert real_outputs == self.EXPECTED_OUTPUTS
Beispiel #6
0
    def test_run_ok(self):
        send_mock = Mock()
        api_mock = Mock()
        api_mock.messages.send = send_mock

        events = []
        for input_text in self.INPUTS:
            event = deepcopy(self.RAW_IVENT)
            event['object']['message']['text'] = input_text
            events.append(VkBotMessageEvent(event))

        long_poller_mock = Mock()
        long_poller_mock.listen = Mock(return_value=events)

        with patch('bot.VkBotLongPoll', return_value=long_poller_mock):
            bot = Bot('', '')
            bot.api = api_mock
            bot.send_image = Mock()
            bot.run()

        assert send_mock.call_count == len(self.INPUTS)

        real_outputs = []
        for call in send_mock.call_args_list:
            args, kwargs = call
            real_outputs.append(kwargs['message'])

        assert real_outputs == self.EXPECTED_OUTPUTS
Beispiel #7
0
 def handle(self, data):
     event = VkBotMessageEvent(data)
     msg = event.object
     if msg.text:
         id = str(msg.from_id)
         if id in self.pending():
             try:
                 to = random.choice([
                     x for x in self.pending() + self.done()
                     if x != id and x not in self.targeted()
                 ])
             except IndexError:
                 self.send('Люди закончились', msg.from_id)
                 return
             with open(self.done_folder + id, 'w') as f:
                 f.write(to)
             with open(self.targeted_folder + to, 'w') as f:
                 f.write('')
             os.remove(self.pending_folder + id)
             self.send(f'vk.com/id{to}', msg.from_id)
             logger.info(f'NEW: {id} to {to}')
         elif id in self.done():
             with open(self.done_folder + id, 'r') as f:
                 to = f.read()
             self.send(f'vk.com/id{to}', msg.from_id)
             logger.info(f'repeat: {id} to {to}')
         else:
             self.send('Вы не в списке', msg.from_id)
Beispiel #8
0
 def handle(self, data):
     event = data
     if type(event) is not VkBotMessageEvent:
         event = VkBotMessageEvent(event)
     msg = event.object
     with user_db:
         user = User.get_or_none(User.vk_id == str(msg.peer_id))
         if user is None:
             logger.info(f'New user {msg.peer_id}')
             user_info = self.vk.users.get(user_ids=msg.peer_id)[0]
             first_name = user_info.get('first_name', '')
             last_name = user_info.get('last_name', '')
             user = User.create(vk_id=str(msg.peer_id),
                                first_name=first_name,
                                last_name=last_name,
                                state=states.USER_NEW)
         try:
             handler = self.handlers.get(user.state, self.handle_other)
             handler(msg, user)
             logger.info(f'Handled by {handler.__name__} : {msg}')
             user.save()
         except Exception as e:
             logger.exception(e)
             self.set_user_state(user, user.state)
             self.send(f'Ошибка: {e}', msg.peer_id)
     logger.debug(f'No text: {msg}')
Beispiel #9
0
 def test_on_translate(self):
     event = VkBotMessageEvent(raw=self.SEND_EVENT)
     with patch('bot.vk_api.VkApi'):
         # with patch('translator.translate', return_value='Test'):
         bot = Bot('', '')
         bot.translator = Mock()
         bot.translator.translate.return_value = 'Test'
         bot.on_translate(event)
         assert bot.translator.translate(event) == 'Test'
Beispiel #10
0
    def test_on_event(self):
        event = VkBotMessageEvent(raw=td.RAW_EVENT)

        with patch('vk_bot.VkApi'):
            with patch('vk_bot.bot_longpoll.VkBotLongPoll'):
                with patch('vk_bot.Bot._on_message') as on_message_mock:
                    bot = vk_bot.Bot('', '')
                    bot._on_event(event=event)

                    self.assertEqual(True, on_message_mock.called)
                    on_message_mock.assert_called_with(event)

                    # Проверяем обработку незнакомого ивента
                    event.type = 'bad_event_for_test'
                    with patch('vk_bot.bot_logger.debug') as logger_mock:
                        bot._on_event(event=event)
                        self.assertEqual(True, logger_mock.called)
                        logger_mock.assert_called_with('Unknown event type %s',
                                                       event.type)
Beispiel #11
0
 def test_on_event(self):
     event = VkBotMessageEvent(raw=self.RAW_EVENT)
     send_mock = Mock()
     with patch("bot.vk_api.VkApi"):
         with patch("bot.VkBotLongPoll"):
             bot = Bot("", "")
             bot.api = Mock()
             bot.api.messages.send = send_mock
             bot.on_event(event)
     send_mock.assert_called_once_with(
         peer_id=self.RAW_EVENT['object']['peer_id'],
         message=self.RAW_EVENT['object']['text'],
         random_id=ANY)
Beispiel #12
0
    def test_on_event(self):  # проверяем на стандартный ответ
        event = VkBotMessageEvent(self.RAW_EVENT)
        send_mock = Mock()
        with patch('bot.vk_api.VkApi'):
            with patch('bot.VkBotLongPoll'):
                bot = Bot('', '')
                bot.api = Mock()
                bot.api.messages.send = send_mock
                bot.on_event(event)

        send_mock.assert_called_once_with(
            message=f"Наберите команду - /help для помощи",
            random_id=ANY,
            peer_id=self.RAW_EVENT['object']['message']['peer_id'])
Beispiel #13
0
 async def main_loop():
     async for event in lp.iter():
         print(f'Got new event from vk!')
         event = VkBotEvent(event)
         if event.type == VkBotEventType.MESSAGE_NEW:
             event = VkBotMessageEvent(event.raw)
             action = event.message.get('action')
             if action is not None and action.get(
                     'type') == 'chat_invite_user':
                 vk_bot = VkBot(event)
                 vk_bot.text = HELP_MESSAGE
                 await write_msg(vk_bot)
             else:
                 vk_bot = VkBot(event)
                 vk_bot.from_user = await get_user_title(vk_bot)
                 vk_bot.chat_title = await get_chat_title(vk_bot)
                 vk_bot.new_message()
                 await write_msg(vk_bot)
         elif event.type == VkBotEventType.MESSAGE_EVENT:
             event = VkBotMessageEvent(event.raw)
             vk_bot = VkBot(event)
             vk_bot.from_user = await get_user_title(vk_bot)
             vk_bot.new_callback_answer()
             await edit_last_message(vk_bot)
Beispiel #14
0
 def test_on_event(self):
     event = VkBotMessageEvent(raw=self.SEND_EVENT)
     send_mock = Mock()
     with patch('bot.vk_api.VkApi'):
         with patch('bot.VkBotLongPoll'):
             bot = Bot('', '')
             bot.on_translate = Mock(
                 return_value=self.GET_EVENT['object']['text'])
             bot.api = Mock()
             bot.api.messages.send = send_mock
             bot.on_event(event)
     send_mock.assert_called_once_with(
         message=self.GET_EVENT['object']['text'],
         random_id=ANY,
         peer_id=self.GET_EVENT['object']['peer_id'])
Beispiel #15
0
    def test_run(self):
        count = 5
        event = VkBotMessageEvent(raw=self.RAW_EVENT)
        events = Mock(return_value=[event] * count)
        long_poller_listen_mock = Mock()
        long_poller_listen_mock.listen = events
        with patch("vkbot.vk_api.VkApi"):
            with patch("vkbot.VkBotLongPoll", return_value=long_poller_listen_mock):
                bot_test = VKBot("", "")
                bot_test.event_receiver = Mock()
                bot_test.run()

                bot_test.event_receiver.assert_called()
                bot_test.event_receiver.assert_any_call(event)
                assert bot_test.event_receiver.call_count == count
 def test_on_event(self):
     # TODO не понимаю почему тест остался в рабочем состоянии, возможно я его в принципе не правильно написала
     """проверить работу каждой функции на каждый step"""
     event = VkBotMessageEvent(raw=self.ROW_EVENT)
     send_mock = Mock()
     with patch('bot.vk_api.VkApi'):
         with patch('bot.VkBotLongPoll'):
             bot = Bot('', '')
             bot.api = Mock()
             text = settings.DEFAULT_ANSWERS
             bot.api.messages.send = send_mock
             bot.on_event(event=event)
     send_mock.assert_called_once_with(
         message=text,
         random_id=ANY,
         peer_id=self.ROW_EVENT['object']['message']['peer_id'])
Beispiel #17
0
    def test_on_event(self):
        event = VkBotMessageEvent(raw=self.RAW_EVENT)

        send_mock = Mock()

        with patch('chatbot_vk.vk_api.VkApi'):
            with patch('chatbot_vk.VkBotLongPoll'):
                bot = Bot('', '')
                bot.api = Mock()
                bot.api.messages.send = send_mock
                bot.on_event(event)

        send_mock.assert_called_once_with(
            message=self.RAW_EVENT['object']['text'],
            random_id=ANY,
            peer_id=self.RAW_EVENT['object']['peer_id'])
Beispiel #18
0
    def test_on_event_ticket(self):
        event = VkBotMessageEvent(raw=self.RUN_SCENARIO)

        send_mock = Mock()
        with patch('bot.vk_api.VkApi'):
            with patch('bot.vk_api.bot_longpoll.VkBotLongPoll', ):
                bot = Bot('', '')
                bot.api = Mock()
                bot.api.messages.send = send_mock

                bot.on_event(event)

        send_mock.assert_called_once_with(
            message="Для поиска билетов укажите город отправления",
            random_id=ANY,
            peer_id=self.RAW_EVENT['object']['message']['peer_id'],
        )
Beispiel #19
0
    def test_on_event1(self):  # проверка на ответ после /ticket
        event = deepcopy(self.RAW_EVENT)
        event['object']['message']['text'] = '/ticket'
        event = VkBotMessageEvent(event)
        send_mock = Mock()
        with patch('bot.vk_api.VkApi'):
            with patch('bot.VkBotLongPoll'):
                bot = Bot('', '')
                bot.api = Mock()
                bot.api.messages.send = send_mock
                bot.on_event(event)

        send_mock.assert_called_once_with(
            message=
            f"\nВы запустили помощника для заказа билета на самолет \nВведите Ваше имя: ",
            random_id=ANY,
            peer_id=self.RAW_EVENT['object']['message']['peer_id'])
Beispiel #20
0
    def test_on_event(self):
        event = VkBotMessageEvent(raw=self.RAW_EVENT)

        send_mock = Mock()
        with patch('bot.vk_api.VkApi'):
            with patch('bot.vk_api.bot_longpoll.VkBotLongPoll', ):
                bot = Bot('', '')
                bot.api = Mock()
                bot.api.messages.send = send_mock

                bot.on_event(event)

        send_mock.assert_called_once_with(
            message=DEFAULT_ANSWER,
            random_id=ANY,
            peer_id=self.RAW_EVENT['object']['message']['peer_id'],
        )
Beispiel #21
0
    def test_run(self):
        count = 5
        event = VkBotMessageEvent(raw=self.RAW_EVENT)
        events = [event] * count

        long_poller_mock = Mock()
        long_poller_mock.listen = Mock(return_value=events)

        with patch('avia_ticket_bot.vk_api.VkApi'):
            with patch('avia_ticket_bot.vk_api.bot_longpoll.VkBotLongPoll',
                       return_value=long_poller_mock):
                bot = ChatBot('', '')
                bot.on_event = Mock()
                bot.send_image = Mock()
                bot.run()

                bot.on_event.assert_called()
                bot.on_event.assert_any_call(event=event)
                self.assertEqual(bot.on_event.call_count, count)
Beispiel #22
0
    def test_on_event2(self):  # проверка на ответ после /help
        event = deepcopy(self.RAW_EVENT)
        event['object']['message']['text'] = '/help'
        event = VkBotMessageEvent(event)
        send_mock = Mock()
        with patch('bot.vk_api.VkApi'):
            with patch('bot.VkBotLongPoll'):
                bot = Bot('', '')
                bot.api = Mock()
                bot.api.messages.send = send_mock
                bot.on_event(event)

        send_mock.assert_called_once_with(
            message=
            f"Это чат-бот предназначенный для заказа билета на самолет, чтобы заказать "
            f"билет включите помощника командой - /ticket, чтобы в процессе заказа начать"
            f" заново -наберите также - /ticket",
            random_id=ANY,
            peer_id=self.RAW_EVENT['object']['message']['peer_id'])
Beispiel #23
0
    def test_run_ok(self):
        send_mock = Mock()
        api_mock = Mock()
        api_mock.messages.send = send_mock

        events = []

        for input_text in self.INPUTS:
            event = deepcopy(self.RAW_EVENT)
            event['object']['message']['text'] = input_text
            events.append(VkBotMessageEvent(event))

        long_poller_mock = Mock()
        long_poller_mock.listen = Mock(return_value=events)

        with patch('bot.VkBotLongPoll', return_value=long_poller_mock):
            bot = Bot('', '')
            bot.api = api_mock
            bot.default_answer_method = [Mock(), Mock()]
            bot.run()

        assert send_mock.call_count == len(self.INPUTS)

        real_outputs = []

        output_iterator = iter(self.EXPECTED_CORRECT_OUTPUTS)

        for call in send_mock.call_args_list:
            args, kwargs = call
            print(f'Реальный ответ: {kwargs["message"]}\n')
            try:
                print(f'Ожидаемый ответ: {next(output_iterator)}\n')
            except StopIteration:
                pass
            real_outputs.append(kwargs['message'])

        assert all([
            x[0].startswith(x[1])
            for x in zip(real_outputs[1:], self.EXPECTED_CORRECT_OUTPUTS)
        ])
        assert sum([mock.call_count
                    for mock in bot.default_answer_method]) == 1
    def test_run_ok(self):
        send_mock = Mock()
        api_mock = Mock()
        api_mock.messages.send = send_mock
        api_mock.users.get = Mock(return_value=self.info_user)

        events = []
        for input_text in self.IMPUTS:
            event = deepcopy(self.RAW_EVENT)
            event["object"]['text'] = input_text
            events.append(VkBotMessageEvent(event))

        long_poller_mock = Mock()
        long_poller_mock.listen = Mock(return_value=events)

        generate_flights_mock = Mock()
        self.data_about_flights = {}
        self.data_about_flights["timetable_flights"] = self.timetable_flights
        self.data_about_flights[
            "departure_cities_for_write"] = self.departure_cities_for_write
        self.data_about_flights["departure_cities"] = self.departure_cities
        generate_flights_mock.run = Mock(return_value=self.data_about_flights)
        with patch("chatbot_core.VkBotLongPoll",
                   return_value=long_poller_mock):
            with patch("chatbot_core.GenerateFlights",
                       return_value=generate_flights_mock):
                bot = Bot("", "")
                bot.api = api_mock
                bot.flight_schedule = self.timetable_flights
                bot.sent_image = Mock()
                bot.run()
        assert send_mock.call_count == len(self.IMPUTS)

        real_outputs = []
        for call in send_mock.call_args_list:
            args, kwargs = call
            real_outputs.append(kwargs['message'])
        index = 0
        for _ in range(len(self.EXPECTED_OUTPUTS)):
            self.assertEqual(real_outputs[index], self.EXPECTED_OUTPUTS[index],
                             f"{real_outputs[index]}")
            index += 1
Beispiel #25
0
    def test_bot_run_scenario(self):

        events = []
        for input_line in self.INPUTS:
            event = deepcopy(self.RAW_EVENT)
            event['object']['message']['text'] = input_line
            events.append(VkBotMessageEvent(event))

        send_mock = Mock()
        api_mock = Mock()
        api_mock.messages.send = send_mock

        long_poller_mock = Mock()
        long_poller_mock.listen = Mock(return_value=events)

        tickets_api_mock = Mock()
        tickets_api_mock.get_tickets = Mock(return_value=self.FAKE_FLIGHTS)
        tickets_api_mock.get_departure_locations = self.DEPARTURES
        tickets_api_mock.get_arrival_locations = self.ARRIVALS
        tickets_api_mock.is_route_available = Mock(return_value=True)

        with patch('bot.VkBotLongPoll', return_value=long_poller_mock):
            bot = Bot('', '')
            bot.api = api_mock
            bot.tickets_api = tickets_api_mock
            bot.departures = tickets_api_mock.get_departure_locations
            bot.arrivals = tickets_api_mock.get_arrival_locations
            bot.run()

        actual_results = []
        for call in send_mock.call_args_list:
            args, kwargs = call
            actual_results.append(kwargs['message'])

        assert actual_results == BotTester.EXPECTED_OUTPUTS
        assert send_mock.call_count == len(BotTester.EXPECTED_OUTPUTS)

        with self.assertRaises(BaseException):
            bot.send_mock.assert_not_called()

        with self.assertRaises(BaseException):
            bot.send_mock.assert_called_with('some message')
Beispiel #26
0
    def test_intents(self):
        send_message_mock = Mock()
        msg_event = deepcopy(td.RAW_EVENT)

        with patch('vk_bot.VkApi'), \
             patch('vk_bot.bot_longpoll.VkBotLongPoll'):
            bot = vk_bot.Bot('', '')
            bot.send_message = send_message_mock

            for message_text, _ in td.INTENTS:
                msg_event['object']['message']['text'] = message_text
                bot._on_message(event=VkBotMessageEvent(raw=msg_event))

            self.assertEqual(True, send_message_mock.called)
            self.assertEqual(len(td.INTENTS), send_message_mock.call_count)
            expected_calls = [
                call(msg_event['object']['message']['peer_id'], response)
                for _, response in td.INTENTS
            ]
            send_message_mock.assert_has_calls(expected_calls, any_order=False)
Beispiel #27
0
    def test_run_2(self):
        send_mock = Mock()
        api_mock = Mock()
        api_mock.messages.send = send_mock

        events = []
        for input_text in self.INPUTS:
            event = deepcopy(self.RAW_EVENT)
            event['object']['text'] = input_text
            events.append(VkBotMessageEvent(event))

        long_poller_mock = Mock()
        long_poller_mock.listen = Mock(return_value=events)

        with patch('chat_bot.VkBotLongPoll', return_value=long_poller_mock):
            bot = Bot('', '')
            bot.api = api_mock
            bot.send_img = Mock()
            bot.run()

        assert send_mock.call_count == len(self.INPUTS)

        real_outputs = []

        for call in send_mock.call_args_list:
            args, kwargs = call
            real_outputs.append(kwargs['message'])

        # Эти принты помогут найти несоответствие в вводах/выводах
        for real, expec in zip(real_outputs, self.EXPECTED_OUTPUTS):
            print(real)
            print('-' * 50)
            print(expec)
            print('-' * 50)
            print(real == expec)
            print('_' * 50)

        assert real_outputs == self.EXPECTED_OUTPUTS
Beispiel #28
0
    def test_scenario_ticket(self):
        send_message_mock = Mock()
        msg_event = deepcopy(td.RAW_EVENT)

        with patch('vk_bot.VkApi'), \
             patch('vk_bot.bot_longpoll.VkBotLongPoll'), \
             patch('skyscanner_api.get_flight', return_value=td.FLIGHT), \
             patch('skyscanner_api.get_dates', return_value=['2021-02-12']), \
             patch('skyscanner_api.get_city', side_effect=[None, td.ORIGIN, None, td.DEST], return_value=None):
            bot = vk_bot.Bot('', '')
            bot.send_message = send_message_mock

            for message_text, _ in td.INTENTS:
                msg_event['object']['message']['text'] = message_text
                bot._on_message(event=VkBotMessageEvent(raw=msg_event))

            self.assertEqual(True, send_message_mock.called)
            self.assertEqual(len(td.INTENTS), send_message_mock.call_count)
            expected_calls = [
                call(msg_event['object']['message']['peer_id'], response)
                for _, response in td.INTENTS
            ]
            send_message_mock.assert_has_calls(expected_calls, any_order=False)
Beispiel #29
0
    def test_run_ok(self):
        send_mock = Mock()
        api_mock = Mock()
        api_mock.messages.send = send_mock
        ya_mock = Mock()
        ya_request_mock = Mock(return_value=next(self.request_answer()))
        ya_mock.request_ya_rasp = ya_request_mock

        events = []
        for input_text in self.INPUTS:
            event = deepcopy(self.RAW_EVENT)
            event['object']['text'] = input_text
            events.append(VkBotMessageEvent(event))

        long_poller_mock = Mock()
        long_poller_mock.listen = Mock(return_value=events)

        with patch('bot.VkBotLongPoll', return_value=long_poller_mock):
            bot = Bot()
            bot.api = api_mock
            bot.send_image = Mock()
            ya_rasp.request_ya_rasp = ya_request_mock
            bot.run()

            assert send_mock.call_count == len(self.INPUTS)

        real_outputs = []
        for call in send_mock.call_args_list:
            args, kwargs = call
            real_outputs.append(kwargs['message'])

        for c, i in enumerate(real_outputs):
            if real_outputs[c] != self.EXPECTED_OUTPUTS[c]:
                print(real_outputs[c], ' real')
                print(self.EXPECTED_OUTPUTS[c], ' expected')

        assert real_outputs == self.EXPECTED_OUTPUTS
    def test_run_ok(self):
        send_mock = Mock()
        api_mock = Mock()
        api_mock.messages.send = send_mock

        events = []
        for input_text in self.INPUTS:
            event = deepcopy(self.RAW_EVENT)
            event['object']['text'] = input_text
            events.append(VkBotMessageEvent(event))

        long_poller_mock = Mock()
        long_poller_mock.listen = Mock(return_value=events)

        with patch('bot.VkBotLongPoll', return_value=long_poller_mock):
            bot = Bot('', '')
            bot.api = api_mock
            bot.run()

        assert send_mock.call_count == len(self.INPUTS)
        real_outputs = []
        for call in send_mock.call_args_list:
            args, kwargs = call
            real_outputs.append(kwargs['message'])
        for index, (real, expec) in enumerate(
                zip(real_outputs, self.EXPECTED_OUTPUTS)):
            print('Ввод: ', self.INPUTS[index])
            print('-' * 50)
            print('Что пришло - ', real)
            print('-' * 50)
            print('Что ожидалось - ', expec)
            print('-' * 50)
            print('Всё верно? - ', real == expec)
            print('=' * 50)

        assert real_outputs == self.EXPECTED_OUTPUTS