2020-03-03 17:59:19 -05:00
|
|
|
import { HTTP_STATUS, API_ERROR } from '@verdaccio/dev-commons';
|
2019-09-26 11:22:14 -05:00
|
|
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
2018-10-03 16:32:04 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Mocks Logger Service
|
|
|
|
*/
|
|
|
|
const logger = {
|
|
|
|
logger: {
|
|
|
|
error: jest.fn(),
|
|
|
|
debug: jest.fn(),
|
2020-03-03 17:59:19 -05:00
|
|
|
info: jest.fn(),
|
|
|
|
},
|
2018-10-03 16:32:04 -05:00
|
|
|
};
|
2020-03-03 17:59:19 -05:00
|
|
|
jest.doMock('@verdaccio/logger', () => logger);
|
2018-10-03 16:32:04 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Test Data
|
|
|
|
*/
|
|
|
|
const options = {
|
2020-03-03 17:59:19 -05:00
|
|
|
url: 'http://slack-service',
|
2018-10-03 16:32:04 -05:00
|
|
|
};
|
|
|
|
const content = 'Verdaccio@x.x.x successfully published';
|
|
|
|
|
2019-05-20 00:33:39 -05:00
|
|
|
describe('Notifications:: notifyRequest', () => {
|
2018-10-03 16:32:04 -05:00
|
|
|
beforeEach(() => {
|
|
|
|
jest.resetModules();
|
|
|
|
});
|
|
|
|
|
|
|
|
test('when notification service throws error', async () => {
|
|
|
|
jest.doMock('request', () => (options, resolver) => {
|
|
|
|
const response = {
|
2020-03-03 17:59:19 -05:00
|
|
|
statusCode: HTTP_STATUS.BAD_REQUEST,
|
2018-10-03 16:32:04 -05:00
|
|
|
};
|
|
|
|
const error = {
|
2020-03-03 17:59:19 -05:00
|
|
|
message: API_ERROR.BAD_DATA,
|
2018-10-03 16:32:04 -05:00
|
|
|
};
|
|
|
|
resolver(error, response);
|
|
|
|
});
|
|
|
|
|
2020-03-03 17:59:19 -05:00
|
|
|
const notification = require('../src/notify-request');
|
|
|
|
const args = [{ errorMessage: 'bad data' }, 'notify service has thrown an error: @{errorMessage}'];
|
2018-10-03 16:32:04 -05:00
|
|
|
|
|
|
|
await expect(notification.notifyRequest(options, content)).rejects.toEqual(API_ERROR.BAD_DATA);
|
|
|
|
expect(logger.logger.error).toHaveBeenCalledWith(...args);
|
|
|
|
});
|
|
|
|
|
|
|
|
test('when notification service throws error with null error value', async () => {
|
|
|
|
jest.doMock('request', () => (options, resolver) => {
|
|
|
|
const response = {
|
|
|
|
statusCode: HTTP_STATUS.BAD_REQUEST,
|
2020-03-03 17:59:19 -05:00
|
|
|
body: API_ERROR.BAD_DATA,
|
2018-10-03 16:32:04 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
resolver(null, response);
|
|
|
|
});
|
|
|
|
|
2020-03-03 17:59:19 -05:00
|
|
|
const notification = require('../src/notify-request');
|
|
|
|
const args = [{ errorMessage: 'bad data' }, 'notify service has thrown an error: @{errorMessage}'];
|
2018-10-03 16:32:04 -05:00
|
|
|
|
|
|
|
await expect(notification.notifyRequest(options, content)).rejects.toEqual(API_ERROR.BAD_DATA);
|
|
|
|
expect(logger.logger.error).toHaveBeenCalledWith(...args);
|
|
|
|
});
|
|
|
|
|
|
|
|
test('when notification is successfully delivered', async () => {
|
|
|
|
jest.doMock('request', () => (options, resolver) => {
|
|
|
|
const response = {
|
|
|
|
statusCode: HTTP_STATUS.OK,
|
2020-03-03 17:59:19 -05:00
|
|
|
body: 'Successfully delivered',
|
2018-10-03 16:32:04 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
resolver(null, response, response.body);
|
|
|
|
});
|
|
|
|
|
2020-03-03 17:59:19 -05:00
|
|
|
const notification = require('../src/notify-request');
|
2018-10-18 08:44:58 -05:00
|
|
|
const infoArgs = [{ content }, 'A notification has been shipped: @{content}'];
|
2018-10-03 16:32:04 -05:00
|
|
|
const debugArgs = [{ body: 'Successfully delivered' }, ' body: @{body}'];
|
|
|
|
|
2020-03-03 17:59:19 -05:00
|
|
|
await expect(notification.notifyRequest(options, content)).resolves.toEqual('Successfully delivered');
|
2018-10-03 16:32:04 -05:00
|
|
|
expect(logger.logger.info).toHaveBeenCalledWith(...infoArgs);
|
|
|
|
expect(logger.logger.debug).toHaveBeenCalledWith(...debugArgs);
|
|
|
|
});
|
|
|
|
|
|
|
|
test('when notification is successfully delivered but body is undefined/null', async () => {
|
|
|
|
jest.doMock('request', () => (options, resolver) => {
|
|
|
|
const response = {
|
2020-03-03 17:59:19 -05:00
|
|
|
statusCode: HTTP_STATUS.OK,
|
2018-10-03 16:32:04 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
resolver(null, response);
|
|
|
|
});
|
|
|
|
|
2020-03-03 17:59:19 -05:00
|
|
|
const notification = require('../src/notify-request');
|
2018-10-18 08:44:58 -05:00
|
|
|
const infoArgs = [{ content }, 'A notification has been shipped: @{content}'];
|
2018-10-03 16:32:04 -05:00
|
|
|
|
2018-12-16 15:09:03 -05:00
|
|
|
await expect(notification.notifyRequest(options, content)).rejects.toThrow('body is missing');
|
2018-10-03 16:32:04 -05:00
|
|
|
expect(logger.logger.info).toHaveBeenCalledWith(...infoArgs);
|
|
|
|
});
|
|
|
|
});
|