コード例 #1
0
    def test_bad_answer(self, mock_celery_send_task):
        from fb_bot.bot.chat_session import ChatSession
        from fb_bot.bot.ctx import set_chat_context
        from fb_bot.models import PhoneNumber

        last_send_message = None

        def send_logger(message):
            last_send_message = message.message.text
            print 'Send: %r to %r' % (message.message.text,
                                      message.recipient.recipient_id)

        self.mock_messenger.send.side_effect = send_logger

        with ChatSession('100009095718696') as session, set_chat_context(
                session):
            user_input = lambda text: entry_handler._handle_message(
                self.get_wh_message(text), session)
            entry_handler = EntryHandler()

            user_input('Hi')
            user_input('Fine')
            user_input('Iowa')
            user_input('any')

            phone_number = '+155555556'
            user_input(phone_number)
            self.assertGreaterEqual(
                PhoneNumber.objects.filter(phone=phone_number).count(), 1)
コード例 #2
0
def return_simple_search_results(user_id, listings):
    from fb_bot.bot.ctx import set_chat_context, search_request
    from fb_bot.bot.chat_session import ChatSession
    from fb_bot.bot import questions
    from fb_bot.bot import templates
    from fb_bot.bot.handlers import log

    with ChatSession(user_id) as session, set_chat_context(session):
        sr = session.search_request
        sr.is_waiting_for_results = False
        session.send_typing_on()
        if listings:
            attachment = templates.get_results_attachment(listings)
            session.attachment_reply(attachment)
            log.debug('Return results for %s' % sr)
            sr.next_question().activate()
        else:
            log.debug('No results for %s' % sr)
            q = search_request.go_to_question(questions.AskPhoneNumberQuestion)
            if q:
                q.activate(is_bad_request=True)
            else:
                session.reply("Sorry, we can't find any listing with this criteria.")

        session.send_typing_off()
コード例 #3
0
    def setUp(self):
        super(QuestionsTestCase, self).setUp()
        from facebook import GraphAPI
        from fb_bot.bot.messenger_client import MessengerClient
        from fb_bot.bot.chat_session import ChatSession
        from fb_bot.bot.ctx import set_chat_context, session, search_request

        self.send_mock = patch.object(MessengerClient, 'send').start()
        self.mock_graph_get = patch.object(GraphAPI, 'get').start()
        self.session_reply = patch.object(ChatSession, 'reply').start()

        self.session = ChatSession('100009095718696').__enter__()
        self.ctx = set_chat_context(self.session)
        self.ctx.__enter__()
コード例 #4
0
    def test_mute(self, mock_celery_send_task):
        from fb_bot.bot.chat_session import ChatSession
        from fb_bot.bot.ctx import set_chat_context
        from fb_bot.models import PhoneNumber, Chat

        with ChatSession('100009095718696') as session, set_chat_context(
                session):
            user_input = lambda text: entry_handler._handle_message(
                self.get_wh_message(text), session)

            entry_handler = EntryHandler()

            def send_logger(message):
                print 'Send: %r to %r' % (message.message.text,
                                          message.recipient.recipient_id)

            user_input('Hi')
            self.mock_messenger.send.side_effect = send_logger

            user_input('Fine')
            user_input('Iowa')
            user_input('studio')
            user_input('9000')
            user_input('today')
            user_input('no')

            mock_celery_send_task.assert_called_once()

            user_input('yes')
            phone_number = '+155555555'
            user_input(phone_number)
            self.assertGreaterEqual(
                PhoneNumber.objects.filter(phone=phone_number).count(), 1)
            self.assertGreater(
                Chat.objects.filter(fb_user_id=session.user_id).count(), 0)
            self.mock_messenger.reset_mock()
            self.mock_messenger.send.side_effect = send_logger
            user_input('Hi again')
            self.assertFalse(self.mock_messenger.send.called)

            with freeze_time(datetime.utcnow() + timedelta(seconds=61)):
                user_input('Hi again 2')
                user_input('Fine')
                self.assertEqual(self.mock_messenger.send.call_count, 2)
コード例 #5
0
    def _test_handlers(self, mock_celery_send_task):
        from fb_bot.bot.chat_session import ChatSession
        from fb_bot.bot.ctx import set_chat_context
        from fb_bot.bot import questions
        from fb_bot.models import PhoneNumber

        def send_logger(message):
            print 'Send: %r to %r' % (message.message.text,
                                      message.recipient.recipient_id)

        def assert_greetings(message):
            send_logger(message)
            self.assertEqual(questions.Greeting().greeting,
                             message.message.text)

        with ChatSession('100009095718696') as session, set_chat_context(
                session):
            user_input = lambda text: entry_handler._handle_message(
                self.get_wh_message(text), session)

            entry_handler = EntryHandler()

            self.mock_messenger.send.side_effect = assert_greetings
            user_input('Hi')
            self.mock_messenger.send.assert_called_once()
            self.mock_messenger.send.side_effect = send_logger

            user_input('Fine')
            user_input('Iowa')
            user_input('studio')
            user_input('9000')
            user_input('today')
            user_input('no')

            mock_celery_send_task.assert_called_once()

            user_input('yes')
            phone_number = '+155555555'
            user_input(phone_number)
            self.assertGreaterEqual(
                PhoneNumber.objects.filter(phone=phone_number).count(), 1)

            # Session 2
            self.assertEqual(session.search_request.current_question, None)