307 lines
5.9 KiB
JavaScript
Raw Normal View History

2025-04-23 09:34:08 +08:00
var httpreq = require('../lib/httpreq');
var assert = require("assert");
var expect = require("chai").expect;
var express = require('express');
var http = require('http');
var fs = require('fs');
describe("httpreq", function(){
var port, app, webserver, endpointroot;
before(function (done) {
port = Math.floor( Math.random() * (65535 - 1025) + 1025 );
endpointroot = 'http://localhost:'+port;
app = express();
app.configure(function(){
app.use(express.logger('dev'));
app.use(express.errorHandler());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
});
webserver = http.createServer(app).listen(port, function(){
console.log("web server listening on port " + port);
done();
});
});
after(function () {
webserver.close();
});
describe("get", function(){
it("should do a simple GET request", function (done){
var path = '/get'; // make sure this is unique when writing tests
app.get(path, function (req, res) {
res.send('ok');
done();
});
httpreq.get(endpointroot + path, function (err, res) {
if (err) throw err;
});
});
});
describe("post", function(){
it("should do a simple POST request with parameters", function (done){
var parameters = {
name: 'John',
lastname: 'Doe'
};
var path = '/post';
// set up webserver endpoint:
app.post(path, function (req, res) {
res.send('ok');
expect(req.body).to.deep.equal(parameters);
done();
});
// post parameters to webserver endpoint:
httpreq.post(endpointroot + path, {
parameters: parameters
}, function (err, res){
if (err) throw err;
});
});
it("should do a simple POST request with parameters and cookies", function (done){
var parameters = {
name: 'John',
lastname: 'Doe'
};
var cookies = [
'token=DGcGUmplWQSjfqEvmu%2BZA%2Fc',
'id=2'
];
var path = '/postcookies';
// set up webserver endpoint:
app.post(path, function (req, res) {
res.send('ok');
expect(req.body).to.deep.equal(parameters);
expect(req.headers.cookie).to.equal(cookies.join('; '));
done();
});
// post testdata to webserver endpoint:
httpreq.post(endpointroot + path, {
parameters: parameters,
cookies: cookies
}, function (err, res){
if (err) throw err;
});
});
it("should do a simple POST request with parameters and custom headers", function (done){
var parameters = {
name: 'John',
lastname: 'Doe'
};
var headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:18.0) Gecko/20100101 Firefox/18.0'
};
var path = '/postheaders';
// set up webserver endpoint:
app.post(path, function (req, res) {
res.send('ok');
expect(req.body).to.deep.equal(parameters);
expect(req.headers).to.have.a.property('user-agent', headers['User-Agent']);
done();
});
// post testdata to webserver endpoint:
httpreq.post(endpointroot + path, {
parameters: parameters,
headers: headers
}, function (err, res){
if (err) throw err;
});
});
});
describe("POST json", function () {
it('should POST some json', function (done) {
var somejson = {
name: 'John',
lastname: 'Doe'
};
var path = '/postjson';
// set up webserver endpoint:
app.post(path, function (req, res) {
res.send('ok');
expect(req.body).to.deep.equal(somejson);
done();
});
httpreq.post(endpointroot + path, {
json: somejson
}, function (err, res){
if (err) throw err;
});
});
});
describe("File upload", function () {
it('should upload 1 file (old way)', function (done) {
var testparams = {
name: 'John',
lastname: 'Doe'
};
var testfile = __dirname + "/testupload.jpg";
var path = '/uploadfile_old';
// set up webserver endpoint:
app.post(path, function (req, res) {
res.send('ok');
expect(req.body).to.deep.equal(testparams);
comparefiles(req.files['myfile'].path, testfile, done);
});
httpreq.uploadFiles({
url: endpointroot + path,
parameters: testparams,
files:{
myfile: testfile
}
}, function (err, res){
if (err) throw err;
});
});
it('should upload 2 files (new way, using POST)', function (done) {
var testparams = {
name: 'John',
lastname: 'Doe'
};
var testfile = __dirname + "/testupload.jpg";
var path = '/uploadfiles';
// set up webserver endpoint:
app.post(path, function (req, res) {
res.send('ok');
expect(req.body).to.deep.equal(testparams);
comparefiles(req.files['myfile'].path, testfile, function () {
comparefiles(req.files['myotherfile'].path, testfile, function () {
done();
});
});
});
httpreq.post(endpointroot + path, {
parameters: testparams,
files:{
myfile: testfile,
myotherfile: testfile
}
}, function (err, res){
if (err) throw err;
});
});
it('should upload 2 files (new way, using PUT)', function (done) {
var testparams = {
name: 'John',
lastname: 'Doe'
};
var testfile = __dirname + "/testupload.jpg";
var path = '/uploadfiles_put';
// set up webserver endpoint:
app.put(path, function (req, res) {
res.send('ok');
expect(req.body).to.deep.equal(testparams);
comparefiles(req.files['myfile'].path, testfile, function () {
comparefiles(req.files['myotherfile'].path, testfile, function () {
done();
});
});
});
httpreq.put(endpointroot + path, {
parameters: testparams,
files:{
myfile: testfile,
myotherfile: testfile
}
}, function (err, res){
if (err) throw err;
});
});
});
});
function comparefiles (file1, file2, callback) {
fs.readFile(file1, function (err, file1data) {
if(err) throw err;
fs.readFile(file2, function (err, file2data) {
if(err) throw err;
expect(file1data).to.deep.equal(file2data);
callback();
});
});
}