insomnia/packages/insomnia-app/app/models/__tests__/response.test.js
2018-10-17 12:42:33 -04:00

137 lines
4.4 KiB
JavaScript

import path from 'path';
import zlib from 'zlib';
import fs from 'fs';
import * as electron from 'electron';
import * as models from '../../models';
import { globalBeforeEach } from '../../__jest__/before-each';
describe('migrate()', () => {
beforeEach(async () => {
await globalBeforeEach();
Date.now = jest.genMockFunction().mockReturnValue(1234567890);
jest.useFakeTimers();
});
it('migrates utf8 body correctly', async () => {
const initialModel = { body: 'hello world!', encoding: 'utf8' };
const newModel = await models.initModel(models.response.type, initialModel);
const expectedBodyPath = path.join(
electron.remote.app.getPath('userData'),
`responses/fc3ff98e8c6a0d3087d515c0473f8677.zip`
);
const storedBody = models.response.getBodyBuffer(newModel);
// Should have set bodyPath and stored the body
expect(newModel.bodyPath).toBe(expectedBodyPath);
expect(storedBody.toString()).toBe('hello world!');
// Should have stripped these
expect(newModel.body).toBeUndefined();
expect(newModel.encoding).toBeUndefined();
});
it('migrates base64 body correctly', async () => {
const initialModel = { body: 'aGVsbG8gd29ybGQh', encoding: 'base64' };
const newModel = await models.initModel(models.response.type, initialModel);
jest.runAllTimers();
const expectedBodyPath = path.join(
electron.remote.app.getPath('userData'),
`responses/fc3ff98e8c6a0d3087d515c0473f8677.zip`
);
const storedBody = models.response.getBodyBuffer(newModel);
// Should have stripped these
expect(newModel.body).toBeUndefined();
expect(newModel.encoding).toBeUndefined();
// Should have set bodyPath and stored the body
expect(newModel.bodyPath).toBe(expectedBodyPath);
expect(storedBody.toString()).toBe('hello world!');
});
it('migrates empty body', async () => {
const initialModel = { body: '' };
const newModel = await models.initModel(models.response.type, initialModel);
jest.runAllTimers();
jest.runAllTimers();
const expectedBodyPath = path.join(
electron.remote.app.getPath('userData'),
'responses/d41d8cd98f00b204e9800998ecf8427e.zip'
);
const storedBody = models.response.getBodyBuffer(newModel);
// Should have stripped these
expect(newModel.body).toBeUndefined();
expect(newModel.encoding).toBeUndefined();
// Should have set bodyPath and stored the body
expect(newModel.bodyPath).toBe(expectedBodyPath);
expect(storedBody.toString()).toBe('');
});
it('does not migrate body again', async () => {
const initialModel = { bodyPath: '/foo/bar' };
const newModel = await models.initModel(models.response.type, initialModel);
// Should have stripped these
expect(newModel.body).toBeUndefined();
expect(newModel.encoding).toBeUndefined();
// Should have set bodyPath and stored the body
expect(newModel.bodyPath).toBe('/foo/bar');
});
it('does it', async () => {
const bodyPath = path.join(electron.remote.app.getPath('userData'), 'foo.zip');
fs.writeFileSync(bodyPath, zlib.gzipSync('Hello World!'));
const response = await models.initModel(models.response.type, { bodyPath });
const body = await models.response.getBodyBuffer(response).toString();
expect(response.bodyCompression).toBe('zip');
expect(body).toBe('Hello World!');
});
it('migrates old bodies', async () => {
const response = await models.initModel(models.response.type, {
body: 'aGVsbG8gd29ybGQh',
encoding: 'base64'
});
const body = await models.response.getBodyBuffer(response).toString();
expect(response.bodyCompression).toBe(null);
expect(body).toBe('hello world!');
});
it('migrates leaves bodyCompression for null', async () => {
expect(
(await models.initModel(models.response.type, {
bodyPath: '/foo/bar',
bodyCompression: null
})).bodyCompression
).toBe(null);
});
it('migrates sets bodyCompression to zip if does not have one yet', async () => {
expect(
(await models.initModel(models.response.type, {
bodyPath: '/foo/bar'
})).bodyCompression
).toBe('zip');
});
it('migrates leaves bodyCompression if string', async () => {
expect(
(await models.initModel(models.response.type, {
bodyPath: '/foo/bar',
bodyCompression: 'zip'
})).bodyCompression
).toBe('zip');
});
});