Skip to content

Commit

Permalink
Merge pull request #622 from codigoencasa/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
leifermendez committed Feb 9, 2023
2 parents 14ee9ee + ba2ed54 commit b343204
Show file tree
Hide file tree
Showing 23 changed files with 736 additions and 568 deletions.
17 changes: 0 additions & 17 deletions .github/workflows/contributors.yml

This file was deleted.

39 changes: 39 additions & 0 deletions __mocks__/env.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
const MOCK_DB = require('../packages/database/src/mock')
const PROVIDER_DB = require('../packages/provider/src/mock')

class MOCK_FLOW {
allCallbacks = { ref: () => 1 }
flowSerialize = []
flowRaw = []
find = (arg) => {
if (arg) {
return [{ answer: 'answer', ref: 'ref' }]
} else {
return null
}
}
findBySerialize = () => ({})
findIndexByRef = () => 0
}

/**
* Preparar env para el test
* @param {*} context
*/
const setup = async (context) => {
context.provider = new PROVIDER_DB()
context.database = new MOCK_DB()
context.flow = new MOCK_FLOW()
}

const clear = async (context) => {
context.provider = null
context.database = null
context.flow = null
}

function delay(ms) {
return new Promise((res) => setTimeout(res, ms))
}

module.exports = { setup, clear, delay }
6 changes: 0 additions & 6 deletions __mocks__/mobile.mock.js

This file was deleted.

51 changes: 51 additions & 0 deletions __test__/0.1.0-case.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
const { suite } = require('uvu')
const assert = require('uvu/assert')
const { addKeyword, createBot, createFlow } = require('../packages/bot/index')
const { setup, clear, delay } = require('../__mocks__/env')

const suiteCase = suite('Flujo: sensitive')

suiteCase.before.each(setup)
suiteCase.after.each(clear)

suiteCase(`Responder a "ole" en minuscula`, async ({ database, provider }) => {
const flow = addKeyword(['ola', 'ole'], { sensitive: true }).addAnswer('Bienvenido a la OLA')

createBot({
database,
provider,
flow: createFlow([flow]),
})

await provider.delaySendMessage(0, 'message', {
from: '000',
body: 'ole',
})

await delay(0)

assert.is('Bienvenido a la OLA', database.listHistory[0].answer)
assert.is(undefined, database.listHistory[1])
})

suiteCase(`NO Responder a "ole" en minuscula`, async ({ database, provider }) => {
const flow = addKeyword(['ola', 'ole'], { sensitive: true }).addAnswer('Bienvenido a la OLA')

createBot({
database,
provider,
flow: createFlow([flow]),
})

await provider.delaySendMessage(0, 'message', {
from: '000',
body: 'OLE',
})

await delay(0)

assert.is(undefined, database.listHistory[0])
assert.is(undefined, database.listHistory[1])
})

suiteCase.run()
89 changes: 89 additions & 0 deletions __test__/0.1.1-case.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
const { suite } = require('uvu')
const assert = require('uvu/assert')
const { addKeyword, createBot, createFlow } = require('../packages/bot/index')
const { setup, clear, delay } = require('../__mocks__/env')

const fakeHTTP = async () => {
await delay(10)
}

const suiteCase = suite('Flujo: hijos con callbacks')

suiteCase.before.each(setup)
suiteCase.after.each(clear)

suiteCase(`Debe continuar el flujo del hijo`, async ({ database, provider }) => {
const flowCash = addKeyword('cash').addAnswer('Traeme los billetes! 😎')

const flowOnline = addKeyword('paypal')
.addAnswer('Voy generar un link de paypal *escribe algo*', { capture: true }, async (_, { flowDynamic }) => {
await fakeHTTP()
await flowDynamic('Esperate.... estoy generando esto toma su tiempo')
})
.addAnswer('Aqui lo tienes 😎😎', null, async (_, { flowDynamic }) => {
await fakeHTTP()
await flowDynamic('http://paypal.com')
})
.addAnswer('Apurate!')

const flujoPrincipal = addKeyword('hola')
.addAnswer('¿Como estas todo bien?')
.addAnswer('Espero que si')
.addAnswer('¿Cual es tu email?', { capture: true }, async (ctx, { fallBack }) => {
if (!ctx.body.includes('@')) {
return fallBack('Veo que no es um mail *bien*')
}
})
.addAnswer('Voy a validar tu email...', null, async (_, { flowDynamic }) => {
await fakeHTTP()
return flowDynamic('Email validado correctamten!')
})
.addAnswer('¿Como vas a pagar *paypal* o *cash*?', { capture: true }, async () => {}, [flowCash, flowOnline])

createBot({
database,
flow: createFlow([flujoPrincipal]),
provider,
})

await provider.delaySendMessage(0, 'message', {
from: '000',
body: 'hola',
})

await provider.delaySendMessage(10, 'message', {
from: '000',
body: 'test@test.com',
})

await provider.delaySendMessage(15, 'message', {
from: '000',
body: 'paypal',
})

await provider.delaySendMessage(20, 'message', {
from: '000',
body: 'continue!',
})

await delay(500)
const getHistory = database.listHistory.map((i) => i.answer)

assert.is('¿Como estas todo bien?', getHistory[0])
assert.is('Espero que si', getHistory[1])
assert.is('¿Cual es tu email?', getHistory[2])
assert.is('test@test.com', getHistory[3])
assert.is('Voy a validar tu email...', getHistory[4])
assert.is('Email validado correctamten!', getHistory[5])
assert.is('¿Como vas a pagar *paypal* o *cash*?', getHistory[6])
assert.is('paypal', getHistory[7])
assert.is('Voy generar un link de paypal *escribe algo*', getHistory[8])
assert.is('continue!', getHistory[9])
assert.is('Esperate.... estoy generando esto toma su tiempo', getHistory[10])
assert.is('Aqui lo tienes 😎😎', getHistory[11])
assert.is('http://paypal.com', getHistory[12])
assert.is('Apurate!', getHistory[13])
assert.is(undefined, getHistory[14])
})

suiteCase.run()
52 changes: 52 additions & 0 deletions __test__/00-case.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
const { suite } = require('uvu')
const assert = require('uvu/assert')
const { addKeyword, createBot, createFlow } = require('../packages/bot/index')
const { setup, clear, delay } = require('../__mocks__/env')

const suiteCase = suite('Flujo: Simple')

suiteCase.before.each(setup)
suiteCase.after.each(clear)

suiteCase(`Responder a "hola"`, async ({ database, provider }) => {
const flow = addKeyword('hola').addAnswer('Buenas!').addAnswer('Como vamos!')

createBot({
database,
provider,
flow: createFlow([flow]),
})

await provider.delaySendMessage(0, 'message', {
from: '000',
body: 'hola',
})

await delay(0)

assert.is('Buenas!', database.listHistory[0].answer)
assert.is('Como vamos!', database.listHistory[1].answer)
assert.is(undefined, database.listHistory[2])
})

suiteCase(`NO reponder a "pepe"`, async ({ database, provider }) => {
const flow = addKeyword('hola').addAnswer('Buenas!').addAnswer('Como vamos!')

createBot({
database,
provider,
flow: createFlow([flow]),
})

await provider.delaySendMessage(0, 'message', {
from: '000',
body: 'pepe',
})

await delay(0)

assert.is(undefined, database.listHistory[0])
assert.is(undefined, database.listHistory[1])
})

suiteCase.run()
36 changes: 0 additions & 36 deletions __test__/01-case.test.js

This file was deleted.

Loading

0 comments on commit b343204

Please sign in to comment.