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)
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()
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__()
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)
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)