Skip to content

Commit

Permalink
Errors are passed into next() instead of res.json + Added tests for POST
Browse files Browse the repository at this point in the history
  • Loading branch information
Vijar committed Jun 10, 2015
1 parent d6b7770 commit f75dfa1
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 62 deletions.
31 changes: 24 additions & 7 deletions libs/fetcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ var OP_UPDATE = 'update';
var GET = 'GET';
var qs = require('querystring');
var debug = require('debug')('Fetchr');
var fumble = require('fumble');

function parseValue(value) {
// take care of value of type: array, object
Expand Down Expand Up @@ -101,14 +102,18 @@ function parseParamValues (params) {
Fetcher.middleware = function () {
return function (req, res, next) {
var request;
var error;

if (req.method === GET) {
var path = req.path.substr(1).split(';');
var resource = path.shift();

if (!Fetcher.hasFetcher(resource)) {
res.status(400).json({message: 'Invalid Fetchr URL'});
return;
error = fumble.http.badRequest('Invalid Fetchr Access', {
debug: 'Bad resource ' + resource
});
error.source = 'fetchr';
return next(error);
}

request = {
Expand All @@ -132,15 +137,27 @@ function parseParamValues (params) {
}
};
} else {
var requests = req.body.requests;
var requests = req.body && req.body.requests;

if (!requests || Object.keys(requests).length === 0) {
res.status(400).end();
return;
error = fumble.http.badRequest('Invalid Fetchr Access', {
debug: 'No resources'
});
error.source = 'fetchr';
return next(error);
}

var DEFAULT_GUID = 'g0';
var singleRequest = requests[DEFAULT_GUID];

if (!Fetcher.hasFetcher(singleRequest.resource)) {
error = fumble.http.badRequest('Invalid Fetchr Access', {
debug: 'Bad resource ' + singleRequest.resource
});
error.source = 'fetchr';
return next(error);
}

var DEFAULT_GUID = 'g0',
singleRequest = requests[DEFAULT_GUID];
request = {
req: req,
resource: singleRequest.resource,
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
],
"dependencies": {
"debug": "^2.0.0",
"fumble": "^0.1.0",
"lodash": "^3.3.0",
"xhr": "^2.0.0"
},
Expand Down
75 changes: 20 additions & 55 deletions tests/unit/libs/fetcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,39 +35,6 @@ describe('Server Fetcher', function () {

describe('#middleware', function () {
describe('#POST', function() {
it('should 404 to POST request with no req.body.requests object', function (done) {
var operation = 'create',
statusCodeSet = false,
req = {
method: 'POST',
path: '/' + mockService.name,
body: {
requests: {},
context: {
site: '',
device: ''
}
}
},
res = {
status: function (code) {
expect(code).to.equal(400);
statusCodeSet = true;
return this;
},
end: function () {
expect(statusCodeSet).to.be.true;
done();
}
},
next = function () {
console.log('Not Expected: middleware skipped request');
},
middleware = Fetcher.middleware();

middleware(req, res, next);
});

it('should respond to POST api request', function (done) {
var operation = 'create',
statusCodeSet = false,
Expand Down Expand Up @@ -376,34 +343,32 @@ describe('Server Fetcher', function () {
});

describe('Invalid Access', function () {
function makeGetInvalidReqTest(req, done) {
var statusCodeSet = false;
var res = {
status: function (code) {
expect(code).to.equal(400);
statusCodeSet = true;
return this;
},
json: function (err) {
expect(err).to.exist;
expect(err).to.be.an.object;
expect(err.message).to.equal('Invalid Fetchr URL');
expect(statusCodeSet).to.be.true;
done();
}
};
var next = function () {
done(new Error('Not Expected: middleware skipped request'));
function makeInvalidReqTest(req, done) {
var res = {};
var next = function (err) {
expect(err).to.exist;
expect(err).to.be.an.object;
expect(err.message).to.equal('Invalid Fetchr Access');
expect(err.statusCode).to.equal(400);
expect(err.source).to.equal('fetchr');
done();
};
var middleware = Fetcher.middleware();
middleware(req, res, next);
}
it('should reject empty url', function (done) {
makeGetInvalidReqTest({method: 'GET', path: '/'}, done);
it('should skip empty url', function (done) {
makeInvalidReqTest({method: 'GET', path: '/'}, done);
});
it('should skip invalid resource', function (done) {
makeInvalidReqTest({method: 'GET', path: '/invalidService'}, done);
});
it('should reject invalid resource', function (done) {
makeGetInvalidReqTest({method: 'GET', path: '/invalidService'}, done);
it('should skip POST request with empty req.body.requests object', function (done) {
makeInvalidReqTest({method: 'POST', body: { requests: {}}}, done);
});
it('should skip POST request with no req.body.requests object', function (done) {
makeInvalidReqTest({method: 'POST'}, done);
});

});
});

Expand Down

0 comments on commit f75dfa1

Please sign in to comment.