Files
insomnia/app/plugins/context/__tests__/request.test.js
2017-11-01 16:00:14 +01:00

146 lines
4.8 KiB
JavaScript

import * as plugin from '../request';
import * as models from '../../../models';
import {globalBeforeEach} from '../../../__jest__/before-each';
const PLUGIN = {
name: 'my-plugin',
version: '1.0.0',
directory: '/plugins/my-plugin',
module: {}
};
const CONTEXT = {
user_key: 'my_user_key',
hello: 'world',
array_test: ['a', 'b'],
object_test: {a: 'A', b: 'B'},
null_test: null
};
describe('init()', () => {
beforeEach(async () => {
await globalBeforeEach();
await models.workspace.create({_id: 'wrk_1', name: 'My Workspace'});
await models.request.create({_id: 'req_1', parentId: 'wrk_1', name: 'My Request'});
});
it('initializes correctly', async () => {
const result = plugin.init(PLUGIN, await models.request.getById('req_1'), CONTEXT);
expect(Object.keys(result)).toEqual(['request']);
expect(Object.keys(result.request).sort()).toEqual([
'addHeader',
'getEnvironment',
'getEnvironmentVariable',
'getHeader',
'getHeaders',
'getId',
'getMethod',
'getName',
'getUrl',
'hasHeader',
'removeHeader',
'setCookie',
'setHeader',
'settingDisableRenderRequestBody',
'settingEncodeUrl',
'settingSendCookies',
'settingStoreCookies'
]);
});
it('fails to initialize without request', () => {
expect(() => plugin.init(PLUGIN))
.toThrowError('contexts.request initialized without request');
});
});
describe('request.*', () => {
beforeEach(async () => {
await globalBeforeEach();
await models.workspace.create({_id: 'wrk_1', name: 'My Workspace'});
await models.request.create({
_id: 'req_1',
parentId: 'wrk_1',
name: 'My Request',
headers: [
{name: 'hello', value: 'world'},
{name: 'Content-Type', value: 'application/json'}
]
});
});
it('works for basic getters', async () => {
const result = plugin.init(PLUGIN, await models.request.getById('req_1'), CONTEXT);
expect(result.request.getId()).toBe('req_1');
expect(result.request.getName()).toBe('My Request');
expect(result.request.getUrl()).toBe('');
expect(result.request.getMethod()).toBe('GET');
});
it('works for headers', async () => {
const result = plugin.init(PLUGIN, await models.request.getById('req_1'), CONTEXT);
// getHeaders()
expect(result.request.getHeaders()).toEqual([
{name: 'hello', value: 'world'},
{name: 'Content-Type', value: 'application/json'}
]);
// getHeader()
expect(result.request.getHeader('content-type')).toBe('application/json');
expect(result.request.getHeader('CONTENT-TYPE')).toBe('application/json');
expect(result.request.getHeader('does-not-exist')).toBe(null);
expect(result.request.hasHeader('Content-Type')).toBe(true);
// setHeader()
result.request.setHeader('content-type', 'text/plain');
expect(result.request.getHeader('Content-Type')).toBe('text/plain');
// addHeader()
result.request.addHeader('content-type', 'new/type');
result.request.addHeader('something-else', 'foo');
expect(result.request.getHeader('Content-Type')).toBe('text/plain');
expect(result.request.getHeader('something-else')).toBe('foo');
// removeHeader()
result.request.removeHeader('content-type');
expect(result.request.getHeader('Content-Type')).toBe(null);
expect(result.request.hasHeader('Content-Type')).toBe(false);
});
it('works for cookies', async () => {
const request = await models.request.getById('req_1');
request.cookies = []; // Because the plugin technically needs a RenderedRequest
const result = plugin.init(PLUGIN, request, CONTEXT);
result.request.setCookie('foo', 'bar');
result.request.setCookie('foo', 'baz');
expect(request.cookies).toEqual([{name: 'foo', value: 'baz'}]);
});
it('works for environment', async () => {
const request = await models.request.getById('req_1');
request.cookies = []; // Because the plugin technically needs a RenderedRequest
const result = plugin.init(PLUGIN, request, CONTEXT);
// getEnvironment
expect(result.request.getEnvironment()).toEqual({
user_key: 'my_user_key',
hello: 'world',
array_test: ['a', 'b'],
object_test: {a: 'A', b: 'B'},
null_test: null
});
// getEnvironmentVariable
expect(result.request.getEnvironmentVariable('user_key')).toBe('my_user_key');
expect(result.request.getEnvironmentVariable('hello')).toBe('world');
expect(result.request.getEnvironmentVariable('array_test')).toEqual(['a', 'b']);
expect(result.request.getEnvironmentVariable('object_test')).toEqual({a: 'A', b: 'B'});
expect(result.request.getEnvironmentVariable('null_test')).toBe(null);
expect(result.request.getEnvironmentVariable('bad')).toBeUndefined();
});
});