mirror of
https://github.com/Kong/insomnia
synced 2024-11-08 23:00:30 +00:00
466 lines
12 KiB
TypeScript
466 lines
12 KiB
TypeScript
import { globalBeforeEach } from '../../__jest__/before-each';
|
|
import { CONTENT_TYPE_GRAPHQL } from '../../common/constants';
|
|
import * as models from '../index';
|
|
import { newBodyGraphQL } from '../request';
|
|
|
|
describe('init()', () => {
|
|
beforeEach(globalBeforeEach);
|
|
|
|
it('contains all required fields', async () => {
|
|
Date.now = jest.fn().mockReturnValue(1478795580200);
|
|
expect(models.request.init()).toEqual({
|
|
isPrivate: false,
|
|
authentication: {},
|
|
body: {},
|
|
headers: [],
|
|
metaSortKey: -1478795580200,
|
|
method: 'GET',
|
|
name: 'New Request',
|
|
description: '',
|
|
parameters: [],
|
|
url: '',
|
|
settingStoreCookies: true,
|
|
settingSendCookies: true,
|
|
settingDisableRenderRequestBody: false,
|
|
settingEncodeUrl: true,
|
|
settingRebuildPath: true,
|
|
settingFollowRedirects: 'global',
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('create()', () => {
|
|
beforeEach(globalBeforeEach);
|
|
|
|
it('creates a valid request', async () => {
|
|
Date.now = jest.fn().mockReturnValue(1478795580200);
|
|
const request = await models.request.create({
|
|
name: 'Test Request',
|
|
parentId: 'fld_124',
|
|
description: 'A test Request',
|
|
});
|
|
const expected = {
|
|
_id: 'req_cc1dd2ca4275747aa88199e8efd42403',
|
|
isPrivate: false,
|
|
created: 1478795580200,
|
|
modified: 1478795580200,
|
|
parentId: 'fld_124',
|
|
type: 'Request',
|
|
authentication: {},
|
|
description: 'A test Request',
|
|
body: {},
|
|
headers: [],
|
|
metaSortKey: -1478795580200,
|
|
method: 'GET',
|
|
name: 'Test Request',
|
|
parameters: [],
|
|
url: '',
|
|
settingStoreCookies: true,
|
|
settingSendCookies: true,
|
|
settingDisableRenderRequestBody: false,
|
|
settingEncodeUrl: true,
|
|
settingRebuildPath: true,
|
|
settingFollowRedirects: 'global',
|
|
};
|
|
expect(request).toEqual(expected);
|
|
expect(await models.request.getById(expected._id)).toEqual(expected);
|
|
});
|
|
|
|
it('fails when missing parentId', async () => {
|
|
Date.now = jest.fn().mockReturnValue(1478795580200);
|
|
expect(() =>
|
|
models.request.create({
|
|
name: 'Test Request',
|
|
}),
|
|
).toThrow('New Requests missing `parentId`');
|
|
});
|
|
});
|
|
|
|
describe('updateMimeType()', () => {
|
|
beforeEach(globalBeforeEach);
|
|
|
|
it('adds header when does not exist', async () => {
|
|
const request = await models.request.create({
|
|
name: 'My Request',
|
|
parentId: 'fld_1',
|
|
});
|
|
expect(request).not.toBeNull();
|
|
const newRequest = await models.request.updateMimeType(request, 'text/html');
|
|
expect(newRequest.headers).toEqual([
|
|
{
|
|
name: 'Content-Type',
|
|
value: 'text/html',
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('replaces header when exists', async () => {
|
|
const request = await models.request.create({
|
|
name: 'My Request',
|
|
parentId: 'fld_1',
|
|
headers: [
|
|
{
|
|
name: 'content-tYPE',
|
|
value: 'application/json',
|
|
},
|
|
{
|
|
name: 'foo',
|
|
value: 'bar',
|
|
},
|
|
{
|
|
bad: true,
|
|
},
|
|
null,
|
|
],
|
|
});
|
|
expect(request).not.toBeNull();
|
|
const newRequest = await models.request.updateMimeType(request, 'text/html');
|
|
expect(newRequest.headers).toEqual([
|
|
{
|
|
name: 'content-tYPE',
|
|
value: 'text/html',
|
|
},
|
|
{
|
|
name: 'foo',
|
|
value: 'bar',
|
|
},
|
|
{
|
|
bad: true,
|
|
},
|
|
null,
|
|
]);
|
|
});
|
|
|
|
it('replaces header when exists', async () => {
|
|
const request = await models.request.create({
|
|
name: 'My Request',
|
|
parentId: 'fld_1',
|
|
headers: [
|
|
{
|
|
name: 'content-tYPE',
|
|
value: 'application/json',
|
|
},
|
|
],
|
|
});
|
|
expect(request).not.toBeNull();
|
|
const newRequest = await models.request.updateMimeType(request, 'text/html');
|
|
expect(newRequest.headers).toEqual([
|
|
{
|
|
name: 'content-tYPE',
|
|
value: 'text/html',
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('removes existing content-type when set to null (i.e. no body)', async () => {
|
|
const request = await models.request.create({
|
|
name: 'My Request',
|
|
parentId: 'fld_1',
|
|
headers: [
|
|
{
|
|
name: 'content-tYPE',
|
|
value: 'application/json',
|
|
},
|
|
],
|
|
});
|
|
expect(request).not.toBeNull();
|
|
const newRequest = await models.request.updateMimeType(request, null);
|
|
expect(newRequest.body).toEqual({});
|
|
expect(newRequest.headers).toEqual([]);
|
|
});
|
|
|
|
it('uses saved body when provided', async () => {
|
|
const request = await models.request.create({
|
|
name: 'My Request',
|
|
parentId: 'fld_1',
|
|
body: {
|
|
text: 'My Data',
|
|
},
|
|
});
|
|
expect(request).not.toBeNull();
|
|
const newRequest = await models.request.updateMimeType(request, 'application/json', false, {
|
|
text: 'Saved Data',
|
|
});
|
|
expect(newRequest.body.text).toEqual('Saved Data');
|
|
});
|
|
|
|
it('uses existing body when saved body not provided', async () => {
|
|
const request = await models.request.create({
|
|
name: 'My Request',
|
|
parentId: 'fld_1',
|
|
body: {
|
|
text: 'My Data',
|
|
},
|
|
});
|
|
expect(request).not.toBeNull();
|
|
const newRequest = await models.request.updateMimeType(request, 'application/json', false, {});
|
|
expect(newRequest.body.text).toEqual('My Data');
|
|
});
|
|
});
|
|
|
|
describe('migrate()', () => {
|
|
beforeEach(globalBeforeEach);
|
|
|
|
it('migrates basic case', () => {
|
|
const original = {
|
|
headers: [],
|
|
body: 'hello world!',
|
|
};
|
|
const expected = {
|
|
headers: [],
|
|
body: {
|
|
mimeType: '',
|
|
text: 'hello world!',
|
|
},
|
|
url: '',
|
|
};
|
|
expect(models.request.migrate(original)).toEqual(expected);
|
|
});
|
|
|
|
it('migrates form-urlencoded', () => {
|
|
const original = {
|
|
headers: [
|
|
{
|
|
name: 'content-type',
|
|
value: 'application/x-www-form-urlencoded',
|
|
},
|
|
],
|
|
body: 'foo=bar&baz={{ hello }}',
|
|
};
|
|
const expected = {
|
|
headers: [
|
|
{
|
|
name: 'content-type',
|
|
value: 'application/x-www-form-urlencoded',
|
|
},
|
|
],
|
|
body: {
|
|
mimeType: 'application/x-www-form-urlencoded',
|
|
params: [
|
|
{
|
|
name: 'foo',
|
|
value: 'bar',
|
|
},
|
|
{
|
|
name: 'baz',
|
|
value: '{{ hello }}',
|
|
},
|
|
],
|
|
},
|
|
url: '',
|
|
};
|
|
expect(models.request.migrate(original)).toEqual(expected);
|
|
});
|
|
|
|
it('migrates form-urlencoded with charset', () => {
|
|
const original = {
|
|
headers: [
|
|
{
|
|
name: 'content-type',
|
|
value: 'application/x-www-form-urlencoded; charset=utf-8',
|
|
},
|
|
],
|
|
body: 'foo=bar&baz={{ hello }}',
|
|
};
|
|
const expected = {
|
|
headers: [
|
|
{
|
|
name: 'content-type',
|
|
value: 'application/x-www-form-urlencoded; charset=utf-8',
|
|
},
|
|
],
|
|
body: {
|
|
mimeType: 'application/x-www-form-urlencoded',
|
|
params: [
|
|
{
|
|
name: 'foo',
|
|
value: 'bar',
|
|
},
|
|
{
|
|
name: 'baz',
|
|
value: '{{ hello }}',
|
|
},
|
|
],
|
|
},
|
|
url: '',
|
|
};
|
|
expect(models.request.migrate(original)).toEqual(expected);
|
|
});
|
|
|
|
it('migrates form-urlencoded malformed', () => {
|
|
const original = {
|
|
headers: [
|
|
{
|
|
name: 'content-type',
|
|
value: 'application/x-www-form-urlencoded',
|
|
},
|
|
],
|
|
body: '{"foo": "bar"}',
|
|
};
|
|
const expected = {
|
|
headers: [
|
|
{
|
|
name: 'content-type',
|
|
value: 'application/x-www-form-urlencoded',
|
|
},
|
|
],
|
|
body: {
|
|
mimeType: 'application/x-www-form-urlencoded',
|
|
params: [
|
|
{
|
|
name: '{"foo": "bar"}',
|
|
value: '',
|
|
},
|
|
],
|
|
},
|
|
url: '',
|
|
};
|
|
expect(models.request.migrate(original)).toEqual(expected);
|
|
});
|
|
|
|
it('migrates mime-type', () => {
|
|
const contentToMimeMap = {
|
|
'application/json; charset=utf-8': 'application/json',
|
|
'text/plain': 'text/plain',
|
|
malformed: 'malformed',
|
|
};
|
|
|
|
for (const contentType of Object.keys(contentToMimeMap)) {
|
|
const original = {
|
|
headers: [
|
|
{
|
|
name: 'content-type',
|
|
value: contentType,
|
|
},
|
|
],
|
|
body: '',
|
|
};
|
|
const expected = {
|
|
headers: [
|
|
{
|
|
name: 'content-type',
|
|
value: contentType,
|
|
},
|
|
],
|
|
body: {
|
|
mimeType: contentToMimeMap[contentType],
|
|
text: '',
|
|
},
|
|
url: '',
|
|
};
|
|
expect(models.request.migrate(original)).toEqual(expected);
|
|
}
|
|
});
|
|
|
|
it('skips migrate for schema 1', () => {
|
|
const original = {
|
|
body: {
|
|
mimeType: 'text/plain',
|
|
text: 'foo',
|
|
},
|
|
};
|
|
expect(models.request.migrate(original)).toBe(original);
|
|
});
|
|
|
|
it('migrates with weird data', () => {
|
|
const newBody = {
|
|
body: {
|
|
mimeType: '',
|
|
text: 'foo bar!',
|
|
},
|
|
};
|
|
const stringBody = {
|
|
body: 'foo bar!',
|
|
};
|
|
const nullBody = {
|
|
body: null,
|
|
};
|
|
const noBody = {};
|
|
const expected = {
|
|
body: {
|
|
mimeType: '',
|
|
text: 'foo bar!',
|
|
},
|
|
url: '',
|
|
};
|
|
const expected2 = {
|
|
body: {},
|
|
url: '',
|
|
};
|
|
expect(models.request.migrate(newBody)).toEqual(expected);
|
|
expect(models.request.migrate(stringBody)).toEqual(expected);
|
|
expect(models.request.migrate(nullBody)).toEqual(expected2);
|
|
expect(models.request.migrate(noBody)).toEqual(expected2);
|
|
});
|
|
|
|
it('migrates from initModel()', async () => {
|
|
Date.now = jest.fn().mockReturnValue(1478795580200);
|
|
const original = {
|
|
_id: 'req_123',
|
|
headers: [],
|
|
body: 'hello world!',
|
|
};
|
|
const expected = {
|
|
_id: 'req_123',
|
|
isPrivate: false,
|
|
type: 'Request',
|
|
url: '',
|
|
created: 1478795580200,
|
|
modified: 1478795580200,
|
|
metaSortKey: -1478795580200,
|
|
name: 'New Request',
|
|
description: '',
|
|
method: 'GET',
|
|
headers: [],
|
|
authentication: {},
|
|
parameters: [],
|
|
parentId: null,
|
|
body: {
|
|
mimeType: '',
|
|
text: 'hello world!',
|
|
},
|
|
settingStoreCookies: true,
|
|
settingSendCookies: true,
|
|
settingDisableRenderRequestBody: false,
|
|
settingEncodeUrl: true,
|
|
settingRebuildPath: true,
|
|
settingFollowRedirects: 'global',
|
|
};
|
|
const migrated = await models.initModel(models.request.type, original);
|
|
expect(migrated).toEqual(expected);
|
|
});
|
|
});
|
|
|
|
describe('newBodyGraphQL()', () => {
|
|
it('strips \\\\n characters', () => {
|
|
const input =
|
|
'{"query": "query getCustomer() {\\\\n id\\\\n name\\\\n email\\\\n __typename\\\\n }\\\\n"}';
|
|
const expectedTextOutput = '{"query": "query getCustomer() { id name email __typename }"}';
|
|
const actualOutput = newBodyGraphQL(input);
|
|
expect(actualOutput).toEqual({
|
|
mimeType: CONTENT_TYPE_GRAPHQL,
|
|
text: expectedTextOutput,
|
|
});
|
|
});
|
|
|
|
it('does nothing to empty string', () => {
|
|
const input = '';
|
|
const expectedTextOutput = '';
|
|
const actualOutput = newBodyGraphQL(input);
|
|
expect(actualOutput).toEqual({
|
|
mimeType: CONTENT_TYPE_GRAPHQL,
|
|
text: expectedTextOutput,
|
|
});
|
|
});
|
|
|
|
it('does nothing to object that has no \\\\n characters', () => {
|
|
const input = '{ "foo": "bar" }';
|
|
const expectedTextOutput = '{ "foo": "bar" }';
|
|
const actualOutput = newBodyGraphQL(input);
|
|
expect(actualOutput).toEqual({
|
|
mimeType: CONTENT_TYPE_GRAPHQL,
|
|
text: expectedTextOutput,
|
|
});
|
|
});
|
|
});
|