UNPKG

@kineticdata/react

Version:
265 lines (262 loc) 9.18 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray")); var _http = require("./http"); var _immutable = require("immutable"); jest.mock('../helpers', function () { return { bundle: { spaceLocation: function spaceLocation() { return '/kinetic/acme'; }, kappSlug: function kappSlug() { return 'catalog'; } } }; }); describe('http module', function () { describe('#handleErrors', function () { // What scenarios do we handle? describe('when there is a 500 with an error object', function () { test('returns an object with "error"', function () { var errorResponse = { response: { status: 500, statusText: 'Internal server error', data: { error: 'There were no attributes, QQ' } } }; var _handleErrors = (0, _http.handleErrors)(errorResponse), error = _handleErrors.error; expect(error).toEqual({ key: null, message: 'There were no attributes, QQ', statusCode: 500 }); }); }); // What scenarios do we handle? describe('when there is a 500 with empty data object', function () { test('returns an object without "error"', function () { var errorResponse = { response: { status: 500, statusText: 'Internal server error', data: {} } }; var _handleErrors2 = (0, _http.handleErrors)(errorResponse), error = _handleErrors2.error; expect(error).toEqual({ statusCode: 500, key: null, message: 'Internal server error' }); }); }); }); describe('corePath', function () { describe('kapp forms and submissions', function () { test('builds url with specified kapp', function () { expect((0, _http.corePath)({ form: 'ipad-request', kapp: 'services' })).toBe('/kinetic/acme/services/ipad-request'); }); test('builds url with the submission id', function () { expect((0, _http.corePath)({ submission: 'abc123' })).toBe('/kinetic/acme/submissions/abc123'); }); }); describe('space forms and submissions', function () { test('builds url to form', function () { expect((0, _http.corePath)({ form: 'cars' })).toBe('/kinetic/acme/app/forms/cars'); }); test('builds url with the submission id', function () { expect((0, _http.corePath)({ submission: 'abc123' })).toBe('/kinetic/acme/submissions/abc123'); }); }); }); describe('headerBuilder', function () { test('defaults to setting the X-Kinetic-AuthAssumed header to true', function () { expect((0, _http.headerBuilder)({})).toEqual({ 'X-Kinetic-AuthAssumed': 'true' }); }); test('omits X-Kinetic-AuthAssumed when public is true', function () { expect((0, _http.headerBuilder)({ "public": true })).toEqual({}); }); }); // The `paramBuilder` only strips out unnecessary options. describe('#paramBuilder', function () { test('returns parameter values', function () { var params = [['include', 'include'], ['limit', 1], ['pageToken', 'pageToken'], ['q', 'q'], ['direction', 'direction'], ['orderBy', 'orderBy'], ['manage', 'manage'], ['export', 'export']]; params.forEach(function (_ref) { var _ref2 = (0, _slicedToArray2["default"])(_ref, 2), param = _ref2[0], value = _ref2[1]; return expect((0, _http.paramBuilder)((0, _defineProperty2["default"])({}, param, value))).toMatchObject((0, _defineProperty2["default"])({}, param, value)); }); }); test('does not return non-parameter values', function () { expect((0, _http.paramBuilder)({ limit: 'limit', foobar: 'foobar' })).not.toMatchObject({ foobar: 'foobar' }); }); test('does not return parameters not passed', function () { expect((0, _http.paramBuilder)({ limit: 'limit', foobar: 'foobar' })).not.toMatchObject({ include: undefined }); }); }); describe('search operations', function () { test('startsWith', function () { var op = _http.operations.get('startsWith'); expect(op('field', 'value')).toEqual('field =* "value"'); }); test('equals', function () { var op = _http.operations.get('equals'); expect(op('field', 'value')).toEqual('field = "value"'); }); test('lt', function () { var op = _http.operations.get('lt'); expect(op('field', 'value')).toEqual('field < "value"'); }); test('lteq', function () { var op = _http.operations.get('lteq'); expect(op('field', 'value')).toEqual('field <= "value"'); }); test('gt', function () { var op = _http.operations.get('gt'); expect(op('field', 'value')).toEqual('field > "value"'); }); test('gteq', function () { var op = _http.operations.get('gteq'); expect(op('field', 'value')).toEqual('field >= "value"'); }); test('between', function () { var op = _http.operations.get('between'); expect(op('field', (0, _immutable.List)(['v1', 'v2']))).toEqual('field BETWEEN ("v1", "v2")'); }); test('in', function () { var op = _http.operations.get('in'); expect(op('field', (0, _immutable.List)(['v1', 'v2']))).toEqual('field IN ("v1", "v2")'); }); }); // The `paramBuilder` only strips out unnecessary options. describe('#formDataBuilder', function () { test('simple values only', function () { var data = { name: 'foo' }; var formData = (0, _http.formDataBuilder)(data); expect(formData.getAll('name')).toContain('foo'); }); test('with array values', function () { var data = { name: ['foo', 'bar'] }; var formData = (0, _http.formDataBuilder)(data); expect(formData.getAll('name')).toContain('foo'); expect(formData.getAll('name')).toContain('bar'); }); test('with array of objects', function () { var data = { array: [{ name: 'foo' }, { name: 'bar' }] }; var formData = (0, _http.formDataBuilder)(data); expect(formData.getAll('array[0][name]')).toContain('foo'); expect(formData.getAll('array[1][name]')).toContain('bar'); }); test('with File', function () { var data = { file: new File(['test'], 'test') }; var formData = (0, _http.formDataBuilder)(data); expect(formData.get('file') instanceof File).toBeTruthy(); }); test('with multiple Files', function () { var data = { files: [new File(['test'], 'test'), new File(['test2'], 'test2')] }; var formData = (0, _http.formDataBuilder)(data); expect(formData.getAll('files')[0] instanceof File).toBeTruthy(); expect(formData.getAll('files')[1] instanceof File).toBeTruthy(); }); test('nested values', function () { var data = { name: 'foo', child: { name: 'bar' } }; var formData = (0, _http.formDataBuilder)(data); expect(formData.getAll('name')).toContain('foo'); expect(formData.get('child')).toBeNull(); expect(formData.getAll('child[name]')).toContain('bar'); }); test('nested values with array', function () { var data = { child: { name: ['bar', 'baz'] } }; var formData = (0, _http.formDataBuilder)(data); expect(formData.getAll('child[name]')).toContain('bar'); expect(formData.getAll('child[name]')).toContain('baz'); }); test('nested values with File', function () { var data = { child: { file: new File(['test'], 'test') } }; var formData = (0, _http.formDataBuilder)(data); expect(formData.get('child[file]') instanceof File).toBeTruthy(); }); test('deeply nested data', function () { var data = { name: 'foo', child: { array: ['bar', 'baz'], sub: { file: new File(['test'], 'test'), last: { slug: 'foobar' } } } }; var formData = (0, _http.formDataBuilder)(data); expect(formData.getAll('name')).toContain('foo'); expect(formData.get('child')).toBeNull(); expect(formData.getAll('child[array]')).toContain('bar'); expect(formData.getAll('child[array]')).toContain('baz'); expect(formData.get('child[sub]')).toBeNull(); expect(formData.get('child[sub][file]') instanceof File).toBeTruthy(); expect(formData.get('child[sub][last]')).toBeNull(); expect(formData.getAll('child[sub][last][slug]')).toContain('foobar'); }); }); });