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

309 lines (274 loc) 13.7 kB
var _ = require('underscore'); var assert = require('chai').assert; var validators = require('../lib/helpers/validators'); describe('Validators', function() { it('validate a button', function() { assert.isFalse(validators.button({})); assert.isFalse(validators.button({type: null})); assert.isFalse(validators.button()); assert.isTrue(validators.button({type: 'url'})); assert.isTrue(validators.button({type: 'share'})); assert.isTrue(validators.button({type: 'postback'})); }); it('validate buttons', function() { assert.isFalse(validators.buttons([])); assert.isFalse(validators.buttons([{}])); assert.isTrue(validators.buttons([{type: 'url'}])); assert.isTrue(validators.buttons([{type: 'postback'}, {type: 'url'}])); assert.isTrue(validators.buttons([ {type: 'postback'}, {label: 'subitems', items: [{type: 'postback'}, {type: 'url'}]} ])); assert.isFalse(validators.buttons([{type: 'postback'}, {type: 'url'}, {}])); assert.isFalse(validators.buttons([{type: 'wrong-type'}, {type: 'url'}, {}])); }); it('validate a generic template', function() { assert.isFalse(validators.genericTemplateElement({})); assert.isFalse(validators.genericTemplateElement({title: 'title'})); assert.isTrue(validators.genericTemplateElement({ title: 'title', buttons: [{type: 'postback'}, {type: 'url'}] })); assert.isTrue(validators.genericTemplateElement({ title: 'title', subtitle: 'subtittle', buttons: [{type: 'postback'}, {type: 'url'}, {type: 'share'}] })); assert.isFalse(validators.genericTemplateElement({ title: 'title', subtitle: 'subtittle', buttons: [{type: 'postback'}, {type: 'url'}, {}] })); }); it('validate a generic template array', function() { assert.isFalse(validators.genericTemplateElements([])); assert.isFalse(validators.genericTemplateElements([{}])); assert.isFalse(validators.genericTemplateElements([ {title: 'title'} ])); assert.isTrue(validators.genericTemplateElements([ {title: 'title', buttons: [{type: 'postback'}, {type: 'url'}]} ])); assert.isTrue(validators.genericTemplateElements([ {title: 'title', buttons: [{type: 'postback'}, {type: 'url'}]}, {title: 'title2', subtitle: 'subtitle2', buttons: [{type: 'postback'}, {type: 'share'}]} ])); assert.isFalse(validators.genericTemplateElements([ {title: 'title', buttons: [{type: 'postback'}, {type: 'url'}]}, {title: 'title2', subtitle: 'subtitle2', buttons: [{type: 'postback'}, {type: 'share'}, {}]} ])); }); it('validates a file path', function() { assert.isFalse(validators.filepath('not a real path')); assert.isTrue(validators.filepath('/dir/file.mp3')); assert.isTrue(validators.filepath('/dir/test')); assert.isTrue(validators.filepath('./dir/test')); assert.isTrue(validators.filepath('../dir/test')); }); it('validates a url', function() { assert.isFalse(validators.url('http://barabba')); assert.isFalse(validators.url('not a real url')); assert.isFalse(validators.url('http://')); assert.isFalse(validators.url('http://notld')); assert.isTrue(validators.url('http://domain.it')); assert.isTrue(validators.url('http://host.com//dir/file.mp3')); assert.isTrue(validators.url('https://hots.com/dir/file.mp3')); assert.isTrue(validators.url(' https://username:password@www.mydomain.it/cgi-bin')); assert.isTrue(validators.url(' https://username:password@www.mydomain.it:8184/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=xxxxx&pwd=xxxxxxxx')); assert.isTrue(validators.url(' https://username:password@192.168.1.23:8184/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=xxxxx&pwd=xxxxxxxx')); }); it('validates a buffer', function() { assert.isFalse(validators.buffer('not a real buffer')); assert.isTrue(validators.buffer(new Buffer('just a buffer'))); }); it('validates a string', function() { assert.isFalse(validators.string(42)); assert.isFalse(validators.string('')); assert.isFalse(validators.string({})); assert.isTrue(validators.string('test string')); }); it('validates a boolean', function() { assert.isFalse(validators.boolean(42)); assert.isFalse(validators.boolean('')); assert.isFalse(validators.boolean('true')); assert.isTrue(validators.boolean(true)); assert.isTrue(validators.boolean(false)); }); it('validates an array', function() { assert.isFalse(validators.array(42)); assert.isFalse(validators.array('[]')); assert.isFalse(validators.array([])); assert.isTrue(validators.array([1])); assert.isTrue(validators.array([1, 2])); }); it('validates NLP token', function() { assert.isTrue(validators.nlpToken('is[verb]')); assert.isTrue(validators.nlpToken('[noun]->my_var')); assert.isTrue(validators.nlpToken('is[verb]->verb')); assert.isFalse(validators.nlpToken('is[verb')); assert.isFalse(validators.nlpToken('[verb]-')); assert.isFalse(validators.nlpToken('[verb]->[')); assert.isFalse(validators.nlpToken('[verb]->')); assert.isFalse(validators.nlpToken('[]->var')); }); it('validates NLP tokens', function() { assert.isTrue(validators.nlpTokens('is[verb],[noun]->my_var')); assert.isTrue(validators.nlpTokens('[noun]->my_var')); assert.isFalse(validators.nlpTokens('[noun->my_var')); assert.isFalse(validators.nlpTokens('is[verb],[noun->my_var')); }); it('validates an integer', function() { assert.isTrue(validators.integer('42')); assert.isTrue(validators.integer('12')); assert.isFalse(validators.integer('')); assert.isFalse(validators.integer('fortytwo')); assert.isFalse(validators.integer('{{variable}}')); }); it('validates a float', function() { assert.isTrue(validators.float('42.22')); assert.isTrue(validators.float('0042.2123123')); assert.isTrue(validators.float('12')); assert.isFalse(validators.float('')); assert.isFalse(validators.float('fortytwo')); }); it('validates a variable', function() { assert.isTrue(validators.isVariable('{{price}}')); assert.isFalse(validators.isVariable('{{price{{')); }); it('validates a Telegram price', function() { assert.isTrue(validators.invoiceItem({ label: 'Test', amount: '1.23' })); assert.isFalse(validators.invoiceItem({ label: 'Test', amount: '{{price{{' })); }); it('validates a Telegram prices', function() { assert.isTrue(validators.invoiceItems([{ label: 'Test', amount: '1.23' }])); assert.isTrue(validators.invoiceItems([{ label: 'Test', amount: '1.23' }, { label: 'Test 2', amount: 1.23 }])); assert.isTrue(validators.invoiceItems([{ label: 'Test', amount: '{{price}}' }, { label: 'Test 2', amount: 1.23 }])); assert.isFalse(validators.invoiceItems([{ label: 'Test', amount: null }])); assert.isFalse(validators.invoiceItems([{ label: 'Test', amount: '{{price{{' }, { label: 'Test 2', amount: 1.23 }])); assert.isFalse(validators.invoiceItems([{ label: null, amount: '1.23' }])); }); it('Validates a URL', function() { assert.isTrue(validators.url('http://www.google.com')); assert.isFalse(validators.secureUrl('http://www.google.com')); assert.isTrue(validators.secureUrl('https://www.google.com')); assert.isTrue(validators.url('http://www.google.com/barabba')); assert.isFalse(validators.url('www.google.com/barabba')); assert.isFalse(validators.url('http://google/barabba')); }); it('validates a Telegram configuration', function() { var base = { authorizedUsernames: '12213123', token: 'xxx:xxxxyyyyyyzzzz', polling: 1000, parseMode: 'none', contextProvider: 'memory', logfile: null, connectMode: 'polling' }; assert.isNull(validators.platform.telegram(base)); assert.isNull(validators.platform.telegram(_.extend({}, base, { connectMode: null }))); assert.isNotNull(validators.platform.telegram(_.extend({}, base, { polling: 'aaaa'}))); assert.isNotNull(validators.platform.telegram(_.extend({}, base, { connectMode: 'webHook' }))); assert.isNull(validators.platform.telegram(_.extend({}, base, { connectMode: 'webHook', webHook: 'https://1234.endpoint.it/blabla' }))); assert.isNotNull(validators.platform.telegram(_.extend({}, base, { connectMode: 'webHook', webHook: 'http://1234.endpoint.it/blabla' }))); assert.isNotNull(validators.platform.telegram(_.extend({}, base, { token: null}))); assert.isNotNull(validators.platform.telegram(_.extend({}, base, { token: ''}))); assert.isNotNull(validators.platform.telegram(_.extend({}, base, { contextProvider: 'wrong_context'}))); assert.isNotNull(validators.platform.telegram(_.extend({}, base, { authorizedUsernames: 42}))); assert.isNotNull(validators.platform.telegram(_.extend({}, base, { logfile: 42}))); }); it('validates a Slack configuration', function() { var base = { botname: 'guidone_bot', token: 'xoxb-00000000-1111111111111', authorizedUsernames: null, contextProvider: 'memory', logfile: null, oauthToken: '12345678901234567890' }; assert.isNull(validators.platform.slack(base)); assert.isNotNull(validators.platform.slack(_.extend(base, { botname: null}))); assert.isNotNull(validators.platform.slack(_.extend(base, { token: null}))); assert.isNotNull(validators.platform.slack(_.extend(base, { token: ''}))); assert.isNotNull(validators.platform.slack(_.extend(base, { contextProvider: 'wrong_context'}))); assert.isNotNull(validators.platform.slack(_.extend(base, { authorizedUsernames: 42}))); assert.isNotNull(validators.platform.slack(_.extend(base, { logfile: 42}))); }); it('validates a Facebook configuration', function() { var base = { authorizedUsernames: null, token: 'xxxxyyyyzzzz', verifyToken: 'test', appSecret: 'xxxxyyyyyzzzz', contextProvider: 'memory', logfile: null }; assert.isNull(validators.platform.facebook(base)); assert.isNull(validators.platform.facebook(_.extend({}, base, { profileFields: 'first_name'}))); assert.isNotNull(validators.platform.facebook(_.extend({}, base, { appSecret: null}))); assert.isNotNull(validators.platform.facebook(_.extend({}, base, { appSecret: ''}))); assert.isNotNull(validators.platform.facebook(_.extend({}, base, { token: null}))); assert.isNotNull(validators.platform.facebook(_.extend({}, base, { token: ''}))); assert.isNotNull(validators.platform.facebook(_.extend({}, base, { contextProvider: 'wrong_context'}))); assert.isNotNull(validators.platform.facebook(_.extend({}, base, { authorizedUsernames: 42}))); assert.isNotNull(validators.platform.facebook(_.extend({}, base, { logfile: 42}))); assert.isNotNull(validators.platform.facebook(_.extend({}, base, { profileFields: 42}))); }); it('validates a Twilio configuration', function() { var base = { authorizedUsernames: null, fromNumber: '+39123456', accountSid: '236472347623462376', authToken: 'aiqwgdkansljdeife', contextProvider: 'memory', logfile: null }; assert.isNull(validators.platform.twilio(base)); assert.isNotNull(validators.platform.twilio(_.extend({}, base, { fromNumber: null}))); assert.isNotNull(validators.platform.twilio(_.extend({}, base, { fromNumber: ''}))); assert.isNotNull(validators.platform.twilio(_.extend({}, base, { authToken: null}))); assert.isNotNull(validators.platform.twilio(_.extend({}, base, { authToken: ''}))); assert.isNotNull(validators.platform.twilio(_.extend({}, base, { accountSid: null}))); assert.isNotNull(validators.platform.twilio(_.extend({}, base, { accountSid: ''}))); assert.isNotNull(validators.platform.twilio(_.extend({}, base, { contextProvider: 'wrong_context'}))); assert.isNotNull(validators.platform.twilio(_.extend({}, base, { authorizedUsernames: 42}))); assert.isNotNull(validators.platform.twilio(_.extend({}, base, { logfile: 42}))); }); it('validates a Alexa configuration', function() { var base = { authorizedUsernames: null, contextProvider: 'memory', logfile: null }; assert.isNull(validators.platform.alexa(base)); assert.isNotNull(validators.platform.alexa(_.extend({}, base, { contextProvider: 'wrong_context'}))); assert.isNotNull(validators.platform.alexa(_.extend({}, base, { authorizedUsernames: 42}))); assert.isNotNull(validators.platform.alexa(_.extend({}, base, { logfile: 42}))); }); it('validates an invoice', function() { var invoice = { title: "PostCard Bot", description :"Payment for Guido's postcard", payload:"196520947", prices: [{"label":"Color Postcard 10x15 cm","amount":"2.49"}], photoUrl: "http://res.cloudinary.com/guido-bellomo/image/upload/v1523858227/lxgmygzcxdmf0cle8vmk.jpg", photoHeight: 960, photoWidth: 1280, currency: 'EUR' }; assert.isTrue(validators.invoice(invoice)); assert.isFalse(validators.invoice(Object.assign(invoice, { photoWidth: null }))); assert.isFalse(validators.invoice(Object.assign(invoice, { photoWidth: '{{variable}}' }))); assert.isFalse(validators.invoice(Object.assign(invoice, { photoHeight: null }))); assert.isFalse(validators.invoice(Object.assign(invoice, { title: null }))); assert.isFalse(validators.invoice(Object.assign(invoice, { payload: null }))); assert.isFalse(validators.invoice(Object.assign(invoice, { prices: null }))); assert.isFalse(validators.invoice(Object.assign(invoice, { currency: null }))); }); });