1
1
mirror of https://github.com/leon-ai/leon.git synced 2024-09-11 10:25:40 +03:00

new test suite

This commit is contained in:
JosephVanKessel 2021-06-09 18:44:11 -07:00
parent 37946b6a90
commit 2c8b5e8451
2 changed files with 221 additions and 117 deletions

View File

@ -0,0 +1,221 @@
function getPossibleExpressions(expressionType, count) {
const data = require('../data/expressions/en.json')
switch (expressionType)
{
case "create list":
return data.todolist.create_list.expressions
case "view lists":
return data.todolist.view_lists.expressions
case "view list":
return data.todolist.view_list.expressions
case "rename list":
return data.todolist.view_list.expressions
case "delete list":
return data.todolist.delete_list.expressions
case "add todos":
return data.todolist.add_todos.expressions
case "complete todos":
return data.todolist.complete_todos.expressions
case "uncheck todos":
return data.todolist.uncheck_todos.expressions
default:
console.log("invalid expression type requested")
break
}
}
function getOutputs(){
const fs = require('fs')
const path = require('path')
let data = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../data/db/calendar.spec.json')))
return data
}
async function testCreateListExpressions(count) {
const expression = getPossibleExpressions("create list")[count]
var quote = '\"'
var expectedIndex = quote.concat(count.toString()).concat('\" list')
global.nlu.brain.execute = jest.fn()
await global.nlu.process(expression.replace("x", count))
var [obj] = global.nlu.brain.execute.mock.calls
await global.brain.execute(obj[0])
return [global.brain.finalOutput, expectedIndex]
}
async function testViewListsExpressions(count) {
const expression = getPossibleExpressions("view lists")[count]
var quote = '\"'
global.nlu.brain.execute = jest.fn()
await global.nlu.process(expression)
var [obj] = global.nlu.brain.execute.mock.calls
await global.brain.execute(obj[0])
return global.brain.finalOutput
}
async function testExpression(expression) {
global.nlu.brain.execute = jest.fn()
await global.nlu.process(expression)
var [obj] = global.nlu.brain.execute.mock.calls
await global.brain.execute(obj[0])
}
async function testExpressions(expressions) {
for (let i = 0; i < expressions.length; i++){
await testExpression(expressions[i])
}
}
function createObjs(){
var data = getOutputs()
var todo = data.todo_todos
var todoObj = {}
var list = data.todo_lists
var listObj = {}
var i = 0
var todoLen = Object.keys(todo).length
var listLen = Object.keys(list).length
for (let i = 1; i < todoLen+1; i++)
todoObj[i] = {
"list": todo[i].list,
"name": todo[i].name,
"is_completed": todo[i].is_completed
}
for (let i = 1; i < listLen+1; i++)
listObj[i] = {"name": list[i].name}
return [listObj, todoObj]
}
describe('calendar:todolist', async () => {
test('Create two lists', async () => {
const expressions = [
'Create a shopping list',
'Create a school list'
]
const expected = {
'1': {
"name": 'shopping'
},
'2': {
"name": 'school'
}
}
await testExpressions(expressions)
var list = createObjs()
expect(JSON.stringify(list[0])).toBe(JSON.stringify(expected))
})
test('Add 5 elements to a list 3 individually and 2 at the same time', async () => {
const expressions = [
'Add bread to my shopping list',
'Add milk to my shopping list',
'Add cheese to the shopping list',
'Add butter, sugar to the shopping list'
]
const expected = {
'1': {
"list": "shopping",
"name": "bread",
"is_completed": false
},
'2': {
"list": "shopping",
"name": "milk",
"is_completed": false
},
'3': {
"list": "shopping",
"name": "cheese",
"is_completed": false
},
'4': {
"list": "shopping",
"name": "butter",
"is_completed": false
},
'5': {
"list": "shopping",
"name": "sugar",
"is_completed": false
}
}
await testExpressions(expressions)
var list = createObjs()
expect(JSON.stringify(list[1])).toBe(JSON.stringify(expected))
})
test('check off all elements in shopping list', async () => {
const expressions = [
'Check bread from my shopping list',
'Check milk from the shopping list',
'Complete cheese from the shopping list',
'Tick butter, sugar from the shopping list'
]
const expected = {
'1': {
"list": "shopping",
"name": "bread",
"is_completed": true
},
'2': {
"list": "shopping",
"name": "milk",
"is_completed": true
},
'3': {
"list": "shopping",
"name": "cheese",
"is_completed": true
},
'4': {
"list": "shopping",
"name": "butter",
"is_completed": true
},
'5': {
"list": "shopping",
"name": "sugar",
"is_completed": true
}
}
await testExpressions(expressions)
var list = createObjs()
expect(JSON.stringify(list[1])).toBe(JSON.stringify(expected))
})
test('add item to school list then rename it', async () => {
const expressions = [
'Add cats to my school list',
'Rename the school list to buy'
]
const expectedTodo = {
"list": "buy",
"name": "cats",
"is_completed": false
}
const expectedList = {
"name": "buy"
}
await testExpressions(expressions)
var list = createObjs()
var todoVals = Object.values(list[1])
var listVals = Object.values(list[0])
var renameFlag = true
var todoFlag = true
listVals.forEach( obj => {
if (obj.name == "school") renameFlag = false
})
todoVals.forEach( obj => {
if (obj.name == "cats" && obj.list == "school") todoFlag = false
})
expect(renameFlag).toBe(true)
expect(todoFlag).toBe(true)
})
})

