Increase Coverage

This commit is contained in:
Leifer Mendez
2022-11-23 23:16:54 +01:00
parent 1dd88d117d
commit 14fbae3c86
4 changed files with 182 additions and 8 deletions

8
.c8rc.json Normal file
View File

@@ -0,0 +1,8 @@
{
"src": "./src",
"exclude": ["**/bot/lib", "__mocks__", "**/mock"],
"reporter": ["html"],
"report-dir": "./coverage",
"check-coverage": true,
"lines": 90
}

View File

@@ -1,3 +1,5 @@
[![Test / Coverage](https://github.com/leifermendez/bot-whatsapp/actions/workflows/ci.yml/badge.svg)](https://github.com/leifermendez/bot-whatsapp/actions/workflows/ci.yml)
- [ ] Evitar dependencias - [ ] Evitar dependencias
**Comunidad** **Comunidad**
@@ -8,3 +10,5 @@
- [Twitter](https://twitter.com/leifermendez) - [Twitter](https://twitter.com/leifermendez)
- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR) - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
- [Telegram](https://t.me/leifermendez) - [Telegram](https://t.me/leifermendez)

View File

@@ -4,21 +4,51 @@ const MockProvider = require('../../../__mocks__/mock.provider')
const { createBot, CoreClass } = require('../index') const { createBot, CoreClass } = require('../index')
class MockFlow { class MockFlow {
find = () => {} allCallbacks = [{ callback: () => console.log('') }]
findBySerialize = () => {} flowSerialize = []
findIndexByRef = () => {} flowRaw = []
find = (arg) => {
if (arg) {
return [{ answer: 'answer', ref: 'ref' }]
} else {
return null
}
}
findBySerialize = () => ({})
findIndexByRef = () => 0
} }
class MockDB { class MockDBA {
listHistory = [] listHistory = []
save = () => {} save = () => {}
getPrevByNumber = () => {} 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 () => { test(`[CoreClass] Probando instanciamiento de clase`, async () => {
const setting = { const setting = {
flow: new MockFlow(), flow: new MockFlow(),
database: new MockDB(), database: new MockDBA(),
provider: new MockProvider(), provider: new MockProvider(),
} }
const bot = await createBot(setting) const bot = await createBot(setting)
@@ -47,7 +77,7 @@ test(`[Bot] Eventos 'require_action,ready,auth_failure,message '`, async () => {
const setting = { const setting = {
flow: new MockFlow(), flow: new MockFlow(),
database: new MockDB(), database: new MockDBA(),
provider: mockProvider, provider: mockProvider,
} }
await createBot(setting) await createBot(setting)
@@ -91,6 +121,140 @@ test(`[Bot] Eventos 'require_action,ready,auth_failure,message '`, async () => {
) )
}) })
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() test.run()
function delay(ms) { function delay(ms) {

View File

@@ -31,8 +31,6 @@ test('Debere probar toSerialize', () => {
.addAnswer('Segundo!') .addAnswer('Segundo!')
.toJson() .toJson()
console.log(MAIN_CTX)
const [ANSWER_A] = MAIN_CTX const [ANSWER_A] = MAIN_CTX
assert.is( assert.is(