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
JavaScript
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');
}
);
});
});