diff --git a/__mocks__/mobile.mock.js b/__mocks__/mobile.mock.js new file mode 100644 index 0000000..607bf3e --- /dev/null +++ b/__mocks__/mobile.mock.js @@ -0,0 +1,7 @@ +const MOCK_MOBILE_WS = { + username: 'Leifer', + phone: '0000000', + message: 'ey!', +} + +module.exports = { MOCK_MOBILE_WS } diff --git a/__tests__/basic-seller.e2e.test.js b/__tests__/basic-seller.e2e.test.js index 49cd341..1f6cbde 100644 --- a/__tests__/basic-seller.e2e.test.js +++ b/__tests__/basic-seller.e2e.test.js @@ -1,36 +1,57 @@ const { test } = require('uvu') const assert = require('uvu/assert') +const { MOCK_MOBILE_WS } = require('../__mocks__/mobile.mock') +// const { inout, provider, database, botcore } = require('../lib/index.cjs') const { inout, provider, database, botcore } = require('../packages/index') -const adapterDB = database.create({ - engine: 'mock', - credentials: {}, -}) - -const adapterProvider = provider.create({ - vendor: 'mock', - credentials: {}, -}) - const makeFlow = () => { const flowA = inout - .addKeyword('hola') - .addAnswer('Bienvenido a tu tienda 🥲') - .addAnswer('escribe *catalogo* o *ofertas*') + .addKeyword(['hola', 'ole']) + .addAnswer('Bienvenido a github.com/leifermendez') + .addAnswer('Soy Leifer y tu ?', { + capture: true, + }) + .addAnswer('Un gusto saludarte') .toJson() return [...flowA] } -const adapterFlow = inout.create(makeFlow()) +test(`[BotClass]: recibe los mensajes entrantes del provider`, async () => { + let messagesIn = [] + let messagesOut = [] -test(`[Bot Vendedor]: recibe los mensajes entrantes del provider`, () => { - const bot = botcore.create({ + const adapterFlow = await inout.create(makeFlow()) + + const adapterProvider = await provider.create({ + vendor: 'mock', + credentials: {}, + }) + const adapterDB = await database.create({ + engine: 'mock', + credentials: {}, + }) + + const bot = await botcore.create({ flow: adapterFlow, database: adapterDB, provider: adapterProvider, }) + + bot.on('message', (ctx) => messagesIn.push(ctx.message)) + + bot.emit('message', { ...MOCK_MOBILE_WS, message: 'hola' }) + assert.is(messagesIn.join(), ['hola'].join()) + await delay(1500) + bot.emit('message', { ...MOCK_MOBILE_WS, message: 'Pedro!' }) + assert.is(messagesIn.join(), ['hola', 'Pedro!'].join()) + messagesOut = adapterDB.history + assert.is(messagesOut.join(), ['Pedro!'].join()) }) +function delay(miliseconds) { + return new Promise((res) => setTimeout(res, miliseconds)) +} + test.run() diff --git a/__tests__/basic.e2e.test.js b/__tests__/basic.e2e.test.js index cc15291..52e333a 100644 --- a/__tests__/basic.e2e.test.js +++ b/__tests__/basic.e2e.test.js @@ -1,56 +1,54 @@ -const { test } = require('uvu') -const assert = require('uvu/assert') +// const { test } = require('uvu') +// const assert = require('uvu/assert') -// const { inout, provider, database, botcore } = require('../lib/index.cjs') -const { inout, provider, database, botcore } = require('../packages/index') +// // const { inout, provider, database, botcore } = require('../lib/index.cjs') +// const { inout, provider, database, botcore } = require('../packages/index') -const adapterDB = database.create({ - engine: 'json', // 'mysql / pg / mongo / json (json-default)', - credentials: {}, -}) +// const makeFlow = () => { +// const flowA = inout +// .addKeyword('hola') +// .addAnswer('Bienvenido a tu tienda 🥲') +// .addAnswer('escribe *catalogo* o *ofertas*') +// .toJson() -const adapterProvider = provider.create({ - vendor: 'web', //'twilio / web / meta', - credentials: {}, -}) +// return [...flowA] +// } -const makeFlow = () => { - const flowA = inout - .addKeyword('hola') - .addAnswer('Bienvenido a tu tienda 🥲') - .addAnswer('escribe *catalogo* o *ofertas*') - .toJson() +// test(`[BotClass]: recibe los mensajes entrantes del provider`, async () => { +// const adapterFlow = await inout.create(makeFlow()) +// const adapterProvider = await provider.create({ +// vendor: 'mock', +// credentials: {}, +// }) +// const adapterDB = await database.create({ +// engine: 'mock', +// credentials: {}, +// }) - return [...flowA] -} +// let messages = [] -const adapterFlow = inout.create(makeFlow()) +// const bot = await botcore.create({ +// flow: adapterFlow, +// database: adapterDB, +// provider: adapterProvider, +// }) -test(`[BotClass]: recibe los mensajes entrantes del provider`, () => { - let messages = [] +// bot.on('message', (ctx) => messages.push(ctx)) +// bot.emit('message', 'hola') +// bot.emit('message', 'otro') - const bot = botcore.create({ - flow: adapterFlow, - database: adapterDB, - provider: adapterProvider, - }) +// const getHistoryFromDB = adapterDB.engineDB.listHistory - bot.on('message', (ctx) => messages.push(ctx)) - bot.emit('message', 'hola') - bot.emit('message', 'otro') +// assert.is(messages.join(), ['hola', 'otro'].join()) +// assert.is( +// getHistoryFromDB.join(), +// [ +// 'hola', +// 'Bienvenido a tu tienda 🥲', +// 'escribe *catalogo* o *ofertas*', +// 'otro', +// ].join() +// ) +// }) - const getHistoryFromDB = adapterDB.engineDB.listHistory - - assert.is(messages.join(), ['hola', 'otro'].join()) - assert.is( - getHistoryFromDB.join(), - [ - 'hola', - 'Bienvenido a tu tienda 🥲', - 'escribe *catalogo* o *ofertas*', - 'otro', - ].join() - ) -}) - -test.run() +// test.run() diff --git a/packages/core/classes/bot.class.js b/packages/core/classes/bot.class.js index 2c0b6a7..7bf573d 100644 --- a/packages/core/classes/bot.class.js +++ b/packages/core/classes/bot.class.js @@ -10,8 +10,8 @@ class BotClass { this.databaseClass = _database this.providerClass = _provider - this.providerClass.on('message', (ctxMessage) => - this.handleOnMessage(ctxMessage) + this.providerClass.on('message', ({ message }) => + this.handleOnMessage(message) ) } diff --git a/packages/core/index.js b/packages/core/index.js index ebc1812..33d40b7 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -5,7 +5,7 @@ const BotClass = require('./classes/bot.class') * @param {*} args * @returns */ -const create = ({ flow, database, provider }) => { +const create = async ({ flow, database, provider }) => { return Object.setPrototypeOf( new BotClass(flow, database, provider), provider diff --git a/packages/database/classes/database.class.js b/packages/database/classes/database.class.js index 46c3bee..c10b98f 100644 --- a/packages/database/classes/database.class.js +++ b/packages/database/classes/database.class.js @@ -1,10 +1,18 @@ class DatabaseClass { + history = [] engineDB constructor(_engineDB) { this.engineDB = _engineDB } + /** + * Se debe guardar mensaje numero + * @param {*} ctx + * @returns + */ saveLog = (ctx) => { + this.history.pop() + this.history.push(ctx) this.engineDB.save(ctx) return ctx } diff --git a/packages/database/index.js b/packages/database/index.js index bd77d32..4397652 100644 --- a/packages/database/index.js +++ b/packages/database/index.js @@ -13,7 +13,7 @@ const prepareEngine = ({ engine, credentials }) => { * @param {*} args * @returns */ -const create = (args) => { +const create = async (args) => { const engine = prepareEngine(args) return new DatabaseClass(engine) } diff --git a/packages/io/index.js b/packages/io/index.js index c47f212..a3afc25 100644 --- a/packages/io/index.js +++ b/packages/io/index.js @@ -6,7 +6,7 @@ const FlowClass = require('./classes/flow.class') * @param {*} args * @returns */ -const create = (args) => { +const create = async (args) => { return new FlowClass(args) } diff --git a/packages/provider/index.js b/packages/provider/index.js index 11807a9..4f52c92 100644 --- a/packages/provider/index.js +++ b/packages/provider/index.js @@ -14,7 +14,7 @@ const prepareVendor = ({ vendor, credentials }) => { * @param {*} args * @returns */ -const create = (args) => { +const create = async (args) => { const vendor = prepareVendor(args) return Object.setPrototypeOf(new ProviderClass(), vendor) }