botium-core
Version:
The Selenium for Chatbots
260 lines (249 loc) • 7.14 kB
JavaScript
const assert = require('chai').assert
const ButtonInput = require('../../../src/scripting/logichook/userinput/ButtonInput')
const MediaInput = require('../../../src/scripting/logichook/userinput/MediaInput')
const FormInput = require('../../../src/scripting/logichook/userinput/FormInput')
const convoStep = {
stepTag: 'MYSTEPTAG'
}
describe('scripting.userinputs.defaultUserInputs', function () {
describe('buttonInput', function () {
it('correct number of args', async function () {
const bi = new ButtonInput()
await bi.setUserInput({
convoStep,
args: ['Test1'],
meMsg: {}
})
})
it('wrong number of args', async function () {
const bi = new ButtonInput()
try {
await bi.setUserInput({
convoStep,
args: ['Test1', 'Test2'],
meMsg: {}
})
assert.fail('expected error')
} catch (err) {
assert.isDefined(err)
assert.instanceOf(err, Error)
}
})
it('empty argument list', async function () {
const bi = new ButtonInput()
try {
await bi.setUserInput({
convoStep,
meMsg: {}
})
assert.fail('expected error')
} catch (err) {
assert.isDefined(err)
assert.instanceOf(err, Error)
}
})
it('should set button in message as payload', async function () {
const bi = new ButtonInput()
const meMsg = {}
await bi.setUserInput({
convoStep,
args: ['Test1'],
meMsg
})
assert.isArray(meMsg.buttons)
assert.lengthOf(meMsg.buttons, 1)
assert.equal(meMsg.buttons[0].payload, 'Test1')
})
})
describe('mediaInput', function () {
it('correct number of args', async function () {
const mi = new MediaInput({}, { SECURITY_ALLOW_UNSAFE: true })
await mi.setUserInput({
convoStep,
args: ['Test1'],
meMsg: {},
convo: { sourceTag: { filename: '' } }
})
})
it('correct number of args with buffer', async function () {
const mi = new MediaInput()
await mi.setUserInput({
convoStep,
args: ['Test1', Buffer.from('hello')],
meMsg: {},
convo: { sourceTag: { filename: '' } }
})
})
it('wrong number of args', async function () {
const mi = new MediaInput()
return mi.setUserInput({
convoStep,
args: ['Test1', 'Test2'],
meMsg: {}
})
.then(() => assert.fail('expected error'))
.catch((err) => {
assert.isDefined(err)
assert.instanceOf(err, Error)
})
})
it('empty argument list', async function () {
const mi = new MediaInput()
return mi.setUserInput({
convoStep,
meMsg: {}
})
.then(() => assert.fail('expected error'))
.catch((err) => {
assert.isDefined(err)
assert.instanceOf(err, Error)
})
})
it('should set media in message', async function () {
const mi = new MediaInput({}, { SECURITY_ALLOW_UNSAFE: true })
const meMsg = {}
await mi.setUserInput({
convoStep,
args: ['Test1'],
meMsg,
convo: {
sourceTag: {
convoDir: 'mydir',
filename: 'myfile.convo.txt'
}
}
})
assert.isArray(meMsg.media)
assert.lengthOf(meMsg.media, 1)
assert.isTrue(meMsg.media[0].downloadUri.endsWith('mydir/Test1'))
})
})
describe('formInput', function () {
it('correct number of args', async function () {
const mi = new FormInput()
await mi.setUserInput({
convoStep,
args: ['NAME1', 'VALUE1'],
meMsg: {},
convo: { sourceTag: { filename: '' } }
})
})
it('wrong number of args', async function () {
const mi = new FormInput()
return mi.setUserInput({
convoStep,
args: [],
meMsg: {}
})
.then(() => assert.fail('expected error'))
.catch((err) => {
assert.isDefined(err)
assert.instanceOf(err, Error)
})
})
it('empty argument list', async function () {
const mi = new FormInput()
return mi.setUserInput({
convoStep,
meMsg: {}
})
.then(() => assert.fail('expected error'))
.catch((err) => {
assert.isDefined(err)
assert.instanceOf(err, Error)
})
})
it('should set form boolean in message', async function () {
const mi = new FormInput()
const meMsg = {}
await mi.setUserInput({
convoStep,
args: ['NAME1'],
meMsg,
convo: {
sourceTag: {
convoDir: 'mydir',
filename: 'myfile.convo.txt'
}
}
})
assert.isArray(meMsg.forms)
assert.lengthOf(meMsg.forms, 1)
assert.equal(meMsg.forms[0].name, 'NAME1')
assert.isTrue(meMsg.forms[0].value)
})
it('should set form value in message', async function () {
const mi = new FormInput()
const meMsg = {}
await mi.setUserInput({
convoStep,
args: ['NAME1', 'VALUE1'],
meMsg,
convo: {
sourceTag: {
convoDir: 'mydir',
filename: 'myfile.convo.txt'
}
}
})
assert.isArray(meMsg.forms)
assert.lengthOf(meMsg.forms, 1)
assert.equal(meMsg.forms[0].name, 'NAME1')
assert.equal(meMsg.forms[0].value, 'VALUE1')
})
it('should set form values in message', async function () {
const mi = new FormInput()
const meMsg = {}
await mi.setUserInput({
convoStep,
args: ['NAME1', 'VALUE1', 'VALUE2'],
meMsg,
convo: {
sourceTag: {
convoDir: 'mydir',
filename: 'myfile.convo.txt'
}
}
})
assert.isArray(meMsg.forms)
assert.lengthOf(meMsg.forms, 1)
assert.equal(meMsg.forms[0].name, 'NAME1')
assert.isArray(meMsg.forms[0].value)
assert.lengthOf(meMsg.forms[0].value, 2)
assert.equal(meMsg.forms[0].value[0], 'VALUE1')
assert.equal(meMsg.forms[0].value[1], 'VALUE2')
})
it('should set multiple form value in message', async function () {
const mi = new FormInput()
const meMsg = {}
await mi.setUserInput({
convoStep,
args: ['NAME1', 'VALUE1'],
meMsg,
convo: {
sourceTag: {
convoDir: 'mydir',
filename: 'myfile.convo.txt'
}
}
})
await mi.setUserInput({
convoStep,
args: ['NAME2', 'VALUE2'],
meMsg,
convo: {
sourceTag: {
convoDir: 'mydir',
filename: 'myfile.convo.txt'
}
}
})
assert.isArray(meMsg.forms)
assert.lengthOf(meMsg.forms, 2)
assert.equal(meMsg.forms[0].name, 'NAME1')
assert.equal(meMsg.forms[0].value, 'VALUE1')
assert.equal(meMsg.forms[1].name, 'NAME2')
assert.equal(meMsg.forms[1].value, 'VALUE2')
})
})
})