hmpo-model
Advanced tools
Comparing version 0.1.2 to 0.2.0
@@ -80,3 +80,3 @@ var _ = require('underscore'), | ||
var request = protocol.request(settings, function (response) { | ||
this.handleResponse(response, settings, _callback); | ||
this.handleResponse(response, _callback); | ||
}.bind(this)); | ||
@@ -94,4 +94,3 @@ request.on('error', function(e) { | ||
handleResponse: function(response, settings, callback) { | ||
handleResponse: function(response, callback) { | ||
response.pipe(concat(function (d) { | ||
@@ -105,14 +104,17 @@ var data = {}; | ||
} | ||
this.parseResponse(response.statusCode, data, callback); | ||
}.bind(this))); | ||
}, | ||
if (response.statusCode < 400) { | ||
try { | ||
data = this.parse(data); | ||
callback(null, data, response.statusCode); | ||
} catch (e) { | ||
callback(e, null, response.statusCode); | ||
} | ||
} else { | ||
callback(this.parseError(response.statusCode, data), data, response.statusCode); | ||
parseResponse: function (statusCode, data, callback) { | ||
if (statusCode < 400) { | ||
try { | ||
data = this.parse(data); | ||
callback(null, data, statusCode); | ||
} catch (e) { | ||
callback(e, null, statusCode); | ||
} | ||
}.bind(this))); | ||
} else { | ||
callback(this.parseError(statusCode, data), data, statusCode); | ||
} | ||
}, | ||
@@ -119,0 +121,0 @@ |
{ | ||
"name": "hmpo-model", | ||
"version": "0.1.2", | ||
"version": "0.2.0", | ||
"description": "Simple model for interacting with http/rest apis.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -41,2 +41,5 @@ var http = require('http'), | ||
sinon.stub(https, 'request').returns(apiRequest); | ||
sinon.spy(model, 'parseResponse'); | ||
}); | ||
@@ -298,2 +301,10 @@ | ||
it('passes statusCode, response body and callback to `parseResponse`', function (done) { | ||
http.request.yieldsAsync(success); | ||
model.save(function () { | ||
model.parseResponse.should.have.been.calledWith(200, { message: 'success' }, sinon.match.func); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
@@ -476,2 +487,10 @@ | ||
it('passes statusCode, response body and callback to `parseResponse`', function (done) { | ||
http.request.yieldsAsync(success); | ||
model.fetch(function () { | ||
model.parseResponse.should.have.been.calledWith(200, { message: 'success' }, sinon.match.func); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
@@ -647,5 +666,40 @@ | ||
it('passes statusCode, response body and callback to `parseResponse`', function (done) { | ||
http.request.yieldsAsync(success); | ||
model.delete(function () { | ||
model.parseResponse.should.have.been.calledWith(200, { message: 'success' }, sinon.match.func); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
describe('parseResponse', function () { | ||
beforeEach(function () { | ||
sinon.stub(model, 'parse').returns({ parsed: 'true' }); | ||
sinon.stub(model, 'parseError').returns({ error: 'true' }); | ||
}); | ||
it('sends response bodies with "success" status codes to parse', function (done) { | ||
model.parseResponse(200, { parsed: 'false' }, function (err, data, statusCode) { | ||
expect(err).to.be.null; | ||
model.parse.should.have.been.calledWith({ parsed: 'false' }); | ||
data.should.eql({ parsed: 'true' }); | ||
statusCode.should.equal(200); | ||
done(); | ||
}); | ||
}); | ||
it('sends response bodies with "failure" status codes to parseError', function (done) { | ||
model.parseResponse(400, { parsed: 'false' }, function (err, data, statusCode) { | ||
err.should.eql({ error: 'true' }); | ||
data.should.eql({ parsed: 'false' }); | ||
statusCode.should.equal(400); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
describe('prepare', function () { | ||
@@ -652,0 +706,0 @@ |
46147
1046