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')