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

186 lines (168 loc) 5.4 kB
var _ = require('underscore'); var assert = require('chai').assert; var RED = require('../lib/red-stub')(); var KeyboardBlock = require('../nodes/chatbot-ask'); describe('Chat keyword node', function() { it('should send custom keyboard in Telegram', function () { var msg = RED.createMessage({}, 'telegram'); RED.node.config({ message: 'message for the buttons', buttons: [ { type: 'keyboardButton', label: 'Value 1' }, { type: 'keyboardButton', label: 'Value 2' }, { type: 'newline' }, { type: 'keyboardButton', label: 'Value 3' } ] }); KeyboardBlock(RED); RED.node.get().emit('input', msg); return RED.node.get().await() .then(function () { assert.equal(RED.node.message().payload.type, 'buttons'); 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, 'keyboardButton'); assert.equal(RED.node.message().payload.buttons[0].label, 'Value 1'); assert.equal(RED.node.message().payload.buttons[1].type, 'keyboardButton'); assert.equal(RED.node.message().payload.buttons[1].label, 'Value 2'); assert.equal(RED.node.message().payload.buttons[2].type, 'newline'); assert.equal(RED.node.message().payload.buttons[3].type, 'keyboardButton'); assert.equal(RED.node.message().payload.buttons[3].label, 'Value 3'); }); }); it('should send a reset keyboard if the buttons array is empty', function () { var msg = RED.createMessage({}, 'telegram'); RED.node.config({ message: 'message for the buttons', buttons: [] }); KeyboardBlock(RED); RED.node.get().emit('input', msg); return RED.node.get().await() .then(function () { assert.equal(RED.node.message().payload.type, 'reset-buttons'); assert.equal(RED.node.message().payload.content, 'message for the buttons'); assert.equal(RED.node.message().payload.chatId, 42); }); }); it('should send custom keyboard in Telegram passed thru payload', function () { var msg = RED.createMessage({ message: 'message for the buttons', buttons: [ { type: 'keyboardButton', label: 'Value 1' }, { type: 'keyboardButton', label: 'Value 2' }, { type: 'newline' }, { type: 'keyboardButton', label: 'Value 3' } ] }, 'telegram'); RED.node.config({}); KeyboardBlock(RED); RED.node.get().emit('input', msg); return RED.node.get().await() .then(function () { assert.equal(RED.node.message().payload.type, 'buttons'); 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, 'keyboardButton'); assert.equal(RED.node.message().payload.buttons[0].label, 'Value 1'); assert.equal(RED.node.message().payload.buttons[1].type, 'keyboardButton'); assert.equal(RED.node.message().payload.buttons[1].label, 'Value 2'); assert.equal(RED.node.message().payload.buttons[2].type, 'newline'); assert.equal(RED.node.message().payload.buttons[3].type, 'keyboardButton'); assert.equal(RED.node.message().payload.buttons[3].label, 'Value 3'); }); }); it('should NOT send custom keyboard in Facebook', function () { var msg = RED.createMessage({}, 'facebook'); RED.node.config({ message: 'message for the buttons', answers: [ { value: 'value 1', label: 'Value 1' }, { value: 'value 2', label: 'Value 2' }, { value: 'value 3', label: 'Value 3' } ] }); KeyboardBlock(RED); RED.node.get().emit('input', msg); assert.isNull(RED.node.message()); }); it('should NOT send custom keyboard in Smooch', function () { var msg = RED.createMessage({}, 'smooch'); RED.node.config({ message: 'message for the buttons', answers: [ { value: 'value 1', label: 'Value 1' }, { value: 'value 2', label: 'Value 2' }, { value: 'value 3', label: 'Value 3' } ] }); KeyboardBlock(RED); RED.node.get().emit('input', msg); assert.isNull(RED.node.message()); }); it('should NOT send custom keyboard in Slack', function () { var msg = RED.createMessage({}, 'slack'); RED.node.config({ message: 'message for the buttons', answers: [ { value: 'value 1', label: 'Value 1' }, { value: 'value 2', label: 'Value 2' }, { value: 'value 3', label: 'Value 3' } ] }); KeyboardBlock(RED); RED.node.get().emit('input', msg); assert.isNull(RED.node.message()); }); });