mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-21 04:59:15 +00:00
Test (core) OK
This commit is contained in:
17
__mocks__/mock.provider.js
Normal file
17
__mocks__/mock.provider.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
const { EventEmitter } = require('node:events')
|
||||||
|
|
||||||
|
class MockProvider extends EventEmitter {
|
||||||
|
delaySendMessage = (miliseconds, eventName, payload) =>
|
||||||
|
new Promise((res) =>
|
||||||
|
setTimeout(() => {
|
||||||
|
this.emit(eventName, payload)
|
||||||
|
res
|
||||||
|
}, miliseconds)
|
||||||
|
)
|
||||||
|
|
||||||
|
sendMessage = async (userId, message) => {
|
||||||
|
return Promise.resolve({ userId, message })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = MockProvider
|
||||||
@@ -56,6 +56,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@rollup/plugin-commonjs": "^23.0.2",
|
"@rollup/plugin-commonjs": "^23.0.2",
|
||||||
"c8": "^7.12.0",
|
"c8": "^7.12.0",
|
||||||
|
"cross-env": "^7.0.3",
|
||||||
"eslint": "^8.26.0",
|
"eslint": "^8.26.0",
|
||||||
"eslint-config-prettier": "^8.5.0",
|
"eslint-config-prettier": "^8.5.0",
|
||||||
"prettier": "^2.7.1",
|
"prettier": "^2.7.1",
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ class BotClass {
|
|||||||
listenerBusEvents = () => [
|
listenerBusEvents = () => [
|
||||||
{
|
{
|
||||||
event: 'require_action',
|
event: 'require_action',
|
||||||
func: ({ instructions }) =>
|
func: ({ instructions, title = '⚡⚡ ACCION REQUERIDA ⚡⚡' }) =>
|
||||||
printer(instructions, '⚡⚡ ACCION REQUERIDA ⚡⚡'),
|
printer(instructions, title),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: 'ready',
|
event: 'ready',
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
"format:write": "prettier --write .",
|
"format:write": "prettier --write .",
|
||||||
"lint:check": "eslint .",
|
"lint:check": "eslint .",
|
||||||
"lint:fix": "eslint --fix .",
|
"lint:fix": "eslint --fix .",
|
||||||
|
"test.unit": "cross-env NODE_ENV=test node ../../node_modules/uvu/bin.js tests",
|
||||||
"build:core": "yarn run format:write && yarn run lint:fix && yarn run io:rollup"
|
"build:core": "yarn run format:write && yarn run lint:fix && yarn run io:rollup"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const { EventEmitter } = require('node:events')
|
|
||||||
const { test } = require('uvu')
|
const { test } = require('uvu')
|
||||||
const assert = require('uvu/assert')
|
const assert = require('uvu/assert')
|
||||||
|
const MockProvider = require('../../../__mocks__/mock.provider')
|
||||||
const { create } = require('../')
|
const { create } = require('../')
|
||||||
const BotClass = require('../classes/bot.class')
|
const BotClass = require('../classes/bot.class')
|
||||||
|
|
||||||
@@ -12,9 +12,7 @@ class MockDB {
|
|||||||
save = () => {}
|
save = () => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MockProvider extends EventEmitter {}
|
test(`[BotClass] Probando instanciamiento de clase`, async () => {
|
||||||
|
|
||||||
test(`BotClass`, async () => {
|
|
||||||
const setting = {
|
const setting = {
|
||||||
flow: new MockFlow(),
|
flow: new MockFlow(),
|
||||||
database: new MockDB(),
|
database: new MockDB(),
|
||||||
@@ -22,7 +20,76 @@ test(`BotClass`, async () => {
|
|||||||
}
|
}
|
||||||
const bot = await create(setting)
|
const bot = await create(setting)
|
||||||
assert.is(bot instanceof BotClass, true)
|
assert.is(bot instanceof BotClass, true)
|
||||||
assert.is(bot.handleMsg({ body: 'test', to: 'to', from: 'from' }))
|
})
|
||||||
|
|
||||||
|
test(`[BotClass] 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 MockDB(),
|
||||||
|
provider: mockProvider,
|
||||||
|
}
|
||||||
|
await create(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.run()
|
test.run()
|
||||||
|
|
||||||
|
function delay(ms) {
|
||||||
|
return new Promise((res) => setTimeout(res, ms))
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
const { yellow, red, bgRed } = require('kleur')
|
const { yellow, bgRed } = require('kleur')
|
||||||
|
const NODE_ENV = process.env.NODE_ENV || 'dev'
|
||||||
const printer = (message, title) => {
|
const printer = (message, title) => {
|
||||||
console.clear()
|
if (NODE_ENV !== 'test') {
|
||||||
if (title) console.log(bgRed(`${title}`))
|
console.clear()
|
||||||
console.log(yellow(Array.isArray(message) ? message.join('\n') : message))
|
if (title) console.log(bgRed(`${title}`))
|
||||||
console.log(``)
|
console.log(
|
||||||
|
yellow(Array.isArray(message) ? message.join('\n') : message)
|
||||||
|
)
|
||||||
|
console.log(``)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = { printer }
|
module.exports = { printer }
|
||||||
|
|||||||
Reference in New Issue
Block a user