botium-core
Version:
The Selenium for Chatbots
150 lines (139 loc) • 5.66 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('UserInputs.defaults.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', 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].text, 'Test1')
})
})
describe('UserInputs.defaults.mediaInput', function () {
it('correct number of args', async function () {
const mi = new MediaInput()
await mi.setUserInput({ convoStep, args: ['Test1'], 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()
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.equal(meMsg.media[0].mediaUri, 'file://mydir/Test1')
})
})
describe('UserInputs.defaults.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')
})
})