UNPKG

node-red-contrib-chatbot

Version:

REDBot a Chat bot for a full featured chat bot for Telegram, Facebook Messenger and Slack. Almost no coding skills required

162 lines (153 loc) 5.28 kB
const assert = require('chai').assert; const RED = require('../lib/red-stub')(); const QuickRepliesBlock = require('../nodes/chatbot-quick-replies'); require('../lib/platforms/facebook/facebook'); require('../lib/platforms/telegram'); describe('Chat quick replies buttons', () => { it('should send quick replies in facebook', () => { const msg = RED.createMessage({}, 'facebook'); msg.chat().set('my_var', 'hello!') RED.node.config({ message: 'message for the buttons', buttons: [ { type: 'postback', value: 'value 1', label: 'Value 1', answer: null, alert: false }, { type: 'postback', value: 'value 2', label: 'Value {{my_var}}', answer: null, alert: false }, ] }); QuickRepliesBlock(RED); RED.node.get().emit('input', msg); return RED.node.get().await() .then(() => { assert.equal(RED.node.message().payload.type, 'quick-replies'); assert.equal(RED.node.message().payload.content, 'message for the buttons'); assert.equal(RED.node.message().payload.chatId, 42); assert.isArray(RED.node.message().payload.buttons); assert.equal(RED.node.message().payload.buttons[0].type, 'postback'); assert.equal(RED.node.message().payload.buttons[0].value, 'value 1'); assert.equal(RED.node.message().payload.buttons[0].label, 'Value 1'); assert.equal(RED.node.message().payload.buttons[1].type, 'postback'); assert.equal(RED.node.message().payload.buttons[1].label, 'Value hello!'); }); }); it('should send quick replies in facebook and track replies', () => { const msg = RED.createMessage({}, 'facebook'); msg.chat().set('my_var', 'hello!') RED.node.config({ message: 'message for the buttons', trackMessage: true, buttons: [ { type: 'postback', value: 'value 1', label: 'Value 1', answer: null, alert: false }, { type: 'postback', value: 'value 2', label: 'Value {{my_var}}', answer: null, alert: false }, ] }); QuickRepliesBlock(RED); RED.node.get().emit('input', msg); return RED.node.get().await() .then(() => { const message = RED.node.message(); assert.equal(message.payload.type, 'quick-replies'); assert.equal(message.payload.content, 'message for the buttons'); assert.equal(message.payload.chatId, 42); assert.isArray(message.payload.buttons); assert.equal(message.payload.buttons[0].type, 'postback'); assert.equal(message.payload.buttons[0].value, 'value 1'); assert.equal(message.payload.buttons[0].label, 'Value 1'); assert.equal(message.payload.buttons[1].type, 'postback'); assert.equal(message.payload.buttons[1].label, 'Value hello!'); assert.equal(message.payload.trackNodeId, RED.node.get()._path); }); }); it('should send quick replies in facebook using payload', () => { const msg = RED.createMessage({ message: 'message for the buttons', buttons: [ { type: 'postback', value: 'value 1', label: 'Value 1', answer: null, alert: false }, { type: 'postback', value: 'value 2', label: 'Value {{my_var}}', answer: null, alert: false }, ] }, 'facebook'); msg.chat().set('my_var', 'hello!') RED.node.config({}); QuickRepliesBlock(RED); RED.node.get().emit('input', msg); return RED.node.get().await() .then(() => { assert.equal(RED.node.message().payload.type, 'quick-replies'); assert.equal(RED.node.message().payload.content, 'message for the buttons'); assert.equal(RED.node.message().payload.chatId, 42); assert.isArray(RED.node.message().payload.buttons); assert.equal(RED.node.message().payload.buttons[0].type, 'postback'); assert.equal(RED.node.message().payload.buttons[0].value, 'value 1'); assert.equal(RED.node.message().payload.buttons[0].label, 'Value 1'); assert.equal(RED.node.message().payload.buttons[1].type, 'postback'); assert.equal(RED.node.message().payload.buttons[1].label, 'Value hello!'); }); }); it('should not send quick replies in telegram', () => { const msg = RED.createMessage({}, 'telegram'); msg.chat().set('my_var', 'hello!') RED.node.config({ message: 'message for the buttons', buttons: [ { type: 'postback', value: 'value 1', label: 'Value 1', answer: null, alert: false }, { type: 'postback', value: 'value 2', label: 'Value {{my_var}}', answer: null, alert: false }, ] }); QuickRepliesBlock(RED); RED.node.get().emit('input', msg); return RED.node.get().await() .then( () => {}, e => { assert.equal(e, 'Node "quick-replies" is not supported by telegram transport'); } ); }); });