View File

@ -1,117 +0,0 @@
describe('calendar:todolist', async () => {
test('no list', async () => {
global.nlu.brain.execute = jest.fn()
await global.nlu.process('Show all my lists')
const [obj] = global.nlu.brain.execute.mock.calls
await global.brain.execute(obj[0])
expect(global.brain.finalOutput.codes).toIncludeSameMembers(['no_list'])
})
test('adds 3 todos and create a list', async () => {
global.nlu.brain.execute = jest.fn()
await global.nlu.process('Add 7 potatoes, 1kg of rice, bread to the shopping list')
const [obj] = global.nlu.brain.execute.mock.calls
await global.brain.execute(obj[0])
expect(global.brain.finalOutput.speech.split('</li>').length - 1).toBe(3)
expect(global.brain.finalOutput.speech.indexOf('"shopping" list')).not.toBe(-1)
expect(global.brain.finalOutput.codes).toIncludeSameMembers(['todos_added'])
})
test('completes a todo', async () => {
global.nlu.brain.execute = jest.fn()
await global.nlu.process('Complete rice from my shopping list')
const [obj] = global.nlu.brain.execute.mock.calls
await global.brain.execute(obj[0])
expect(global.brain.finalOutput.speech.split('</li>').length - 1).toBe(1)
expect(global.brain.finalOutput.speech.indexOf('"shopping" list')).not.toBe(-1)
expect(global.brain.finalOutput.speech.indexOf('<strike>1kg of rice</strike>')).not.toBe(-1)
expect(global.brain.finalOutput.codes).toIncludeSameMembers(['todos_completed'])
})
test('views a list', async () => {
global.nlu.brain.execute = jest.fn()
await global.nlu.process('What is in my shopping list?')
const [obj] = global.nlu.brain.execute.mock.calls
await global.brain.execute(obj[0])
expect(global.brain.interOutput.codes).toIncludeSameMembers(['unchecked_todos_listed'])
expect(global.brain.interOutput.speech.split('</li>').length - 1).toBe(2)
expect(global.brain.interOutput.speech.indexOf('"shopping" list')).not.toBe(-1)
expect(global.brain.interOutput.speech.indexOf('7 potatoes')).not.toBe(-1)
expect(global.brain.interOutput.speech.indexOf('bread')).not.toBe(-1)
expect(global.brain.finalOutput.speech.split('</li>').length - 1).toBe(1)
expect(global.brain.finalOutput.speech.indexOf('"shopping" list')).not.toBe(-1)
expect(global.brain.finalOutput.speech.indexOf('<strike>1kg of rice</strike>')).not.toBe(-1)
expect(global.brain.finalOutput.codes).toIncludeSameMembers([
'unchecked_todos_listed',
'completed_todos_listed'
])
})
test('creates a list', async () => {
global.nlu.brain.execute = jest.fn()
await global.nlu.process('Create the movies list')
const [obj] = global.nlu.brain.execute.mock.calls
await global.brain.execute(obj[0])
expect(global.brain.finalOutput.speech.indexOf('"movies" list')).not.toBe(-1)
expect(global.brain.finalOutput.codes).toIncludeSameMembers(['list_created'])
})
test('renames a list', async () => {
global.nlu.brain.execute = jest.fn()
await global.nlu.process('Rename the movies list to cinema')
const [obj] = global.nlu.brain.execute.mock.calls
await global.brain.execute(obj[0])
expect(global.brain.finalOutput.speech.indexOf('"movies" list')).not.toBe(-1)
expect(global.brain.finalOutput.speech.indexOf('to "cinema"')).not.toBe(-1)
expect(global.brain.finalOutput.codes).toIncludeSameMembers(['list_renamed'])
})
test('unchecks a todo', async () => {
global.nlu.brain.execute = jest.fn()
await global.nlu.process('Uncheck rice from the shopping list')
const [obj] = global.nlu.brain.execute.mock.calls
await global.brain.execute(obj[0])
expect(global.brain.finalOutput.speech.split('</li>').length - 1).toBe(1)
expect(global.brain.finalOutput.speech.indexOf('"shopping" list')).not.toBe(-1)
expect(global.brain.finalOutput.speech.indexOf('1kg of rice')).not.toBe(-1)
expect(global.brain.finalOutput.codes).toIncludeSameMembers(['todo_unchecked'])
})
test('deletes a list', async () => {
global.nlu.brain.execute = jest.fn()
await global.nlu.process('Delete the cinema list')
const [obj] = global.nlu.brain.execute.mock.calls
await global.brain.execute(obj[0])
expect(global.brain.finalOutput.speech.indexOf('"cinema" list')).not.toBe(-1)
expect(global.brain.finalOutput.codes).toIncludeSameMembers(['list_deleted'])
})
test('views all lists', async () => {
global.nlu.brain.execute = jest.fn()
await global.nlu.process('Show all my lists')
const [obj] = global.nlu.brain.execute.mock.calls
await global.brain.execute(obj[0])
expect(global.brain.finalOutput.speech.split('</li>').length - 1).toBe(1)
expect(global.brain.finalOutput.speech.indexOf('"shopping"')).not.toBe(-1)
expect(global.brain.finalOutput.speech.indexOf('3')).not.toBe(-1)
expect(global.brain.finalOutput.codes).toIncludeSameMembers(['lists_listed'])
})
})