cannery-adapter-rest
Version:
The Cannery REST adapter
95 lines (77 loc) • 2.62 kB
JavaScript
;
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();
});
});
});