mirror of
https://github.com/verdaccio/verdaccio.git
synced 2025-01-20 22:52:46 -05:00
refactor: tests for notify request service (#1039)
* refactor: tests for notify request service * refactor: improves notify request service tests * refactor: uses beforeEach for jest.resetModules
This commit is contained in:
parent
5d66d3da88
commit
83b586f000
2 changed files with 102 additions and 5 deletions
|
@ -13,17 +13,13 @@ export function notifyRequest(options, content) {
|
|||
if (err || response.statusCode >= HTTP_STATUS.BAD_REQUEST) {
|
||||
const errorMessage = isNil(err) ? response.body : err.message;
|
||||
logger.logger.error({ errorMessage }, 'notify service has thrown an error: @{errorMessage}');
|
||||
|
||||
reject(errorMessage);
|
||||
} else {
|
||||
logger.logger.info({ content }, 'A notification has been shipped: @{content}');
|
||||
if (isNil(body) === false) {
|
||||
const bodyResolved = isNil(body) === false ? body : null;
|
||||
|
||||
logger.logger.debug({ body }, ' body: @{body}');
|
||||
return resolve(bodyResolved);
|
||||
resolve(body);
|
||||
}
|
||||
|
||||
reject(Error('body is missing'));
|
||||
}
|
||||
});
|
||||
|
|
101
test/unit/api/notify-request.spec.js
Normal file
101
test/unit/api/notify-request.spec.js
Normal file
|
@ -0,0 +1,101 @@
|
|||
/**
|
||||
* @prettier
|
||||
*/
|
||||
|
||||
import { HTTP_STATUS, API_ERROR } from '../../../src/lib/constants';
|
||||
|
||||
/**
|
||||
* Mocks Logger Service
|
||||
*/
|
||||
const logger = {
|
||||
logger: {
|
||||
error: jest.fn(),
|
||||
debug: jest.fn(),
|
||||
info: jest.fn(),
|
||||
},
|
||||
};
|
||||
jest.doMock('../../../src/lib/logger', () => logger);
|
||||
|
||||
/**
|
||||
* Test Data
|
||||
*/
|
||||
const options = {
|
||||
url: 'http://slack-service',
|
||||
};
|
||||
const content = 'Verdaccio@x.x.x successfully published';
|
||||
|
||||
describe('notifyRequest', () => {
|
||||
beforeEach(() => {
|
||||
jest.resetModules();
|
||||
});
|
||||
|
||||
test('when notification service throws error', async () => {
|
||||
jest.doMock('request', () => (options, resolver) => {
|
||||
const response = {
|
||||
statusCode: HTTP_STATUS.BAD_REQUEST,
|
||||
};
|
||||
const error = {
|
||||
message: API_ERROR.BAD_DATA,
|
||||
};
|
||||
resolver(error, response);
|
||||
});
|
||||
|
||||
const notification = require('../../../src/lib/notify/notify-request');
|
||||
const args = [{ errorMessage: 'bad data' }, 'notify service has thrown an error: @{errorMessage}'];
|
||||
|
||||
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,
|
||||
body: API_ERROR.BAD_DATA,
|
||||
};
|
||||
|
||||
resolver(null, response);
|
||||
});
|
||||
|
||||
const notification = require('../../../src/lib/notify/notify-request');
|
||||
const args = [{ errorMessage: 'bad data' }, 'notify service has thrown an error: @{errorMessage}'];
|
||||
|
||||
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,
|
||||
body: 'Successfully delivered',
|
||||
};
|
||||
|
||||
resolver(null, response, response.body);
|
||||
});
|
||||
|
||||
const notification = require('../../../src/lib/notify/notify-request');
|
||||
const infoArgs = [{ content: 'Verdaccio@x.x.x successfully published' }, 'A notification has been shipped: @{content}'];
|
||||
const debugArgs = [{ body: 'Successfully delivered' }, ' body: @{body}'];
|
||||
|
||||
await expect(notification.notifyRequest(options, content)).resolves.toEqual('Successfully delivered');
|
||||
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 = {
|
||||
statusCode: HTTP_STATUS.OK,
|
||||
};
|
||||
|
||||
resolver(null, response);
|
||||
});
|
||||
|
||||
const notification = require('../../../src/lib/notify/notify-request');
|
||||
const infoArgs = [{ content: 'Verdaccio@x.x.x successfully published' }, 'A notification has been shipped: @{content}'];
|
||||
|
||||
await expect(notification.notifyRequest(options, content)).rejects.toThrowError('body is missing');
|
||||
expect(logger.logger.info).toHaveBeenCalledWith(...infoArgs);
|
||||
});
|
||||
});
|
Loading…
Add table
Reference in a new issue