UNPKG

cannery-adapter-rest

Version:
205 lines (157 loc) 5.82 kB
'use strict'; 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'); }); });