@kineticdata/react
Version:
A React library for the Kinetic Platform
469 lines (467 loc) • 15.7 kB
JavaScript
;
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);
})));
});
});