@emartech/escher-request
Version:
Requests with Escher authentication
141 lines (140 loc) • 7.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const chai_1 = require("chai");
const requestOption_1 = require("./requestOption");
describe('EscherRequestOption', function () {
let dummyServiceConfig;
const host = 'localhost';
beforeEach(function () {
dummyServiceConfig = {
host: 'localhost',
port: 1234,
prefix: '/api',
rejectUnauthorized: false,
secure: true,
credentialScope: 'eu/dummy/ems_request'
};
});
describe('create', function () {
it('should populate options with parameters', function () {
const options = requestOption_1.EscherRequestOption.create('example-host', '/api-test', true);
(0, chai_1.expect)(options.rejectUnauthorized).to.eql(true);
(0, chai_1.expect)(options.host).to.eql('example-host');
(0, chai_1.expect)(options.prefix).to.eql('/api-test');
});
it('should populate options with default parameters', function () {
const options = requestOption_1.EscherRequestOption.create('example-host');
(0, chai_1.expect)(options.rejectUnauthorized).to.eql(true);
(0, chai_1.expect)(options.host).to.eql('example-host');
(0, chai_1.expect)(options.prefix).to.eql('');
});
it('should populate options with for internal api', function () {
const options = requestOption_1.EscherRequestOption.createForInternalApi('example-host', true);
(0, chai_1.expect)(options.rejectUnauthorized).to.eql(true);
(0, chai_1.expect)(options.host).to.eql('example-host');
(0, chai_1.expect)(options.prefix).to.eql('/api/v2/internal');
});
it('should populate options with for services api', function () {
const options = requestOption_1.EscherRequestOption.createForServiceApi('example-host', true);
(0, chai_1.expect)(options.rejectUnauthorized).to.eql(true);
(0, chai_1.expect)(options.host).to.eql('example-host');
(0, chai_1.expect)(options.prefix).to.eql('/api/services');
});
it('should populate headers coming from options and preserve mandatory headers', function () {
const options = requestOption_1.EscherRequestOption.create({
host: 'example-host',
headers: [['header-name', 'header-value']]
}, '/api-test', true);
(0, chai_1.expect)(options.rejectUnauthorized).to.eql(true);
(0, chai_1.expect)(options.host).to.eql('example-host');
(0, chai_1.expect)(options.headers).to.deep.equal([
['header-name', 'header-value'],
['content-type', 'application/json'],
['host', 'example-host']
]);
});
});
describe('header handling', function () {
it('can accept additional headers', function () {
const dummyHeader = ['header-name', 'header-value'];
const requestOptions = new requestOption_1.EscherRequestOption(host, dummyServiceConfig);
requestOptions.setHeader(dummyHeader);
(0, chai_1.expect)(requestOptions.getHeader('header-name')).to.eql('header-value');
});
it('should add default content type', function () {
const requestOptions = new requestOption_1.EscherRequestOption(host, dummyServiceConfig);
(0, chai_1.expect)(requestOptions.getHeader('content-type')).to.eql('application/json');
});
it('should not duplicate headers with same name', function () {
const expectedContentTypeHeader = ['content-type', 'text/csv'];
const requestOptions = new requestOption_1.EscherRequestOption(host, dummyServiceConfig);
requestOptions.setHeader(expectedContentTypeHeader);
(0, chai_1.expect)(requestOptions.getHeader('content-type')).to.eql('text/csv');
});
});
describe('allowEmptyResponse', function () {
it('should be set to false by default', function () {
const requestOptions = new requestOption_1.EscherRequestOption(host, dummyServiceConfig);
(0, chai_1.expect)(requestOptions.allowEmptyResponse).to.eql(false);
});
it('should be set to the value provided in config', function () {
dummyServiceConfig.allowEmptyResponse = true;
const requestOptions = new requestOption_1.EscherRequestOption(host, dummyServiceConfig);
(0, chai_1.expect)(requestOptions.allowEmptyResponse).to.eql(true);
});
});
describe('timeout', function () {
it('should return a default value', function () {
const requestOptions = new requestOption_1.EscherRequestOption(host, dummyServiceConfig);
(0, chai_1.expect)(requestOptions.getTimeout()).to.be.eql(15000);
});
it('should return the timeout passed in the constructor', function () {
const options = Object.assign({}, dummyServiceConfig);
options.timeout = 0;
const requestOptions = new requestOption_1.EscherRequestOption(host, options);
(0, chai_1.expect)(requestOptions.getTimeout()).to.be.eql(0);
});
it('should return the timeout set by setTimeout', function () {
const requestOptions = new requestOption_1.EscherRequestOption(host, dummyServiceConfig);
requestOptions.setTimeout(60000);
(0, chai_1.expect)(requestOptions.getTimeout()).to.be.eql(60000);
});
});
describe('toHash', function () {
it('should return the proper object', function () {
const requestOptions = new requestOption_1.EscherRequestOption(host, dummyServiceConfig);
(0, chai_1.expect)(requestOptions.toHash()).to.be.eql({
headers: [
['content-type', 'application/json'],
['host', 'localhost']
],
host: 'localhost',
port: 1234,
prefix: '/api',
rejectUnauthorized: false,
timeout: 15000,
maxContentLength: 10485760,
retryConfig: null
});
(0, chai_1.expect)(requestOptions.toHash()).to.not.have.property('allowEmptyResponse');
});
it('should add allowEmptyResponse to hash if set to TRUE', function () {
dummyServiceConfig.allowEmptyResponse = true;
const requestOptions = new requestOption_1.EscherRequestOption(host, dummyServiceConfig);
(0, chai_1.expect)(requestOptions.toHash()).to.have.property('allowEmptyResponse', true);
});
it('should not cache headers', function () {
const requestOptions = new requestOption_1.EscherRequestOption(host, dummyServiceConfig);
const headers = requestOptions.toHash().headers;
headers.push(['from_test']);
(0, chai_1.expect)(requestOptions.toHash().headers).not.to.include(['from_test']);
});
});
describe('setHost', () => {
it('should set host', () => {
const requestOptions = new requestOption_1.EscherRequestOption(host, dummyServiceConfig);
requestOptions.setHost('suitedocker.ett.local');
(0, chai_1.expect)(requestOptions.host).to.eql('suitedocker.ett.local');
});
});
});