UNPKG

@kineticdata/react

Version:
469 lines (467 loc) 15.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/regeneratorRuntime")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator")); var _axios = _interopRequireDefault(require("axios")); var _createError = _interopRequireDefault(require("axios/lib/core/createError")); var _forms = require("./forms"); var _form_builder = require("../../../tests/utils/form_builder"); var _promises = require("../../../tests/utils/promises"); jest.mock('axios'); // Mock out the bundle object from a dependency. jest.mock('../../helpers', function () { return { bundle: { apiLocation: function apiLocation() { return 'form/app/api/v1'; }, spaceLocation: function spaceLocation() { return '/kinetic/acme'; }, kappSlug: function kappSlug() { return 'mock-kapp'; } } }; }); describe('forms api', function () { describe('#fetchForms', function () { describe('when successful', function () { var response; var testForm; beforeEach(function () { response = { status: 200, data: { forms: [] } }; testForm = new _form_builder.FormBuilder().stub().withAttribute('Attribute', 'value').build(); response.data.forms.push(testForm); _axios["default"].get = (0, _promises.resolvePromiseWith)(response); }); test('does not return errors', function () { expect.assertions(1); return (0, _forms.fetchForms)().then(function (_ref) { var errors = _ref.errors; expect(errors).toBeUndefined(); }); }); test('returns an array of forms', function () { expect.assertions(2); return (0, _forms.fetchForms)().then(function (_ref2) { var forms = _ref2.forms; expect(forms).toBeInstanceOf(Array); expect(forms[0]).toMatchObject({ name: testForm.name, slug: testForm.slug }); }); }); test('returns attributes', function () { expect.assertions(2); return (0, _forms.fetchForms)({ xlatAttributes: true }).then(function (_ref3) { var forms = _ref3.forms; expect(forms[0].attributes).toBeDefined(); expect(forms[0].attributes).toBeInstanceOf(Array); }); }); }); }); describe('#fetchForm', function () { describe('when successful', function () { var response; var testForm; var formSlug; beforeEach(function () { response = { status: 200, data: { form: {} } }; testForm = new _form_builder.FormBuilder().stub().withAttribute('Attribute', 'value').build(); formSlug = testForm.slug; response.data.form = testForm; _axios["default"].get = (0, _promises.resolvePromiseWith)(response); }); test('does not return errors', function () { expect.assertions(1); return (0, _forms.fetchForm)({ formSlug: formSlug }).then(function (_ref4) { var errors = _ref4.errors; expect(errors).toBeUndefined(); }); }); test('returns a form', function () { expect.assertions(1); return (0, _forms.fetchForm)({ formSlug: formSlug }).then(function (_ref5) { var form = _ref5.form; expect(form).toMatchObject({ name: testForm.name, slug: testForm.slug }); }); }); test('returns attributes', function () { expect.assertions(2); return (0, _forms.fetchForm)({ formSlug: formSlug }).then(function (_ref6) { var form = _ref6.form; expect(form.attributes).toBeDefined(); expect(form.attributes).toBeInstanceOf(Array); }); }); }); describe('when unsuccessful', function () { var response; beforeEach(function () { response = { status: 500, data: { error: 'Failed' } }; _axios["default"].get = (0, _promises.rejectPromiseWith)({ response: response }); }); test('throws an exception when no form slug is provided', function () { expect(function () { (0, _forms.fetchForm)({}); }).toThrow(); }); test('does return errors', function () { expect.assertions(1); return (0, _forms.fetchForm)({ formSlug: 'fake', xlatAttributes: true }).then(function (_ref7) { var error = _ref7.error; expect(error).toBeDefined(); }); }); }); }); describe('createForm', function () { beforeEach(function () { _axios["default"].post.mockReset(); }); test('success', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee() { var _yield$createForm, form, error; return (0, _regeneratorRuntime2["default"])().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: _axios["default"].post.mockResolvedValue({ status: 200, data: { form: { name: 'Test Form', attributes: [{ name: 'Icon', values: ['fa-gear'] }] } } }); _context.next = 3; return (0, _forms.createForm)({ kappSlug: 'catalog', form: { name: 'Test Form', attributes: [{ name: 'Icon', values: ['fa-gear'] }] }, include: 'attributes,pages' }); case 3: _yield$createForm = _context.sent; form = _yield$createForm.form; error = _yield$createForm.error; expect(_axios["default"].post.mock.calls).toEqual([['form/app/api/v1/kapps/catalog/forms', { name: 'Test Form', attributes: [{ name: 'Icon', values: ['fa-gear'] }] }, { params: { include: 'attributes,pages' }, headers: { 'X-Kinetic-AuthAssumed': 'true' } }]]); expect(form).toEqual({ name: 'Test Form', attributes: [{ name: 'Icon', values: ['fa-gear'] }] }); expect(error).toBeUndefined(); case 9: case "end": return _context.stop(); } }, _callee); }))); test('missing form', function () { expect(function () { (0, _forms.createForm)({}); }).toThrow('createForm failed! The option "form" is required.'); }); test('missing kappSlug allowed for space forms', function () { _axios["default"].post.mockResolvedValue({ status: 200, data: {} }); expect(function () { (0, _forms.createForm)({ form: {}, kappSlug: null }); }).not.toThrowError(); }); test('bad request', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee2() { var _yield$createForm2, form, error; return (0, _regeneratorRuntime2["default"])().wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _axios["default"].post.mockRejectedValue((0, _createError["default"])('Request failed with status code 400', null, 400, null, { status: 400, statusText: 'Bad Request', data: { error: 'Invalid form' } })); _context2.next = 3; return (0, _forms.createForm)({ form: { name: null } }); case 3: _yield$createForm2 = _context2.sent; form = _yield$createForm2.form; error = _yield$createForm2.error; expect(form).toBeUndefined(); expect(error).toEqual({ badRequest: true, key: null, message: 'Invalid form', statusCode: 400 }); case 8: case "end": return _context2.stop(); } }, _callee2); }))); test('forbidden', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee3() { var _yield$createForm3, form, error; return (0, _regeneratorRuntime2["default"])().wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: _axios["default"].post.mockRejectedValue((0, _createError["default"])('Request failed with status code 403', null, 403, null, { status: 403, statusText: 'Forbidden', data: {} })); _context3.next = 3; return (0, _forms.createForm)({ form: { name: 'Test' } }); case 3: _yield$createForm3 = _context3.sent; form = _yield$createForm3.form; error = _yield$createForm3.error; expect(form).toBeUndefined(); expect(error).toEqual({ statusCode: 403, key: null, message: 'Forbidden', forbidden: true }); case 8: case "end": return _context3.stop(); } }, _callee3); }))); }); describe('updateForm', function () { beforeEach(function () { _axios["default"].put.mockReset(); }); test('success', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee4() { var _yield$updateForm, form, error; return (0, _regeneratorRuntime2["default"])().wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: _axios["default"].put.mockResolvedValue({ status: 200, data: { form: { name: 'Test Form', attributes: [{ name: 'Icon', values: ['fa-gear'] }] } } }); _context4.next = 3; return (0, _forms.updateForm)({ kappSlug: 'catalog', formSlug: 'test-form', form: { name: 'Test Form', attributes: [{ name: 'Icon', values: ['fa-gear'] }] }, include: 'attributes,pages' }); case 3: _yield$updateForm = _context4.sent; form = _yield$updateForm.form; error = _yield$updateForm.error; expect(_axios["default"].put.mock.calls).toEqual([['form/app/api/v1/kapps/catalog/forms/test-form', { name: 'Test Form', attributes: [{ name: 'Icon', values: ['fa-gear'] }] }, { params: { include: 'attributes,pages' }, headers: { 'X-Kinetic-AuthAssumed': 'true' } }]]); expect(form).toEqual({ name: 'Test Form', attributes: [{ name: 'Icon', values: ['fa-gear'] }] }); expect(error).toBeUndefined(); case 9: case "end": return _context4.stop(); } }, _callee4); }))); test('missing form', function () { expect(function () { (0, _forms.updateForm)({ formSlug: 'test' }); }).toThrow('updateForm failed! The option "form" is required.'); }); test('missing kappSlug allowed for space forms', function () { _axios["default"].put.mockResolvedValue({ status: 200, data: {} }); expect(function () { (0, _forms.updateForm)({ formSlug: 'test', form: {}, kappSlug: null }); }).not.toThrowError(); }); test('missing formSlug', function () { expect(function () { (0, _forms.updateForm)({ form: {} }); }).toThrow('updateForm failed! The option "formSlug" is required.'); }); test('bad request', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee5() { var _yield$updateForm2, form, error; return (0, _regeneratorRuntime2["default"])().wrap(function _callee5$(_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: _axios["default"].put.mockRejectedValue((0, _createError["default"])('Request failed with status code 400', null, 400, null, { status: 400, statusText: 'Bad Request', data: { error: 'Invalid form' } })); _context5.next = 3; return (0, _forms.updateForm)({ formSlug: 'test', form: { name: null } }); case 3: _yield$updateForm2 = _context5.sent; form = _yield$updateForm2.form; error = _yield$updateForm2.error; expect(form).toBeUndefined(); expect(error).toEqual({ badRequest: true, statusCode: 400, key: null, message: 'Invalid form' }); case 8: case "end": return _context5.stop(); } }, _callee5); }))); test('serverError', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee6() { var _yield$updateForm3, form, error; return (0, _regeneratorRuntime2["default"])().wrap(function _callee6$(_context6) { while (1) switch (_context6.prev = _context6.next) { case 0: _axios["default"].put.mockRejectedValue((0, _createError["default"])('Request failed with status code 403', null, 403, null, { status: 403, statusText: 'Forbidden', data: {} })); _context6.next = 3; return (0, _forms.updateForm)({ formSlug: 'test', form: { name: 'Test' } }); case 3: _yield$updateForm3 = _context6.sent; form = _yield$updateForm3.form; error = _yield$updateForm3.error; expect(form).toBeUndefined(); expect(error).toEqual({ forbidden: true, key: null, statusCode: 403, message: 'Forbidden' }); case 8: case "end": return _context6.stop(); } }, _callee6); }))); }); });