improves coverage and API of httpRequest
This commit is contained in:
154
spec/HTTPRequest.spec.js
Normal file
154
spec/HTTPRequest.spec.js
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
var httpRequest = require("../src/httpRequest"),
|
||||||
|
bodyParser = require('body-parser'),
|
||||||
|
express = require("express");
|
||||||
|
|
||||||
|
var port = 13371;
|
||||||
|
var httpRequestServer = "http://localhost:"+port;
|
||||||
|
|
||||||
|
var app = express();
|
||||||
|
app.use(bodyParser.json({ 'type': '*/*' }));
|
||||||
|
app.get("/hello", function(req, res){
|
||||||
|
res.json({response: "OK"});
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get("/404", function(req, res){
|
||||||
|
res.status(404);
|
||||||
|
res.send("NO");
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get("/301", function(req, res){
|
||||||
|
res.status(301);
|
||||||
|
res.location("/hello");
|
||||||
|
res.send();
|
||||||
|
});
|
||||||
|
|
||||||
|
app.post('/echo', function(req, res){
|
||||||
|
res.json(req.body);
|
||||||
|
})
|
||||||
|
|
||||||
|
app.listen(13371);
|
||||||
|
|
||||||
|
|
||||||
|
describe("httpRequest", () => {
|
||||||
|
|
||||||
|
it("should do /hello", (done) => {
|
||||||
|
httpRequest({
|
||||||
|
url: httpRequestServer+"/hello"
|
||||||
|
}).then(function(httpResponse){
|
||||||
|
expect(httpResponse.status).toBe(200);
|
||||||
|
expect(httpResponse.buffer).toEqual(new Buffer('{"response":"OK"}'));
|
||||||
|
expect(httpResponse.text).toEqual('{"response":"OK"}');
|
||||||
|
expect(httpResponse.data.response).toEqual("OK");
|
||||||
|
done();
|
||||||
|
}, function(){
|
||||||
|
fail("should not fail");
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should do /hello with callback and promises", (done) => {
|
||||||
|
var calls = 0;
|
||||||
|
httpRequest({
|
||||||
|
url: httpRequestServer+"/hello",
|
||||||
|
success: function() { calls++; },
|
||||||
|
error: function() { calls++; }
|
||||||
|
}).then(function(httpResponse){
|
||||||
|
expect(calls).toBe(1);
|
||||||
|
expect(httpResponse.status).toBe(200);
|
||||||
|
expect(httpResponse.buffer).toEqual(new Buffer('{"response":"OK"}'));
|
||||||
|
expect(httpResponse.text).toEqual('{"response":"OK"}');
|
||||||
|
expect(httpResponse.data.response).toEqual("OK");
|
||||||
|
done();
|
||||||
|
}, function(){
|
||||||
|
fail("should not fail");
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should do not follow redirects by default", (done) => {
|
||||||
|
|
||||||
|
httpRequest({
|
||||||
|
url: httpRequestServer+"/301"
|
||||||
|
}).then(function(httpResponse){
|
||||||
|
expect(httpResponse.status).toBe(301);
|
||||||
|
done();
|
||||||
|
}, function(){
|
||||||
|
fail("should not fail");
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should follow redirects when set", (done) => {
|
||||||
|
|
||||||
|
httpRequest({
|
||||||
|
url: httpRequestServer+"/301",
|
||||||
|
followRedirects: true
|
||||||
|
}).then(function(httpResponse){
|
||||||
|
expect(httpResponse.status).toBe(200);
|
||||||
|
expect(httpResponse.buffer).toEqual(new Buffer('{"response":"OK"}'));
|
||||||
|
expect(httpResponse.text).toEqual('{"response":"OK"}');
|
||||||
|
expect(httpResponse.data.response).toEqual("OK");
|
||||||
|
done();
|
||||||
|
}, function(){
|
||||||
|
fail("should not fail");
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should fail on 404", (done) => {
|
||||||
|
var calls = 0;
|
||||||
|
httpRequest({
|
||||||
|
url: httpRequestServer+"/404",
|
||||||
|
success: function() {
|
||||||
|
calls++;
|
||||||
|
fail("should not succeed");
|
||||||
|
done();
|
||||||
|
},
|
||||||
|
error: function(httpResponse) {
|
||||||
|
calls++;
|
||||||
|
expect(calls).toBe(1);
|
||||||
|
expect(httpResponse.status).toBe(404);
|
||||||
|
expect(httpResponse.buffer).toEqual(new Buffer('NO'));
|
||||||
|
expect(httpResponse.text).toEqual('NO');
|
||||||
|
expect(httpResponse.data).toBe(undefined);
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should fail on 404", (done) => {
|
||||||
|
httpRequest({
|
||||||
|
url: httpRequestServer+"/404",
|
||||||
|
}).then(function(httpResponse){
|
||||||
|
fail("should not succeed");
|
||||||
|
done();
|
||||||
|
}, function(httpResponse){
|
||||||
|
expect(httpResponse.status).toBe(404);
|
||||||
|
expect(httpResponse.buffer).toEqual(new Buffer('NO'));
|
||||||
|
expect(httpResponse.text).toEqual('NO');
|
||||||
|
expect(httpResponse.data).toBe(undefined);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should post on echo", (done) => {
|
||||||
|
var calls = 0;
|
||||||
|
httpRequest({
|
||||||
|
method: "POST",
|
||||||
|
url: httpRequestServer+"/echo",
|
||||||
|
body: {
|
||||||
|
foo: "bar"
|
||||||
|
},
|
||||||
|
success: function() { calls++; },
|
||||||
|
error: function() { calls++; }
|
||||||
|
}).then(function(httpResponse){
|
||||||
|
expect(calls).toBe(1);
|
||||||
|
expect(httpResponse.status).toBe(200);
|
||||||
|
expect(httpResponse.data).toEqual({foo: "bar"});
|
||||||
|
done();
|
||||||
|
}, function(httpResponse){
|
||||||
|
fail("should not fail");
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
})
|
||||||
|
});
|
||||||
@@ -9,13 +9,15 @@ module.exports = function(options) {
|
|||||||
};
|
};
|
||||||
delete options.success;
|
delete options.success;
|
||||||
delete options.error;
|
delete options.error;
|
||||||
if (options.uri && !options.url) {
|
delete options.uri; // not supported
|
||||||
options.uri = options.url;
|
|
||||||
delete options.url;
|
|
||||||
}
|
|
||||||
if (typeof options.body === 'object') {
|
if (typeof options.body === 'object') {
|
||||||
options.body = JSON.stringify(options.body);
|
options.body = JSON.stringify(options.body);
|
||||||
|
options.headers = options.headers || {};
|
||||||
|
options.headers['Content-Type'] = "application/json";
|
||||||
}
|
}
|
||||||
|
// set follow redirects to false by default
|
||||||
|
options.followRedirect = options.followRedirects == true ? true : false;
|
||||||
|
|
||||||
request(options, (error, response, body) => {
|
request(options, (error, response, body) => {
|
||||||
var httpResponse = {};
|
var httpResponse = {};
|
||||||
httpResponse.status = response.statusCode;
|
httpResponse.status = response.statusCode;
|
||||||
@@ -29,12 +31,12 @@ module.exports = function(options) {
|
|||||||
// Consider <200 && >= 400 as errors
|
// Consider <200 && >= 400 as errors
|
||||||
if (error || httpResponse.status <200 || httpResponse.status >=400) {
|
if (error || httpResponse.status <200 || httpResponse.status >=400) {
|
||||||
if (callbacks.error) {
|
if (callbacks.error) {
|
||||||
return callbacks.error(httpResponse);
|
callbacks.error(httpResponse);
|
||||||
}
|
}
|
||||||
return promise.reject(httpResponse);
|
return promise.reject(httpResponse);
|
||||||
} else {
|
} else {
|
||||||
if (callbacks.success) {
|
if (callbacks.success) {
|
||||||
return callbacks.success(httpResponse);
|
callbacks.success(httpResponse);
|
||||||
}
|
}
|
||||||
return promise.resolve(httpResponse);
|
return promise.resolve(httpResponse);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user