@kineticdata/react
Version:
A React library for the Kinetic Platform
316 lines (314 loc) • 10.8 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 _kapps = require("./kapps");
var _kapp_builder = require("../../../tests/utils/kapp_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 'kapp/app/api/v1';
},
kappSlug: function kappSlug() {
return 'mock-kapp';
}
}
};
});
describe('kapps api', function () {
describe('#fetchKapps', function () {
describe('when successful', function () {
var response;
var testKapp;
beforeEach(function () {
response = {
status: 200,
data: {
kapps: []
}
};
testKapp = new _kapp_builder.KappBuilder().stub().withAttribute('Attribute', 'value').build();
response.data.kapps.push(testKapp);
_axios["default"].get = (0, _promises.resolvePromiseWith)(response);
});
test('does not return errors', function () {
expect.assertions(1);
return (0, _kapps.fetchKapps)().then(function (_ref) {
var serverError = _ref.serverError;
expect(serverError).toBeUndefined();
});
});
test('returns an array of kapps', function () {
expect.assertions(2);
return (0, _kapps.fetchKapps)().then(function (_ref2) {
var kapps = _ref2.kapps;
expect(kapps).toBeInstanceOf(Array);
expect(kapps[0]).toMatchObject({
name: testKapp.name,
slug: testKapp.slug
});
});
});
test('returns attributes', function () {
expect.assertions(2);
return (0, _kapps.fetchKapps)({
xlatAttributes: true
}).then(function (_ref3) {
var kapps = _ref3.kapps;
expect(kapps[0].attributes).toBeDefined();
expect(kapps[0].attributes).toBeInstanceOf(Array);
});
});
});
});
describe('#fetchKapp', function () {
describe('when successful', function () {
var response;
var testKapp;
beforeEach(function () {
response = {
status: 200,
data: {
kapp: {}
}
};
testKapp = new _kapp_builder.KappBuilder().stub().withAttribute('Attribute', 'value').build();
response.data.kapp = testKapp;
_axios["default"].get = (0, _promises.resolvePromiseWith)(response);
});
test('does not return errors', function () {
expect.assertions(1);
return (0, _kapps.fetchKapp)().then(function (_ref4) {
var errors = _ref4.errors;
expect(errors).toBeUndefined();
});
});
test('returns a kapp', function () {
expect.assertions(1);
return (0, _kapps.fetchKapp)().then(function (_ref5) {
var kapp = _ref5.kapp;
expect(kapp).toMatchObject({
name: testKapp.name,
slug: testKapp.slug
});
});
});
test('returns attributes', function () {
expect.assertions(2);
return (0, _kapps.fetchKapp)({
xlatAttributes: true
}).then(function (_ref6) {
var kapp = _ref6.kapp;
expect(kapp.attributes).toBeDefined();
expect(kapp.attributes).toBeInstanceOf(Array);
});
});
});
describe('when unsuccessful', function () {
var response;
beforeEach(function () {
response = {
status: 500,
data: {}
};
_axios["default"].get = (0, _promises.rejectPromiseWith)({
response: response
});
});
test('does return errors', function () {
expect.assertions(1);
return (0, _kapps.fetchKapp)({
includes: 'attributes',
xlatAttributes: true
}).then(function (_ref7) {
var error = _ref7.error;
expect(error).toBeDefined();
});
});
});
});
describe('updateKapp', function () {
beforeEach(function () {
_axios["default"].put.mockReset();
});
test('success', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee() {
var _yield$updateKapp, kapp, error;
return (0, _regeneratorRuntime2["default"])().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_axios["default"].put.mockResolvedValue({
status: 200,
data: {
kapp: {
name: 'Test',
attributes: [{
name: 'Company Name',
values: ['Foo Bar']
}]
}
}
});
_context.next = 3;
return (0, _kapps.updateKapp)({
kappSlug: 'catalog',
kapp: {
name: 'Test',
attributes: [{
name: 'Company Name',
values: ['Foo Bar']
}]
},
include: 'attributes'
});
case 3:
_yield$updateKapp = _context.sent;
kapp = _yield$updateKapp.kapp;
error = _yield$updateKapp.error;
expect(_axios["default"].put.mock.calls).toEqual([['kapp/app/api/v1/kapps/catalog', {
name: 'Test',
attributes: [{
name: 'Company Name',
values: ['Foo Bar']
}]
}, {
params: {
include: 'attributes'
},
headers: {
'X-Kinetic-AuthAssumed': 'true'
}
}]]);
expect(kapp).toEqual({
name: 'Test',
attributes: [{
name: 'Company Name',
values: ['Foo Bar']
}]
});
expect(error).toBeUndefined();
case 9:
case "end":
return _context.stop();
}
}, _callee);
})));
test('defaults to bundle.kappSlug() when no kappSlug provided', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee2() {
return (0, _regeneratorRuntime2["default"])().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
_axios["default"].put.mockResolvedValue({
status: 200,
data: {}
});
_context2.next = 3;
return (0, _kapps.updateKapp)({
kapp: {
name: 'Test'
}
});
case 3:
expect(_axios["default"].put.mock.calls).toEqual([['kapp/app/api/v1/kapps/mock-kapp', {
name: 'Test'
}, {
params: {},
headers: {
'X-Kinetic-AuthAssumed': 'true'
}
}]]);
case 4:
case "end":
return _context2.stop();
}
}, _callee2);
})));
test('missing kapp', function () {
expect(function () {
(0, _kapps.updateKapp)({});
}).toThrow('updateKapp failed! The option "kapp" is required.');
});
test('missing kappSlug', function () {
// Note that we need to set it to null becuse by default if kappSlug is
// not passed (undefined) it checks the 'bundle' helper.
expect(function () {
(0, _kapps.updateKapp)({
kapp: {},
kappSlug: null
});
}).toThrow('updateKapp failed! The option "kappSlug" is required.');
});
test('bad request', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee3() {
var _yield$updateKapp2, kapp, error;
return (0, _regeneratorRuntime2["default"])().wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.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 kapp'
}
}));
_context3.next = 3;
return (0, _kapps.updateKapp)({
kapp: {
name: null
}
});
case 3:
_yield$updateKapp2 = _context3.sent;
kapp = _yield$updateKapp2.kapp;
error = _yield$updateKapp2.error;
expect(kapp).toBeUndefined();
expect(error).toEqual({
statusCode: 400,
key: null,
badRequest: true,
message: 'Invalid kapp'
});
case 8:
case "end":
return _context3.stop();
}
}, _callee3);
})));
test('forbidden', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee4() {
var _yield$updateKapp3, kapp, error;
return (0, _regeneratorRuntime2["default"])().wrap(function _callee4$(_context4) {
while (1) switch (_context4.prev = _context4.next) {
case 0:
_axios["default"].put.mockRejectedValue((0, _createError["default"])('Request failed with status code 403', null, 403, null, {
status: 403,
statusText: 'Forbidden',
data: {}
}));
_context4.next = 3;
return (0, _kapps.updateKapp)({
kapp: {
name: 'Foo'
}
});
case 3:
_yield$updateKapp3 = _context4.sent;
kapp = _yield$updateKapp3.kapp;
error = _yield$updateKapp3.error;
expect(kapp).toBeUndefined();
expect(error).toEqual({
statusCode: 403,
key: null,
forbidden: true,
message: 'Forbidden'
});
case 8:
case "end":
return _context4.stop();
}
}, _callee4);
})));
});
});