-
-
Notifications
You must be signed in to change notification settings - Fork 804
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #622 from codigoencasa/dev
Dev
- Loading branch information
Showing
23 changed files
with
736 additions
and
568 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 } |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.