From 14fbae3c86ac491f1bccf55851d0e2276cd387d8 Mon Sep 17 00:00:00 2001 From: Leifer Mendez Date: Wed, 23 Nov 2022 23:16:54 +0100 Subject: [PATCH] Increase Coverage --- .c8rc.json | 8 ++ README.md | 4 + packages/bot/tests/bot.class.test.js | 176 ++++++++++++++++++++++++++- packages/bot/tests/methods.test.js | 2 - 4 files changed, 182 insertions(+), 8 deletions(-) create mode 100644 .c8rc.json diff --git a/.c8rc.json b/.c8rc.json new file mode 100644 index 0000000..81ecbe9 --- /dev/null +++ b/.c8rc.json @@ -0,0 +1,8 @@ +{ + "src": "./src", + "exclude": ["**/bot/lib", "__mocks__", "**/mock"], + "reporter": ["html"], + "report-dir": "./coverage", + "check-coverage": true, + "lines": 90 +} diff --git a/README.md b/README.md index d636669..28971ac 100644 --- a/README.md +++ b/README.md @@ -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 **Comunidad** @@ -8,3 +10,5 @@ - [Twitter](https://twitter.com/leifermendez) - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR) - [Telegram](https://t.me/leifermendez) + + diff --git a/packages/bot/tests/bot.class.test.js b/packages/bot/tests/bot.class.test.js index d3b2a4a..836e0a3 100644 --- a/packages/bot/tests/bot.class.test.js +++ b/packages/bot/tests/bot.class.test.js @@ -4,21 +4,51 @@ const MockProvider = require('../../../__mocks__/mock.provider') const { createBot, CoreClass } = require('../index') class MockFlow { - find = () => {} - findBySerialize = () => {} - findIndexByRef = () => {} + allCallbacks = [{ callback: () => console.log('') }] + flowSerialize = [] + flowRaw = [] + find = (arg) => { + if (arg) { + return [{ answer: 'answer', ref: 'ref' }] + } else { + return null + } + } + findBySerialize = () => ({}) + findIndexByRef = () => 0 } -class MockDB { +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 MockDB(), + database: new MockDBA(), provider: new MockProvider(), } const bot = await createBot(setting) @@ -47,7 +77,7 @@ test(`[Bot] Eventos 'require_action,ready,auth_failure,message '`, async () => { const setting = { flow: new MockFlow(), - database: new MockDB(), + database: new MockDBA(), provider: mockProvider, } 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() function delay(ms) { diff --git a/packages/bot/tests/methods.test.js b/packages/bot/tests/methods.test.js index cd718d9..9f9452e 100644 --- a/packages/bot/tests/methods.test.js +++ b/packages/bot/tests/methods.test.js @@ -31,8 +31,6 @@ test('Debere probar toSerialize', () => { .addAnswer('Segundo!') .toJson() - console.log(MAIN_CTX) - const [ANSWER_A] = MAIN_CTX assert.is(