node-nlp
Version:
Library for NLU (Natural Language Understanding) done in Node.js
187 lines (178 loc) • 7.3 kB
JavaScript
var assert = require('assert');
var builder = require('../');
describe('actions', function() {
this.timeout(5000);
it('should launch dialog using a triggerAction()', function (done) {
var connector = new builder.ConsoleConnector();
var bot = new builder.UniversalBot(connector);
bot.dialog('/test', function (session, args) {
assert(session !== null);
assert(args !== null);
done();
}).triggerAction({ matches: /test/i });
connector.processMessage('test');
});
it('should launch dialog using a triggerAction() with a intent', function (done) {
var connector = new builder.ConsoleConnector();
var bot = new builder.UniversalBot(connector);
bot.recognizer(new builder.RegExpRecognizer('test', /test/i));
bot.dialog('/test', function (session, args) {
done();
}).triggerAction({ matches: 'test' });
connector.processMessage('test');
});
it('should launch dialog using a triggerAction() with custom onFindAction.', function (done) {
var connector = new builder.ConsoleConnector();
var bot = new builder.UniversalBot(connector);
bot.dialog('/test', function (session, args) {
done();
}).triggerAction({
onFindAction: function (context, callback) {
assert(context !== null);
assert(callback !== null);
callback(null, 1.0);
}
});
connector.processMessage('test');
});
it('should allow passing of custom data to dialog from onFindAction.', function (done) {
var connector = new builder.ConsoleConnector();
var bot = new builder.UniversalBot(connector);
bot.dialog('/test', function (session, args) {
assert(args && args.data);
assert(args.data == 'test');
done();
}).triggerAction({
onFindAction: function (context, callback) {
callback(null, 1.0, { data: 'test' });
}
});
connector.processMessage('test');
});
it('should allow interception of a triggered action using onSelectAction.', function (done) {
var connector = new builder.ConsoleConnector();
var bot = new builder.UniversalBot(connector);
bot.dialog('/', function (session) {
session.send('Hi');
}).triggerAction({
matches: /test/i,
onSelectAction: function (session, args, next) {
assert(session !== null);
assert(args !== null);
assert(args.action === '*:/');
assert(next !== null);
done();
}
});
connector.processMessage('test');
});
it('should reload the same dialog using a reloadAction().', function (done) {
var menuLoaded = false;
var connector = new builder.ConsoleConnector();
var bot = new builder.UniversalBot(connector);
bot.dialog('/', function (session) {
session.beginDialog('/menu');
});
bot.dialog('/menu', function (session, args) {
builder.Prompts.text(session, "ChooseOption");
}).reloadAction('showMenu', null, { matches: /show menu/i });
bot.on('send', function (message) {
switch (message.text) {
case 'ChooseOption':
if (!menuLoaded) {
menuLoaded = true;
connector.processMessage("show menu");
} else {
done();
}
break;
default:
assert(false);
break;
}
});
connector.processMessage('test');
});
it('should reload the same dialog using a reloadAction() but pass additional args.', function (done) {
var connector = new builder.ConsoleConnector();
var bot = new builder.UniversalBot(connector);
bot.dialog('/', function (session) {
session.beginDialog('/menu');
});
bot.dialog('/menu', function (session, args) {
if (args && args.reloaded) {
builder.Prompts.text(session, "ReloadedChooseOption");
} else {
builder.Prompts.text(session, "ChooseOption");
}
}).reloadAction('showMenu', null, {
matches: /show menu/i,
dialogArgs: { reloaded: true }
});
bot.on('send', function (message) {
switch (message.text) {
case 'ChooseOption':
connector.processMessage("show menu");
break;
case 'ReloadedChooseOption':
done();
break;
default:
assert(false);
break;
}
});
connector.processMessage('test');
});
it('should load a diffierent dialog using beginDialogAction().', function (done) {
var connector = new builder.ConsoleConnector();
var bot = new builder.UniversalBot(connector);
bot.dialog('/', function (session) {
builder.Prompts.text(session, "ChooseFood");
}).beginDialogAction('foodMenu', '/menu', {
matches: /show menu/i,
dialogArgs: { title: 'FoodOptions' }
});
bot.dialog('/menu', function (session, args) {
var title = args && args.title ? args.title : 'NoTitle';
session.send(title);
});
bot.on('send', function (message) {
switch (message.text) {
case 'ChooseFood':
connector.processMessage("show menu");
break;
case 'FoodOptions':
done();
break;
default:
assert(false);
break;
}
});
connector.processMessage('test');
});
it('should end the current conversation using endConversationAction().', function (done) {
var connector = new builder.ConsoleConnector();
var bot = new builder.UniversalBot(connector);
bot.dialog('/', function (session) {
builder.Prompts.text(session, "ChooseFood");
}).endConversationAction('quit', "goodbye", { matches: /goodbye/i });
bot.on('send', function (message) {
if (message.text) {
switch (message.text) {
case 'ChooseFood':
connector.processMessage("goodbye");
break;
case 'goodbye':
done();
break;
default:
assert(false);
break;
}
}
});
connector.processMessage('test');
});
});