cannery-adapter-rest
Version:
The Cannery REST adapter
205 lines (157 loc) • 5.82 kB
JavaScript
;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var assert = require('assert');
var proxyquire = require('proxyquire');
var RestAdapter = proxyquire('../index', {});
var Jedi = function () {
function Jedi(id) {
_classCallCheck(this, Jedi);
this.id = id;
}
_createClass(Jedi, [{
key: 'getParent',
value: function getParent() {
return null;
}
}]);
return Jedi;
}();
var yoda = new Jedi(1);
var Lightsaber = function () {
function Lightsaber(id) {
_classCallCheck(this, Lightsaber);
this.id = id;
}
_createClass(Lightsaber, [{
key: 'getParent',
value: function getParent() {
return yoda;
}
}]);
return Lightsaber;
}();
var yodasLightsaber = new Lightsaber(2);
var Color = function () {
function Color(id) {
_classCallCheck(this, Color);
this.id = id;
}
_createClass(Color, [{
key: 'getParent',
value: function getParent() {
return yodasLightsaber;
}
}]);
return Color;
}();
describe('utility', function () {
describe('getRoutePath()', function () {
it('Should build a path from the parent nesting', function () {
var adapter = new RestAdapter();
var lightsaber = new Lightsaber();
var path = adapter.getRoutePath(lightsaber);
assert.equal(path, 'Jedi/Lightsaber');
});
});
describe('getOverrideRoute()', function () {
it('Should allow us to totally override a route', function () {
var lightsaber = new Lightsaber();
var adapter = new RestAdapter(lightsaber, {
'Jedi/Lightsaber': {
fetch: 'jedilightsaberpath'
}
});
var route = adapter.getOverrideRoute('fetch', lightsaber);
assert.equal(route, 'jedilightsaberpath');
});
it('Should replace {id} with the current model id', function () {
var lightsaber = new Lightsaber(2);
var adapter = new RestAdapter(lightsaber, {
'Jedi/Lightsaber': {
fetch: 'saber/{id}'
}
});
var route = adapter.getOverrideRoute('fetch', lightsaber);
assert.equal(route, 'saber/2');
});
it('Should replace {parents[0]} with model parent id', function () {
var lightsaber = new Lightsaber(2);
var adapter = new RestAdapter(lightsaber, {
'Jedi/Lightsaber': {
fetch: 'jedi/{parents[0]}/saber'
}
});
var route = adapter.getOverrideRoute('fetch', lightsaber);
assert.equal(route, 'jedi/1/saber');
});
it('Should replace allow us to go as far up the parent tree as we like', function () {
var color = new Color(3);
var adapter = new RestAdapter(color, {
'Jedi/Lightsaber/Color': {
fetch: 'jedi/{parents[1]}/saber/{parents[0]}/colors'
}
});
var route = adapter.getOverrideRoute('fetch', color);
assert.equal(route, 'jedi/1/saber/2/colors');
});
});
describe('getResponseBody()', function () {
var adapter = new RestAdapter({});
adapter.getResponseBody({
url: 'http://url.com',
statusCode: 200,
getBody: function getBody() {
return {
id: 4567
};
},
headers: {
etag: 'ETAG1'
}
});
var nextResponse = adapter.getResponseBody({
url: 'http://url.com',
statusCode: 304
});
assert.equal(nextResponse.id, 4567);
});
it('Should get the parent for getSingleFetchUrl()', function () {
var adapter = new RestAdapter({});
var Jedi = function () {
function Jedi(id) {
_classCallCheck(this, Jedi);
this.id = id;
}
_createClass(Jedi, [{
key: 'getName',
value: function getName() {
return 'jedis';
}
}]);
return Jedi;
}();
var yoda = new Jedi(1);
var Lightsaber = function () {
function Lightsaber(id) {
_classCallCheck(this, Lightsaber);
this.id = id;
}
_createClass(Lightsaber, [{
key: 'getParent',
value: function getParent() {
return yoda;
}
}, {
key: 'getName',
value: function getName() {
return 'lightsabers';
}
}]);
return Lightsaber;
}();
var lightsaber = new Lightsaber(2);
var url = adapter.getSingleFetchUrl(lightsaber);
assert.equal(url, 'jedis/1/lightsabers/2');
});
});