Esempio n. 1
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
Esempio n. 2
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']['text'] = input_text
            events.append(VkBotEvent(event))

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

        with patch('bot.VkBotLongPoll', return_value=long_poller_mock):
            test_bot = Bot('', '')
            test_bot.api = api_mock
            test_bot.send_image = Mock()
            test_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
Esempio n. 3
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(VkBotEvent(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
Esempio n. 4
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)
Esempio n. 5
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'])
Esempio n. 6
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'])
Esempio n. 7
0
    def test_fail_city_out_action(
            self):  # проверка списка доступных город для отправлений
        user_id = self.RAW_EVENT['object']['message']['peer_id']
        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.fail_city_out_action(user_id)

        send_mock.assert_called_once_with(
            message='\nМосква\nПариж\nСанкт-петербург\nНью-йорк',
            random_id=ANY,
            peer_id=user_id)
 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'])
Esempio n. 9
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'],
        )
Esempio n. 10
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'],
        )
Esempio n. 11
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'])
Esempio n. 12
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()
        send_mock.assert_called_once_with(
            message='Ты отправил -> ' +
            self.RAW_EVENT['object']['message']['text'],
            random_id=ANY,
            peer_id=self.RAW_EVENT['object']['message']['peer_id'])
Esempio n. 13
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'])
Esempio n. 14
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')
Esempio n. 15
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
Esempio n. 16
0
    def test_correct_check(
            self):  # проверка правильности вывода введеных данных
        user_id = self.RAW_EVENT['object']['message']['peer_id']
        state = Mock()
        state.context = self.CONTEXT
        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.correct_check(user_id, state)

        send_mock.assert_called_once_with(
            message=
            '\nгород отправления: \nМосква\n \nгород назначения: \nСанкт-петербург\n\nдата отправления:'
            ' \n14-05-2020\n\nномер рейса: \n№5\n\nвремя отправления: \n14:00\n\nколичество мест:'
            ' \n4\n\nваш комментарий:\n1\n',
            random_id=ANY,
            peer_id=user_id)
