diff --git a/.eslintrc.json b/.eslintrc.json index 8a66f4c..b54c91d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,14 +1,21 @@ { - "env": { - "browser": true, - "es2021": true - }, - "extends": "airbnb-base", - "parserOptions": { - "ecmaVersion": "latest", - "sourceType": "module" - }, - "rules": { - "import/extensions": ["warn", "ignorePackages"] - } + "env": { + "browser": true, + "es2021": true, + "jest": true + }, + "extends": "airbnb-base", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "rules": { + "import/extensions": [ + "warn", + "ignorePackages", + { + "js": "never" + } + ] + } } diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml index cc3da93..7f5e2d0 100644 --- a/.idea/jsLibraryMappings.xml +++ b/.idea/jsLibraryMappings.xml @@ -1,6 +1,6 @@ - + - \ No newline at end of file + diff --git a/package.json b/package.json index ef0ab99..a84d7b4 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "type": "module", "scripts": { "start": "node src/index.js", - "test": "echo \"Error: no test specified\" && exit 1", + "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js", "lint": "eslint src" }, "engines": { diff --git a/src/services/notifier/NotifierService.test.js b/src/services/notifier/NotifierService.test.js new file mode 100644 index 0000000..3921b40 --- /dev/null +++ b/src/services/notifier/NotifierService.test.js @@ -0,0 +1,69 @@ +// test all NotifierService methods +import { jest } from '@jest/globals'; +import NotifierService from './NotifierService.js'; + +const mockNotify = jest.fn(); +const mockHello = jest.fn(); +const mockGoodbye = jest.fn(); +jest.unstable_mockModule('./providers/DiscordNotifierProvider', () => ({ + hello: mockHello, + goodbye: mockGoodbye, + notify: mockNotify, +})); + +describe('NotifierService', () => { + const services = [ + { + name: 'test', + notifiers: [ + { + type: 'discord', + webhook: '1234', + }, + ], + }, + { + name: 'test2', + notifiers: [ + { + type: 'discord', + webhook: '1234', + }, + ], + }, + { + name: 'test3', + notifiers: [ + { + type: 'discord', + webhook: '1234', + }, + ], + }, + ]; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('notify', () => { + it('should call notify for each notifier', () => { + NotifierService.notify(services[0], 'UP'); + expect(mockNotify).toHaveBeenCalledTimes(1); + }); + }); + + describe('hello', () => { + it('should call hello for each notifier', () => { + NotifierService.hello(services); + expect(mockHello).toHaveBeenCalledTimes(3); + }); + }); + + describe('goodbye', () => { + it('should call goodbye for each notifier', () => { + NotifierService.goodbye(services); + expect(mockGoodbye).toHaveBeenCalledTimes(3); + }); + }); +}); diff --git a/src/services/notifier/providers/DiscordNotifierProvider.test.js b/src/services/notifier/providers/DiscordNotifierProvider.test.js new file mode 100644 index 0000000..edc42d4 --- /dev/null +++ b/src/services/notifier/providers/DiscordNotifierProvider.test.js @@ -0,0 +1,30 @@ +import { jest } from '@jest/globals'; +import { MessageBuilder, Webhook } from 'discord-webhook-node'; +import DiscordNotifierProvider from './DiscordNotifierProvider'; + +const plop = jest.fn(); +jest.unstable_mockModule('discord-webhook-node', () => ({ + MessageBuilder, + Webhook, +})); + +describe('DiscordNotifierProvider', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should notify discord', () => { + DiscordNotifierProvider.notify('name', 'status', { webhook: 'http://plop' }); + expect(plop).toHaveBeenCalledTimes(1); + }); + + it('should say hello to discord', () => { + DiscordNotifierProvider.hello('name', { webhook: 'http://' }); + expect(mockSend).toHaveBeenCalledTimes(1); + }); + + it('should say goodbye to discord', async () => { + await DiscordNotifierProvider.goodbye('name', { webhook: 'http://' }); + expect(mockSend).toHaveBeenCalledTimes(1); + }); +});