mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-18 11:39:15 +00:00
226 lines
6.8 KiB
JavaScript
226 lines
6.8 KiB
JavaScript
const { test } = require('uvu')
|
|
const assert = require('uvu/assert')
|
|
const FlowClass = require('../io/flow.class')
|
|
const MockProvider = require('../../../__mocks__/mock.provider')
|
|
const { createBot, CoreClass, createFlow, createProvider, ProviderClass } = require('../index')
|
|
|
|
class MockFlow {
|
|
allCallbacks = { ref: () => 1 }
|
|
flowSerialize = []
|
|
flowRaw = []
|
|
find = (arg) => {
|
|
if (arg) {
|
|
return [{ answer: 'answer', ref: 'ref' }]
|
|
} else {
|
|
return null
|
|
}
|
|
}
|
|
findBySerialize = () => ({})
|
|
findIndexByRef = () => 0
|
|
}
|
|
|
|
class MockDBA {
|
|
listHistory = []
|
|
save = () => {}
|
|
getPrevByNumber = () => {}
|
|
}
|
|
|
|
class MockDBB {
|
|
listHistory = []
|
|
save = () => {}
|
|
getPrevByNumber = () => ({
|
|
refSerialize: 'xxxxx',
|
|
ref: 'xxxx',
|
|
options: { callback: true },
|
|
})
|
|
}
|
|
|
|
class MockDBC {
|
|
listHistory = []
|
|
save = () => {}
|
|
getPrevByNumber = () => ({
|
|
refSerialize: 'xxxxx',
|
|
ref: 'xxxx',
|
|
options: { callback: true, nested: ['1', '2'] },
|
|
})
|
|
saveLog = () => {}
|
|
}
|
|
|
|
test(`[CoreClass] Probando instanciamiento de clase`, async () => {
|
|
const setting = {
|
|
flow: new MockFlow(),
|
|
database: new MockDBA(),
|
|
provider: new MockProvider(),
|
|
}
|
|
const bot = await createBot(setting)
|
|
assert.is(bot instanceof CoreClass, true)
|
|
})
|
|
|
|
test(`[CoreClass createFlow] Probando instanciamiento de clase`, async () => {
|
|
const mockCreateFlow = createFlow([])
|
|
assert.is(mockCreateFlow instanceof FlowClass, true)
|
|
})
|
|
|
|
test(`[CoreClass createProvider] Probando instanciamiento de clase`, async () => {
|
|
const mockCreateProvider = createProvider(MockProvider)
|
|
assert.is(mockCreateProvider instanceof ProviderClass, true)
|
|
})
|
|
|
|
test(`[Bot] Eventos 'require_action,ready,auth_failure,message '`, async () => {
|
|
let responseEvents = {}
|
|
|
|
const MOCK_EVENTS = {
|
|
require_action: {
|
|
instructions: 'Debes...',
|
|
},
|
|
ready: true,
|
|
auth_failure: {
|
|
instructions: 'Error...',
|
|
},
|
|
message: {
|
|
from: 'XXXXXX',
|
|
body: 'hola',
|
|
hasMedia: false,
|
|
},
|
|
}
|
|
|
|
const mockProvider = new MockProvider()
|
|
|
|
const setting = {
|
|
flow: new MockFlow(),
|
|
database: new MockDBA(),
|
|
provider: mockProvider,
|
|
}
|
|
await createBot(setting)
|
|
|
|
/// Escuchamos eventos
|
|
mockProvider.on('require_action', (r) => (responseEvents['require_action'] = r))
|
|
mockProvider.on('ready', (r) => (responseEvents['ready'] = r))
|
|
mockProvider.on('auth_failure', (r) => (responseEvents['auth_failure'] = r))
|
|
mockProvider.on('message', (r) => (responseEvents['message'] = r))
|
|
|
|
/// Emitimos eventos
|
|
mockProvider.delaySendMessage(0, 'require_action', MOCK_EVENTS.require_action)
|
|
mockProvider.delaySendMessage(0, 'ready', MOCK_EVENTS.ready)
|
|
mockProvider.delaySendMessage(0, 'auth_failure', MOCK_EVENTS.auth_failure)
|
|
mockProvider.delaySendMessage(0, 'message', MOCK_EVENTS.message)
|
|
|
|
await delay(0)
|
|
|
|
/// Testeamos eventos
|
|
assert.is(JSON.stringify(responseEvents.require_action), JSON.stringify(MOCK_EVENTS.require_action))
|
|
assert.is(responseEvents.ready, MOCK_EVENTS.ready)
|
|
|
|
assert.is(JSON.stringify(responseEvents.auth_failure), JSON.stringify(MOCK_EVENTS.auth_failure))
|
|
|
|
assert.is(JSON.stringify(responseEvents.message), JSON.stringify(MOCK_EVENTS.message))
|
|
})
|
|
|
|
test(`[Bot] Probando Flujos Internos`, async () => {
|
|
let responseEvents = {}
|
|
|
|
const MOCK_EVENTS = {
|
|
require_action: {
|
|
instructions: 'Debes...',
|
|
},
|
|
ready: true,
|
|
auth_failure: {
|
|
instructions: 'Error...',
|
|
},
|
|
message: {
|
|
from: 'XXXXXX',
|
|
body: 'hola',
|
|
hasMedia: false,
|
|
},
|
|
}
|
|
|
|
const mockProvider = new MockProvider()
|
|
|
|
const setting = {
|
|
flow: new MockFlow(),
|
|
database: new MockDBB(),
|
|
provider: mockProvider,
|
|
}
|
|
await createBot(setting)
|
|
|
|
/// Escuchamos eventos
|
|
mockProvider.on('require_action', (r) => (responseEvents['require_action'] = r))
|
|
mockProvider.on('ready', (r) => (responseEvents['ready'] = r))
|
|
mockProvider.on('auth_failure', (r) => (responseEvents['auth_failure'] = r))
|
|
mockProvider.on('message', (r) => (responseEvents['message'] = r))
|
|
|
|
/// Emitimos eventos
|
|
mockProvider.delaySendMessage(0, 'require_action', MOCK_EVENTS.require_action)
|
|
mockProvider.delaySendMessage(0, 'ready', MOCK_EVENTS.ready)
|
|
mockProvider.delaySendMessage(0, 'auth_failure', MOCK_EVENTS.auth_failure)
|
|
mockProvider.delaySendMessage(0, 'message', MOCK_EVENTS.message)
|
|
|
|
await delay(0)
|
|
|
|
/// Testeamos eventos
|
|
assert.is(JSON.stringify(responseEvents.require_action), JSON.stringify(MOCK_EVENTS.require_action))
|
|
assert.is(responseEvents.ready, MOCK_EVENTS.ready)
|
|
|
|
assert.is(JSON.stringify(responseEvents.auth_failure), JSON.stringify(MOCK_EVENTS.auth_failure))
|
|
|
|
assert.is(JSON.stringify(responseEvents.message), JSON.stringify(MOCK_EVENTS.message))
|
|
})
|
|
|
|
test(`[Bot] Probando Flujos Nested`, async () => {
|
|
let responseEvents = {}
|
|
|
|
const MOCK_EVENTS = {
|
|
require_action: {
|
|
instructions: 'Debes...',
|
|
},
|
|
ready: true,
|
|
auth_failure: {
|
|
instructions: 'Error...',
|
|
},
|
|
message: {
|
|
from: 'XXXXXX',
|
|
body: 'hola',
|
|
hasMedia: false,
|
|
},
|
|
}
|
|
|
|
const mockProvider = new MockProvider()
|
|
|
|
const setting = {
|
|
flow: new MockFlow(),
|
|
database: new MockDBC(),
|
|
provider: mockProvider,
|
|
}
|
|
const botInstance = await createBot(setting)
|
|
|
|
botInstance.sendProviderAndSave('xxxxx', 'xxxxx')
|
|
botInstance.continue('xxxxx', 'xxxxx')
|
|
/// Escuchamos eventos
|
|
mockProvider.on('require_action', (r) => (responseEvents['require_action'] = r))
|
|
mockProvider.on('ready', (r) => (responseEvents['ready'] = r))
|
|
mockProvider.on('auth_failure', (r) => (responseEvents['auth_failure'] = r))
|
|
mockProvider.on('message', (r) => (responseEvents['message'] = r))
|
|
|
|
/// Emitimos eventos
|
|
mockProvider.delaySendMessage(0, 'require_action', MOCK_EVENTS.require_action)
|
|
mockProvider.delaySendMessage(0, 'ready', MOCK_EVENTS.ready)
|
|
mockProvider.delaySendMessage(0, 'auth_failure', MOCK_EVENTS.auth_failure)
|
|
mockProvider.delaySendMessage(0, 'message', MOCK_EVENTS.message)
|
|
|
|
await delay(0)
|
|
|
|
/// Testeamos eventos
|
|
assert.is(JSON.stringify(responseEvents.require_action), JSON.stringify(MOCK_EVENTS.require_action))
|
|
assert.is(responseEvents.ready, MOCK_EVENTS.ready)
|
|
|
|
assert.is(JSON.stringify(responseEvents.auth_failure), JSON.stringify(MOCK_EVENTS.auth_failure))
|
|
|
|
assert.is(JSON.stringify(responseEvents.message), JSON.stringify(MOCK_EVENTS.message))
|
|
})
|
|
|
|
test.run()
|
|
|
|
function delay(ms) {
|
|
return new Promise((res) => setTimeout(res, ms))
|
|
}
|