diff --git a/__tests__/basic.e2e.test.js b/__tests__/basic.e2e.test.js index 9ba4406..cc15291 100644 --- a/__tests__/basic.e2e.test.js +++ b/__tests__/basic.e2e.test.js @@ -35,11 +35,22 @@ test(`[BotClass]: recibe los mensajes entrantes del provider`, () => { provider: adapterProvider, }) - bot.on('message', (ctx) => messages.push(ctx.body)) - bot.emit('message', { body: 'hola' }) - bot.emit('message', { body: 'otro' }) + bot.on('message', (ctx) => messages.push(ctx)) + bot.emit('message', 'hola') + bot.emit('message', 'otro') - assert.is(messages.join(','), ['hola', '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() diff --git a/packages/core/classes/bot.class.js b/packages/core/classes/bot.class.js index 418548b..2c0b6a7 100644 --- a/packages/core/classes/bot.class.js +++ b/packages/core/classes/bot.class.js @@ -17,13 +17,14 @@ class BotClass { handleOnMessage = (ctxMessage) => { this.databaseClass.saveLog(ctxMessage) - this.continue(ctxMessage.body) + this.continue(ctxMessage) } continue = (message, ref = false) => { const responde = this.flowClass.find(message, ref) if (responde) { this.providerClass.sendMessage(responde.answer) + this.databaseClass.saveLog(responde.answer) this.continue(null, responde.ref) } } diff --git a/packages/database/adapters/mock.js b/packages/database/adapters/mock.js new file mode 100644 index 0000000..b3f0f6a --- /dev/null +++ b/packages/database/adapters/mock.js @@ -0,0 +1,11 @@ +class MockDatabase { + listHistory = [] + + constructor() {} + + save = (ctx) => { + this.listHistory.push(ctx) + } +} + +module.exports = MockDatabase diff --git a/packages/database/classes/database.class.js b/packages/database/classes/database.class.js index 86278c7..46c3bee 100644 --- a/packages/database/classes/database.class.js +++ b/packages/database/classes/database.class.js @@ -1,7 +1,11 @@ class DatabaseClass { - constructor() {} + engineDB + constructor(_engineDB) { + this.engineDB = _engineDB + } saveLog = (ctx) => { + this.engineDB.save(ctx) return ctx } } diff --git a/packages/database/index.js b/packages/database/index.js index 58e5e52..bd77d32 100644 --- a/packages/database/index.js +++ b/packages/database/index.js @@ -1,4 +1,12 @@ const DatabaseClass = require('./classes/database.class') +const MockDatabase = require('./adapters/mock') + +const prepareEngine = ({ engine, credentials }) => { + // if (engine === 'mysql') return new TwilioProvider(credentials) + // if (engine === 'meta') return new TwilioProvider(credentials) + // if (engine === 'wev') return new TwilioProvider(credentials) + return new MockDatabase() +} /** * Crear instancia de clase @@ -6,7 +14,8 @@ const DatabaseClass = require('./classes/database.class') * @returns */ const create = (args) => { - return new DatabaseClass(args) + const engine = prepareEngine(args) + return new DatabaseClass(engine) } module.exports = { create }