Esempio n. 17
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
Esempio n. 19
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(VkBotEvent(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()
            EXPECTED_OUTPUTS = [
                settings.DEFAULT_ANSWER,
                settings.SCENARIOS['registration']['steps']['step1']['text'],
                settings.SCENARIOS['registration']['steps']['step1']['failure_text'],
                settings.SCENARIOS['registration']['steps']['step2']['text'],

                settings.SCENARIOS['registration']['steps']['step2']['failure_text'],
                settings.SCENARIOS['registration']['steps']['step3']['text'],
                settings.SCENARIOS['registration']['steps']['step3']['failure_text'],
                settings.SCENARIOS['registration']['steps']['step4']['text'].format(city_from='Москва',
                                                                                    city_to='Лондон',
                                                                                    input_date='11-01-2021',
                                                                                    list=handlers.check_flights(
                                                                                        'Москва', 'Лондон')),
                settings.SCENARIOS['registration']['steps']['step4']['failure_text'],
                settings.SCENARIOS['registration']['steps']['step5']['text'].format(city_from='Москва',
                                                                                    city_to='Лондон',
                                                                                    flight_date='13-12-9666',
                                                                                    flight='666'),
                settings.SCENARIOS['registration']['steps']['step5']['failure_text'],
                settings.SCENARIOS['registration']['steps']['step6']['text'].format(quantity='3'),
                settings.SCENARIOS['registration']['steps']['step7']['text'].format(city_from='Москва',
                                                                                    city_to='Лондон',
                                                                                    flight_date='13-12-9666',
                                                                                    flight='666', quantity='3',
                                                                                    comment='коммент'),
                settings.SCENARIOS['registration']['steps']['step7']['failure_text'],
                settings.SCENARIOS['registration']['steps']['step8']['text'],
                settings.SCENARIOS['registration']['steps']['step8']['failure_text'],
                settings.SCENARIOS['registration']['steps']['step9']['text'],
                settings.SCENARIOS['registration']['steps']['step9']['failure_text'],
                settings.SCENARIOS['registration']['steps']['step10']['text'].format(city_from='Москва',
                                                                                     city_to='Лондон',
                                                                                     flight_date='13-12-9666',
                                                                                     quantity='3', phone='89253263240',
                                                                                     name='Василий'),
            ]

        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 str(real_outputs) == str(EXPECTED_OUTPUTS)
Esempio n. 20
0
class TestBot(unittest.TestCase):
    bot = Bot(BotSettings)

    def test_loading(self):
        with self.assertLogs(self.bot.logger, level='INFO') as cm:
            self.bot = Bot(BotSettings, logger=self.bot.logger)

        self.assertIn(f'INFO:{self.bot.logger.name}:Initializing bot',
                      cm.output)
        self.assertIn(f'INFO:{self.bot.logger.name}:Initializing vk clients',
                      cm.output)
        self.assertIn(f'INFO:{self.bot.logger.name}:Loading plugins',
                      cm.output)

    def test_methods(self):
        result = self.bot.do(self.bot.api.groups.getById(group_id=1))
        self.assertNotIn(result, (False, None))

        count = 4
        result = self.bot.do(self.bot.api.messages.get(count=count))
        self.assertNotIn(result, (False, None))
        self.assertIn("items", result)
        self.assertEqual(len(result['items']), count)

        result = self.bot.do(self.bot.api().messages.get(count=1))
        self.assertNotIn(result, (False, None))

        result = self.bot.do(
            self.bot.api(wait=Wait.CUSTOM).messages.get(count=1))
        self.assertEqual(asyncio.isfuture(result), True)
        self.bot.loop.run_until_complete(result)
        self.assertEqual(result.done(), True)
        self.assertNotIn(result.result(), (False, None))

    def test_longpoll(self):
        task = self.bot.longpoll_run(True)

        async def bot_killer():
            await asyncio.sleep(5)
            self.bot.stop_bot()

        asyncio.ensure_future(bot_killer(), loop=self.bot.loop)

        with self.assertLogs(self.bot.logger, level='INFO') as cm:
            with self.assertRaises(asyncio.CancelledError):
                self.bot.loop.run_until_complete(task)

        self.assertEqual(
            cm.output,
            [f'INFO:{self.bot.logger.name}:Attempting to turn bot off'])

    def test_callback(self):
        task = self.bot.callback_run(True)

        async def bot_killer():
            await asyncio.sleep(5)
            self.bot.stop_bot()

        asyncio.ensure_future(bot_killer(), loop=self.bot.loop)

        with self.assertLogs(self.bot.logger, level='INFO') as cm:
            with self.assertRaises(asyncio.CancelledError):
                self.bot.loop.run_until_complete(task)

        self.assertEqual(
            cm.output,
            [f'INFO:{self.bot.logger.name}:Attempting to turn bot off'])

    def test_errors(self):
        with self.assertLogs(self.bot.logger, level='ERROR') as cm:
            self.bot.do(self.bot.api.messages.send())

        self.assertIn(
            r"ERROR:sketal:Errors while executing vk method: {'code': 100, 'method': 'messages.send', 'error_msg': 'One of the parameters specified was missing or invalid: you should specify peer_id, user_id, domain, chat_id or user_ids param'}, {'code': 100, 'method': 'execute', 'error_msg': 'One of the parameters specified was missing or invalid: you should specify peer_id, user_id, domain, chat_id or user_ids param'}",
            cm.output)

    def test_upload(self):
        with open("docs/image_for_tests.png", "rb") as f:
            result = self.bot.do(upload_photo(self.bot.api, f.read()))

        self.assertIsNotNone(result)
        self.assertNotEqual(result.url, "")

        self.bot.do(
            self.bot.api.photos.delete(owner_id=result.owner_id,
                                       photo_id=result.id))

        with open("docs/image_for_tests.png", "rb") as f:
            result = self.bot.do(
                upload_doc(self.bot.api, f.read(), "image.png"))

        self.assertIsNotNone(result)
        self.assertNotEqual(result.url, "")

        self.bot.do(
            self.bot.api.docs.delete(owner_id=result.owner_id,
                                     doc_id=result.id))

    def test_mass_method(self):
        async def work():
            with self.bot.api.mass_request():
                tasks = []

                for _ in range(70):
                    tasks.append(await self.bot.api(wait=Wait.CUSTOM
                                                    ).messages.get(count=1))

                while tasks:
                    await asyncio.sleep(0.01)

                    task = tasks.pop()

                    if task.done():
                        continue

                    tasks.append(task)

        self.bot.do(work())

    def test_accumulative_methods(self):
        async def work():
            sender = self.bot.api.get_default_sender("wall.getById")

            with self.bot.api.mass_request():
                tas1 = await self.bot.api.method_accumulative(
                    "wall.getById", {}, {"posts": "-145935681_515"},
                    sender=sender,
                    wait=Wait.CUSTOM)
                tas2 = await self.bot.api.method_accumulative(
                    "wall.getById", {}, {"posts": "-145935681_512"},
                    sender=sender,
                    wait=Wait.CUSTOM)
                tas3 = await self.bot.api.method_accumulative(
                    "wall.getById", {}, {"posts": "-145935681_511"},
                    sender=sender,
                    wait=Wait.CUSTOM)

                if tas1 is False and tas2 is False and tas3 is False:
                    return

                await asyncio.gather(tas1,
                                     tas2,
                                     tas3,
                                     loop=self.bot.loop,
                                     return_exceptions=True)

            self.assertEqual(tas1.result()["id"], 515)
            self.assertEqual(tas2.result()["id"], 512)
            self.assertEqual(tas3.result()["id"], 511)

        self.bot.do(work())
Esempio n. 21
0
    def test_run_ok(self):
        send_mock = Mock()
        api_mock = Mock()
        api_mock.messages.send = send_mock
        self.make_errors()
        text_data = self.collect_ticket_data()
        expected_outputs = [
            settings.INTENTS[0]['answer'],
            settings.INTENTS[1]['answer'],
            settings.DEFAULT_ANSWER,
            settings.SCENARIOS['make a ticket']['steps']['step_1']['text'],
            settings.SCENARIOS['make a ticket']['steps']['step_1']
            ['failure_text'].format(error=self.errors['err_dep_city']),
            settings.SCENARIOS['make a ticket']['steps']['step_2']['text'],
            settings.SCENARIOS['make a ticket']['steps']['step_2']
            ['failure_text'].format(error=self.errors['err_dest_city_1']),
            settings.SCENARIOS['make a ticket']['steps']['step_2']
            ['failure_text'].format(error=self.errors['err_dest_city_2']),
            settings.SCENARIOS['make a ticket']['steps']['step_3']['text'],
            settings.SCENARIOS['make a ticket']['steps']['step_3']
            ['failure_text'].format(error=self.errors['err_date_1']),
            settings.SCENARIOS['make a ticket']['steps']['step_3']
            ['failure_text'].format(error=self.errors['err_date_2']),
            settings.SCENARIOS['make a ticket']['steps']['step_3']
            ['failure_text'].format(error=self.errors['err_date_3']),
            settings.SCENARIOS['make a ticket']['steps']['step_4']
            ['text'].format(flights=self.flight_data['flights']),
            settings.SCENARIOS['make a ticket']['steps']['step_4']
            ['failure_text'].format(error=self.errors['err_flight_number_1']),
            settings.SCENARIOS['make a ticket']['steps']['step_5']['text'],
            settings.SCENARIOS['make a ticket']['steps']['step_5']
            ['failure_text'],
            settings.SCENARIOS['make a ticket']['steps']['step_6']['text'],
            settings.SCENARIOS['make a ticket']['steps']['step_7']['text'],
            settings.SCENARIOS['make a ticket']['steps']['step_7']
            ['failure_text'],
            settings.SCENARIOS['make a ticket']['steps']['step_8']
            ['text'].format(input_data=text_data),
            settings.SCENARIOS['make a ticket']['steps']['step_9']['text'],
            settings.SCENARIOS['make a ticket']['steps']['step_9']
            ['failure_text'].format(error=self.errors['err_phone_number_1']),
            settings.SCENARIOS['make a ticket']['steps']['step_10']['text'],
        ]
        events = []
        for input_text in self.INPUTS.values():
            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()
            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 == expected_outputs