UNPKG

fb-bot-framework

Version:

A node framework for Facebook Messenger Platform

407 lines (336 loc) 12.1 kB
/** * Created by kinnimew on 30/4/16. */ var FBBotFramework = require('../'); var nock = require('nock'); var expect = require('chai').expect; describe('Send API', function () { var bot; var recipient = 1; var dummyResponse = { recipient_id: '1030608157033270', message_id: 'mid.1462087493117:d0dcdd2121dce00540' }; before(function (done) { bot = new FBBotFramework({page_token: "DUMMY_PAGE_TOKEN", verify_token: "DUMMY_VERIFY_TOKEN"}, function (err) { done(); }) }); it('should send text message', function (done) { var text = "hello world!"; var payload = { recipient: {id: recipient}, message: {text: text} }; nock('https://graph.facebook.com') .post('/v2.6/me/messages', payload) .query({access_token: bot.page_token}) .reply(200, dummyResponse); bot.sendTextMessage(recipient, text, FBBotFramework.NOTIFICATION_TYPE.SILENT_PUSH, function (err, result) { expect(err).to.be.null; expect(result).to.deep.equal(dummyResponse); done(); }); }); it('should send image message', function (done) { var imageUrl = "https://petersapparel.com/img/shirt.png"; var payload = { "recipient": { "id": recipient }, "message": { "attachment": { "type": "image", "payload": { "url": "https://petersapparel.com/img/shirt.png" } } } }; nock('https://graph.facebook.com') .post('/v2.6/me/messages', payload) .query({access_token: bot.page_token}) .reply(200, dummyResponse); bot.sendImageMessage(recipient, imageUrl, function (err, result) { expect(err).to.be.null; expect(result).to.deep.equal(dummyResponse); done(); }); }); it('should send audio attachment', function (done) { var audioUrl = "https://petersapparel.com/img/shirt.png"; var payload = { "recipient": { "id": recipient }, "message": { "attachment": { "type": "audio", "payload": { "url": audioUrl } } } }; nock('https://graph.facebook.com') .post('/v2.6/me/messages', payload) .query({access_token: bot.page_token}) .reply(200, dummyResponse); bot.sendAudioAttachment(recipient, audioUrl, function (err, result) { expect(err).to.be.null; expect(result).to.deep.equal(dummyResponse); done(); }); }); it('should send video attachment', function (done) { var videoUrl = "https://petersapparel.com/bin/clip.mp4"; var payload = { "recipient": { "id": recipient }, "message": { "attachment": { "type": "audio", "payload": { "url": videoUrl } } } }; nock('https://graph.facebook.com') .post('/v2.6/me/messages', payload) .query({access_token: bot.page_token}) .reply(200, dummyResponse); bot.sendAudioAttachment(recipient, videoUrl, function (err, result) { expect(err).to.be.null; expect(result).to.deep.equal(dummyResponse); done(); }); }); it('should send file attachment', function (done) { var fileUrl = "https://petersapparel.com/bin/receipt.pdf"; var payload = { "recipient": { "id": recipient }, "message": { "attachment": { "type": "audio", "payload": { "url": fileUrl } } } }; nock('https://graph.facebook.com') .post('/v2.6/me/messages', payload) .query({access_token: bot.page_token}) .reply(200, dummyResponse); bot.sendAudioAttachment(recipient, fileUrl, function (err, result) { expect(err).to.be.null; expect(result).to.deep.equal(dummyResponse); done(); }); }); it('should send button message', function (done) { var text = "What do you want to do next?"; var buttons = [ { "type": "web_url", "url": "https://petersapparel.parseapp.com", "title": "Show Website" }, { "type": "postback", "title": "Start Chatting", "payload": "USER_DEFINED_PAYLOAD" } ]; var payload = { "recipient": { "id": recipient }, "message": { "attachment": { "type": "template", "payload": { "template_type": "button", "text": text, "buttons": buttons } } } }; nock('https://graph.facebook.com') .post('/v2.6/me/messages', payload) .query({access_token: bot.page_token}) .reply(200, dummyResponse); bot.sendButtonMessage(recipient, text, buttons, function (err, result) { expect(err).to.be.null; expect(result).to.deep.equal(dummyResponse); done(); }); }); it('should send generic/bubble message', function (done) { var elements = [ { "title": "Classic White T-Shirt", "image_url": "http://petersapparel.parseapp.com/img/item100-thumb.png", "subtitle": "Soft white cotton t-shirt is back in style", "buttons": [ { "type": "web_url", "url": "https://petersapparel.parseapp.com/view_item?item_id=100", "title": "View Item" }, { "type": "web_url", "url": "https://petersapparel.parseapp.com/buy_item?item_id=100", "title": "Buy Item" }, { "type": "postback", "title": "Bookmark Item", "payload": "USER_DEFINED_PAYLOAD_FOR_ITEM100" } ] }, { "title": "Classic Grey T-Shirt", "image_url": "http://petersapparel.parseapp.com/img/item101-thumb.png", "subtitle": "Soft gray cotton t-shirt is back in style", "buttons": [ { "type": "web_url", "url": "https://petersapparel.parseapp.com/view_item?item_id=101", "title": "View Item" }, { "type": "web_url", "url": "https://petersapparel.parseapp.com/buy_item?item_id=101", "title": "Buy Item" }, { "type": "postback", "title": "Bookmark Item", "payload": "USER_DEFINED_PAYLOAD_FOR_ITEM101" } ] } ]; var payload = { "recipient": { "id": recipient }, "message": { "attachment": { "type": "template", "payload": { "template_type": "generic", "elements": elements } } } }; nock('https://graph.facebook.com') .post('/v2.6/me/messages', payload) .query({access_token: bot.page_token}) .reply(200, dummyResponse); bot.sendBubbleMessage(recipient, elements, function (err, result) { expect(err).to.be.null; expect(result).to.deep.equal(dummyResponse); done(); }); }); it('should send receipt message', function (done) { var 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" }, { "title": "Classic Gray T-Shirt", "subtitle": "100% Soft and Luxurious Cotton", "quantity": 1, "price": 25, "currency": "USD", "image_url": "http://petersapparel.parseapp.com/img/grayshirt.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 } ] }; var payload = { "recipient": { "id": recipient }, "message": { "attachment": { "type": "template", "payload": receipt } } }; nock('https://graph.facebook.com') .post('/v2.6/me/messages', payload) .query({access_token: bot.page_token}) .reply(200, dummyResponse); bot.sendReceiptMessage(recipient, receipt, function (err, result) { expect(err).to.be.null; expect(result).to.deep.equal(dummyResponse); done(); }); }); it('should return user\'s profile', function (done) { var response = { "first_name": "Peter", "last_name": "Chang", "profile_pic": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xpf1/v/t1.0-1/p200x200/13055603_10105219398495383_8237637584159975445_n.jpg?oh=1d241d4b6d4dac50eaf9bb73288ea192&oe=57AF5C03&__gda__=1470213755_ab17c8c8e3a0a447fed3f272fa2179ce", "locale": "en_US", "timezone": -7, "gender": "male" }; nock('https://graph.facebook.com') .get('/v2.6/' + recipient) .query({fields: "first_name,last_name,profile_pic,locale,timezone,gender", access_token: bot.page_token}) .reply(200, response); bot.getUserProfile(recipient, function (err, profile) { expect(err).to.be.null; expect(profile).deep.equal(response); done(); }); }); });