Esempio n. 1
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')