def test_generic_template_with_single_element(self): btn = elements.Button(button_type='web_url', title='Web button', url='http://facebook.com') elems = elements.Element(title='Element', item_url='http://facebook.com', image_url='http://facebook.com/image.jpg', subtitle='Subtitle', buttons=[btn]) res = templates.GenericTemplate(elements=elems) expected = { 'attachment': { 'type': 'template', 'payload': { 'template_type': 'generic', 'elements': [{ 'title': 'Element', 'item_url': 'http://facebook.com', 'image_url': 'http://facebook.com/image.jpg', 'subtitle': 'Subtitle', 'buttons': [{ 'type': 'web_url', 'title': 'Web button', 'url': 'http://facebook.com' }] }] } } } assert expected == res.to_dict()
def test_element(self): btn = elements.Button(button_type='web_url', title='Web button', url='http://facebook.com') default = elements.Button(button_type='web_url', url='https://facebook.com') res = elements.Element(title='Element', item_url='http://facebook.com', image_url='http://facebook.com/image.jpg', subtitle='Subtitle', default_action=default, buttons=[btn]) expected = { 'title': 'Element', 'item_url': 'http://facebook.com', 'image_url': 'http://facebook.com/image.jpg', 'subtitle': 'Subtitle', 'default_action': { 'type': 'web_url', 'url': 'https://facebook.com' }, 'buttons': [{ 'type': 'web_url', 'title': 'Web button', 'url': 'http://facebook.com' }] } assert expected == res.to_dict()
def send_user_subscribe_msg(user_id): if user_id is None: app.logger.warn('Trying to send a subscribe message without a user_id') return None # quick_replies = QuickReplies([ # QuickReply(content_type="text", # title="Yes", # payload=f"register {user_id}", ), # QuickReply(content_type="text", # title="No", # payload=f"ignore {user_id}", ), # ]) # msg = elements.DynamicText(text='Do you want to get daily quotes?', # quick_replies=quick_replies) btn1 = elements.Button(button_type='postback', title='Yes', payload=f"register {user_id}") btn2 = elements.Button(button_type='postback', title='No', payload=f"ignore {user_id}") elems = elements.Element(title='Do you want to get daily quotes', buttons=[btn1, btn2]) msg = templates.GenericTemplate(elements=[elems]) return messenger.send_msg(msg, user_id)
def test_generic_template_with_quick_replies(self): btn = elements.Button( button_type='web_url', title='Web button', url='http://facebook.com' ) elems = elements.Element( title='Element', item_url='http://facebook.com', image_url='http://facebook.com/image.jpg', subtitle='Subtitle', buttons=[ btn ] ) qr = quick_replies.QuickReply(title='QR', payload='QR payload') qrs = quick_replies.QuickReplies(quick_replies=[qr] * 2) res = templates.GenericTemplate( elements=[elems], quick_replies=qrs ) expected = { 'attachment': { 'type': 'template', 'payload': { 'template_type': 'generic', 'sharable': False, 'elements': [ { 'title': 'Element', 'item_url': 'http://facebook.com', 'image_url': 'http://facebook.com/image.jpg', 'subtitle': 'Subtitle', 'buttons': [ { 'type': 'web_url', 'title': 'Web button', 'url': 'http://facebook.com' } ] } ], }, }, 'quick_replies': [ { 'content_type': 'text', 'title': 'QR', 'payload': 'QR payload' }, { 'content_type': 'text', 'title': 'QR', 'payload': 'QR payload' }, ], } assert expected == res.to_dict()
def test_list_template(self): btn = elements.Button(button_type='web_url', title='Web button', url='http://facebook.com') elems = elements.Element(title='Element', image_url='http://facebook.com/image.jpg', subtitle='Subtitle', buttons=[btn]) res = templates.ListTemplate( elements=[elems] * 2, buttons=[btn], top_element_style='large', ) expected = { 'attachment': { 'type': 'template', 'payload': { 'template_type': 'list', 'top_element_style': 'large', 'elements': [{ 'title': 'Element', 'image_url': 'http://facebook.com/image.jpg', 'subtitle': 'Subtitle', 'buttons': [{ 'type': 'web_url', 'title': 'Web button', 'url': 'http://facebook.com' }] }, { 'title': 'Element', 'image_url': 'http://facebook.com/image.jpg', 'subtitle': 'Subtitle', 'buttons': [{ 'type': 'web_url', 'title': 'Web button', 'url': 'http://facebook.com' }] }], 'buttons': [{ 'type': 'web_url', 'title': 'Web button', 'url': 'http://facebook.com' }], } } } assert expected == res.to_dict()
def message(self, message): print('message') print(message) get_sender = Text(text= str(message['sender']['id'])) get_text = Text(text= str(message['message']['text'])) try: chck_payload = Text(text= str(message['message']['quick_reply']['payload'])) except KeyError: chck_payload = 'text' text = get_text.to_dict() text = text['text'] check = self.read(text, chck_payload) print(check) # problem hereeeee if check != 2: print('check') response = self.movie_route() if self.questions_check[response[0]] == 'quick': print(response) quick_reply = [quick_replies.QuickReply(title=i, payload='quick') for i in response[1]] quick_reply += [quick_replies.QuickReply(title='Go back', payload='quick')] quick_replies_set = quick_replies.QuickReplies(quick_replies=quick_reply) text = { 'text': response[0]} text['quick_replies'] = quick_replies_set.to_dict() self.send(text, 'RESPONSE') else: text = {'text': response[0]} self.send(text, 'RESPONSE') print('carousel') print(self.movies) elems = [] i = 0 while i < len(self.movies[0]): btn = elements.Button(title='Read More', payload=movies[2][i], button_type='postback') elem = elements.Element( title=self.movies[2][i], image_url=self.movies[0][i], subtitle=self.movies[1][i], buttons=[ btn ] ) elems.append(elem) i+=1 res = templates.GenericTemplate(elements=elems) messenger.send(res.to_dict(), 'RESPONSE') quick_reply = [quick_replies.QuickReply(title='Go back', payload='quick')] quick_replies_set = quick_replies.QuickReplies(quick_replies=quick_reply) default = {'quick_replies': quick_replies_set.to_dict()} self.send(default, 'RESPONSE') print(self.movie_responses['Movies'])
def test_template_with_too_many_elements(self): btn = elements.Button(button_type='web_url', title='Web button', url='http://facebook.com') elem = elements.Element(title='Element', item_url='http://facebook.com', image_url='http://facebook.com/image.jpg', subtitle='Subtitle', buttons=[btn]) elem_list = [elem] * 11 with pytest.raises(ValueError) as err: res = templates.GenericTemplate(elements=elem_list) res.to_dict() assert str( err.value ) == 'You cannot have more than 10 elements in the template.'
def test_element_subtitle_validation(self, caplog): with caplog.at_level(logging.WARNING, logger='fbmessenger.elements'): btn = elements.Button(button_type='web_url', title='Web button', url='http://facebook.com') res = elements.Element( title='Title', item_url='http://facebook.com', image_url='http://facebook.com/image.jpg', subtitle='The subtitle is too long and should throw an error.' 'The maximum allowed number of characters is 80', buttons=[btn]) res.to_dict() assert caplog.record_tuples == [ ('fbmessenger.elements', logging.WARNING, CHARACTER_LIMIT_MESSAGE.format(field='Subtitle', maxsize=80)) ]
def test_share_button(self): btn = elements.Button(button_type='web_url', title='Web button', url='http://facebook.com') element = elements.Element(title='Element', item_url='http://facebook.com', image_url='http://facebook.com/image.jpg', subtitle='Subtitle', buttons=[btn]) template = GenericTemplate(elements=[element], ) res = elements.Button(button_type='element_share', share_contents=template.to_dict()) expected = { 'type': 'element_share', 'share_contents': { 'attachment': { 'type': 'template', 'payload': { 'template_type': 'generic', 'sharable': False, 'elements': [ { 'title': 'Element', 'item_url': 'http://facebook.com', 'image_url': 'http://facebook.com/image.jpg', 'subtitle': 'Subtitle', 'buttons': [{ 'type': 'web_url', 'title': 'Web button', 'url': 'http://facebook.com' }] }, ] } } } } assert expected == res.to_dict()
def test_default_action_validation(self): defaults = [(elements.Button(button_type='web_url', url='https://facebook.com', title='Facebook'), 'The default_action button may not have a title'), (elements.Button(button_type='postback', payload='foo'), 'The default_action button must be of type web_url')] btn = elements.Button(button_type='web_url', title='Web button', url='http://facebook.com') for default, msg in defaults: with pytest.raises(ValueError) as err: elements.Element(title='Element', item_url='http://facebook.com', image_url='http://facebook.com/image.jpg', subtitle='Subtitle', default_action=default, buttons=[btn]) assert str(err.value) == msg
def test_receipt_template(self): element = elements.Element( title='Classic White T-Shirt', subtitle='100% Soft and Luxurious Cotton', quantity=2, price=50, currency='USD', image_url='http://petersapparel.parseapp.com/img/whiteshirt.png', ) adjustment1 = elements.Adjustment(name='New Customer Discount', amount=20) adjustment2 = elements.Adjustment(name='$10 Off Coupon', amount=10) address = elements.Address(street_1='1 Hacker Way', city='Menlo Park', postal_code='94025', state='CA', country='US') summary = elements.Summary(subtotal=75.00, shipping_cost=4.95, total_tax=6.19, total_cost=56.14) res = templates.ReceiptTemplate( recipient_name='Stephane Crozatier', order_number='12345678902', currency='USD', payment_method='Visa 2345', order_url='http://petersapparel.parseapp.com/order?order_id=123456', timestamp='1428444852', address=address, summary=summary, adjustments=[adjustment1, adjustment2], elements=[element]) expected = { 'attachment': { 'type': 'template', 'payload': { 'template_type': 'receipt', 'recipient_name': 'Stephane Crozatier', 'order_number': '12345678902', 'currency': 'USD', 'payment_method': 'Visa 2345', 'order_url': 'http://petersapparel.parseapp.com/order?order_id=123456', 'timestamp': '1428444852', 'elements': [{ 'title': 'Classic White T-Shirt', 'subtitle': '100% Soft and Luxurious Cotton', 'quantity': 2, 'price': 50, 'currency': 'USD', 'image_url': 'http://petersapparel.parseapp.com/img/whiteshirt.png' }], 'address': { 'street_1': '1 Hacker Way', 'street_2': '', 'city': 'Menlo Park', 'postal_code': '94025', 'state': 'CA', 'country': 'US' }, 'summary': { 'subtotal': 75.00, 'shipping_cost': 4.95, 'total_tax': 6.19, 'total_cost': 56.14 }, 'adjustments': [{ 'name': 'New Customer Discount', 'amount': 20 }, { 'name': '$10 Off Coupon', 'amount': 10 }] } } } assert expected == res.to_dict()