test and work

This commit is contained in:
Leifer Mendez
2022-11-11 15:10:34 +01:00
parent 45272fb34f
commit da8defc517
9 changed files with 38 additions and 52 deletions

View File

@@ -1,7 +1,6 @@
const MOCK_MOBILE_WS = { const MOCK_MOBILE_WS = {
username: 'Leifer', from: 'XXXXXX',
phone: '0000000', hasMedia: false,
message: 'ey!',
} }
module.exports = { MOCK_MOBILE_WS } module.exports = { MOCK_MOBILE_WS }

View File

@@ -1,9 +1,9 @@
const { test } = require('uvu') const { test } = require('uvu')
const assert = require('uvu/assert') const assert = require('uvu/assert')
const { MOCK_MOBILE_WS } = require('../__mocks__/mobile.mock')
const { inout, database, botcore } = require('../packages/index') const { inout, database, botcore } = require('../packages/index')
const mockProvider = require('../packages/provider/adapters/mock') const MockProvider = require('../packages/provider/adapters/mock')
const MockDB = require('../packages/database/adapters/mock')
const makeFlow = () => { const makeFlow = () => {
const flowA = inout const flowA = inout
@@ -24,28 +24,18 @@ test(`[BotClass]: recibe los mensajes entrantes del provider`, async () => {
const adapterFlow = inout.create(makeFlow()) const adapterFlow = inout.create(makeFlow())
const adapterProvider = mockProvider const adapterProvider = new MockProvider()
const adapterDB = await database.create({ const adapterDB = await database.create(new MockDB())
engine: 'mock',
credentials: {},
})
const bot = await botcore.create({ await botcore.create({
flow: adapterFlow, flow: adapterFlow,
database: adapterDB, database: adapterDB,
provider: adapterProvider, provider: adapterProvider,
}) })
adapterProvider.on('message', (ctx) => messagesIn.push(ctx.message)) await delay(1000)
adapterProvider.emit('message', { ...MOCK_MOBILE_WS, message: 'hola' })
assert.is(messagesIn.join(), ['hola'].join())
await delay(200)
adapterProvider.emit('message', { ...MOCK_MOBILE_WS, message: 'Pedro!' })
console.log(messagesIn)
assert.is(messagesIn.join(), ['hola', 'Pedro!'].join())
messagesOut = adapterDB.history messagesOut = adapterDB.history
// assert.is(messagesOut.join(), ['Pedro!'].join()) assert.is(messagesOut.join(), ['hola'].join())
}) })
function delay(miliseconds) { function delay(miliseconds) {

View File

@@ -1,7 +1,7 @@
const { yellow, red, bgRed } = require('kleur') const { yellow, red, bgRed } = require('kleur')
const printer = (message, title) => { const printer = (message, title) => {
console.clear() // console.clear()
if (title) console.log(bgRed(`${title}`)) if (title) console.log(bgRed(`${title}`))
console.log(yellow(Array.isArray(message) ? message.join('\n') : message)) console.log(yellow(Array.isArray(message) ? message.join('\n') : message))
console.log(``) console.log(``)

View File

@@ -1,21 +1,12 @@
const DatabaseClass = require('./classes/database.class') 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 * Crear instancia de clase
* @param {*} args * @param {*} args
* @returns * @returns
*/ */
const create = async (args) => { const create = async (engineClass) => {
const engine = prepareEngine(args) return new DatabaseClass(engineClass)
return new DatabaseClass(engine)
} }
module.exports = { create } module.exports = { create }

View File

@@ -1,6 +1,5 @@
const inout = require('./io') const inout = require('./io')
const provider = require('./provider')
const botcore = require('./core') const botcore = require('./core')
const database = require('./database') const database = require('./database')
module.exports = { inout, provider, botcore, database } module.exports = { inout, botcore, database }

View File

@@ -21,13 +21,13 @@ class MockProvider extends ProviderClass {
init = () => init = () =>
Promise.all([ Promise.all([
this.delaySendMessage(500, 'ready', null), this.delaySendMessage(50, 'ready', null),
this.delaySendMessage(1500, 'message', { this.delaySendMessage(500, 'message', {
from: 'XXXXXX', from: 'XXXXXX',
body: 'ola', body: 'hola',
hasMedia: false, hasMedia: false,
}), }),
]) ])
} }
module.exports = new MockProvider() module.exports = MockProvider

View File

@@ -3,21 +3,28 @@ const { ProviderClass } = require('@bot-whatsapp/core')
const { cleanNumber, generateImage } = require('./utils') const { cleanNumber, generateImage } = require('./utils')
const WebWhatsappVendor = new Client({
authStrategy: new LocalAuth(),
})
class WebWhatsappProvider extends ProviderClass { class WebWhatsappProvider extends ProviderClass {
vendor vendor
constructor(_vendor) { constructor(_vendor) {
super() super()
this.vendor = _vendor this.vendor = new Client({
authStrategy: new LocalAuth(),
})
for (const { event, func } of this.busEvents()) { const listEvents = this.busEvents()
for (const { event, func } of listEvents) {
this.vendor.on(event, func) this.vendor.on(event, func)
} }
this.vendor.initialize() this.vendor.initialize().catch((e) =>
this.emit('require_action', {
instructions: [
`Debes eliminar la carpeta .wwebjs_auth`,
`y reiniciar nuevamente el bot `,
],
})
)
} }
/** /**
@@ -26,6 +33,10 @@ class WebWhatsappProvider extends ProviderClass {
* @returns * @returns
*/ */
busEvents = () => [ busEvents = () => [
{
event: 'auth_failure',
func: (payload) => this.emit('error', payload),
},
{ {
event: 'qr', event: 'qr',
func: (qr) => { func: (qr) => {
@@ -43,10 +54,6 @@ class WebWhatsappProvider extends ProviderClass {
event: 'ready', event: 'ready',
func: () => this.emit('ready', true), func: () => this.emit('ready', true),
}, },
{
event: 'auth_failure',
func: (payload) => this.emit('error', payload),
},
{ {
event: 'authenticated', event: 'authenticated',
func: () => this.emit('ready', true), func: () => this.emit('ready', true),
@@ -63,4 +70,4 @@ class WebWhatsappProvider extends ProviderClass {
} }
} }
module.exports = new WebWhatsappProvider(WebWhatsappVendor) module.exports = WebWhatsappProvider

View File

@@ -1,9 +1,9 @@
const { test } = require('uvu') const { test } = require('uvu')
const assert = require('uvu/assert') const assert = require('uvu/assert')
const mockProvider = require('../adapters/mock') const MockProvider = require('../adapters/mock')
test(`ProviderClass`, async () => { test(`ProviderClass`, async () => {
const provider = mockProvider const provider = new MockProvider()
const msg = await provider.sendMessage('123456789', 'hola') const msg = await provider.sendMessage('123456789', 'hola')
console.log(msg) console.log(msg)
assert.is(msg.userId, '123456789') assert.is(msg.userId, '123456789')