UNPKG

cannery-adapter-rest

Version:
95 lines (77 loc) 2.62 kB
'use strict'; var assert = require('assert'); var proxyquire = require('proxyquire'); var Car = require('../__mocks__/car_model.mock'); var Part = require('../__mocks__/part_model.mock'); var RestAdapter = proxyquire('../index', { 'then-request': require('../__mocks__/fetchWithin_request.mock') }); describe('fetchWithin()', function () { it('Should let us define our own url path', function (done) { var car = new Car(1); var adapter = new RestAdapter(car, { 'Car/Part': { fetch: 'foo/bar/baz' } }); Part.prototype.getParent = function () { return car; }; adapter.fetchWithin(new Part(), car).then(function (data) { assert.equal(data.name, 'Foo'); done(); }); }); it('Should respond with an object of data', function (done) { var adapter = new RestAdapter(); var car = new Car(1); Part.prototype.getParent = function () { return car; }; adapter.fetchWithin(new Part(), car).then(function (data) { assert.equal(data.name, 'Steering Wheel'); done(); }); }); it('Should allow us to pass in an envelope for nested data', function (done) { var adapter = new RestAdapter({ envelope: 'part' }); var car = new Car(2); Part.prototype.getParent = function () { return car; }; adapter.fetchWithin(new Part(), car).then(function (data) { assert.equal(data.name, 'Engine'); done(); }); }); it('Should catch errors', function (done) { var car = new Car(2000); var adapter = new RestAdapter(); adapter.fetchWithin(new Part(), car, {}).catch(function (data) { assert.equal(data.statusCode, 404); done(); }); }); it('Should allow us to specify a urlRoot', function (done) { var car = new Car(3); var adapter = new RestAdapter({ urlRoot: 'api/' }); adapter.fetchWithin(new Part(), car).then(function (data) { assert.equal(data.name, 'Engine'); done(); }); }); it('Should not make 2 requests if for the same endpoint at the same time', function (done) { var car = new Car(3); var adapter = new RestAdapter({ urlRoot: 'api/' }); adapter.fetchWithin(new Part(), car); adapter.fetchWithin(new Part(), car).then(function () { done(); }); }); });