0
Fork 0
mirror of https://github.com/verdaccio/verdaccio.git synced 2024-12-23 22:27:34 -05:00
verdaccio/test/unit/modules/notifications/request.spec.ts
Juan Picado @jotadeveloper 66f4197236
feat: convert project to typescript (#1374)
* chore: test

* chore: add

* chore: more progress

* chore: progress in migration, fix prettier parser

* chore: reduce tsc errors

* chore: refactor storage utils types

* chore: refactor utils types

* chore: refactor local storage types

* chore: refactor config utils types

* chore: refactor tsc types

* refactor: apply eslint fix, tabs etc

* chore: fix lint errors

* test: update unit test conf to typescript setup

few test refactored to typescript

* chore: enable more unit test

migrate to typescript

* chore: migrate storage test to tsc

* chore: migrate up storage test to tsc

* refactor: enable plugin and auth test

* chore: migrate plugin loader test

* chore: update dependencies

* chore: migrate functional test to typescript

* chore: add codecove

* chore: update express

* chore: downgrade puppeteer

The latest version does not seems to work properly fine.

* chore: update dependencies
2019-07-16 08:40:01 +02:00

97 lines
3.1 KiB
TypeScript

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('Notifications:: 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 }, '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 }, 'A notification has been shipped: @{content}'];
await expect(notification.notifyRequest(options, content)).rejects.toThrow('body is missing');
expect(logger.logger.info).toHaveBeenCalledWith(...infoArgs);
});
});