File: /var/dev/farhangmoaser/web/node_modules/supertest/test/supertest.js
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
var request = require('..')
, https = require('https')
, fs = require('fs')
, path = require('path')
, should = require('should')
, express = require('express');
var bodyParser = require('body-parser')
, cookieParser = require('cookie-parser');
describe('request(url)', function(){
it('should be supported', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hello');
});
var s = app.listen(function(){
var url = 'http://localhost:' + s.address().port;
request(url)
.get('/')
.expect("hello", done);
});
});
describe('.end(cb)', function() {
it('should set `this` to the test object when calling cb', function(done) {
var app = express();
app.get('/', function(req, res){
res.send('hello');
});
var s = app.listen(function(){
var url = 'http://localhost:' + s.address().port;
var test = request(url).get('/');
test.end(function(err, res) {
this.should.eql(test);
done();
});
});
});
});
});
describe('request(app)', function(){
it('should fire up the app on an ephemeral port', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hey');
});
request(app)
.get('/')
.end(function(err, res){
res.status.should.equal(200);
res.text.should.equal('hey');
done();
});
});
it('should work with an active server', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hey');
});
var server = app.listen(4000, function(){
request(server)
.get('/')
.end(function(err, res){
res.status.should.equal(200);
res.text.should.equal('hey');
done();
});
});
});
it('should work with remote server', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hey');
});
var server = app.listen(4001, function(){
request('http://localhost:4001')
.get('/')
.end(function(err, res){
res.status.should.equal(200);
res.text.should.equal('hey');
done();
});
});
});
it('should work with a https server', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hey');
});
var fixtures = path.join(__dirname, 'fixtures');
var server = https.createServer({
key: fs.readFileSync(path.join(fixtures, 'test_key.pem')),
cert: fs.readFileSync(path.join(fixtures, 'test_cert.pem'))
}, app);
request(server)
.get('/')
.end(function(err, res){
if (err) return done(err);
res.status.should.equal(200);
res.text.should.equal('hey');
done();
});
});
it('should work with .send() etc', function(done){
var app = express();
app.use(bodyParser.json());
app.post('/', function(req, res){
res.send(req.body.name);
});
request(app)
.post('/')
.send({ name: 'tobi' })
.expect('tobi', done);
});
it('should work when unbuffered', function(done){
var app = express();
app.get('/', function(req, res){
res.end('Hello');
});
request(app)
.get('/')
.expect('Hello', done);
});
it('should default redirects to 0', function(done){
var app = express();
app.get('/', function(req, res){
res.redirect('/login');
});
request(app)
.get('/')
.expect(302, done);
});
it('should handle redirects', function(done){
var app = express();
app.get('/login', function (req, res){
res.end('Login')
});
app.get('/', function(req, res){
res.redirect('/login');
});
request(app)
.get('/')
.redirects(1)
.end(function (err, res) {
should.exist(res)
res.status.should.be.equal(200)
res.text.should.be.equal('Login')
done()
})
});
it('should handle socket errors', function(done) {
var app = express();
app.get('/', function(req, res){
res.destroy();
});
request(app)
.get('/')
.end(function(err) {
should.exist(err);
done();
});
});
describe('.end(fn)', function(){
it('should close server', function(done){
var app = express();
app.get('/', function(req, res){
res.send('supertest FTW!');
});
var test = request(app)
.get('/')
.end(function(){});
test._server.on('close', function(){
done();
});
});
it('should wait for server to close before invoking fn', function(done){
var app = express();
var closed = false;
app.get('/', function(req, res){
res.send('supertest FTW!');
});
var test = request(app)
.get('/')
.end(function(){
closed.should.be.true;
done();
});
test._server.on('close', function(){
closed = true;
});
});
it('should support nested requests', function(done){
var app = express();
var test = request(app);
app.get('/', function(req, res){
res.send('supertest FTW!');
});
test
.get('/')
.end(function(){
test
.get('/')
.end(function(err, res){
(err === null).should.be.true;
res.status.should.equal(200);
res.text.should.equal('supertest FTW!');
done();
});
});
});
it('should include the response in the error callback', function(done){
var app = express();
app.get('/', function(req, res){
res.send('whatever');
});
request(app)
.get('/')
.expect(function() {
throw new Error('Some error');
})
.end(function(err, res){
should.exist(err);
should.exist(res);
// Duck-typing response, just in case.
res.status.should.equal(200);
done();
});
});
it('should set `this` to the test object when calling the error callback', function(done) {
var app = express();
app.get('/', function(req, res){
res.send('whatever');
});
var test = request(app).get('/');
test.expect(function() {
throw new Error('Some error');
}).end(function(err, res){
should.exist(err);
this.should.eql(test);
done();
});
});
it('should handle an undefined Response', function (done) {
var app = express();
app.get('/', function(req, res){
setTimeout( function () {
res.end();
}, 20);
});
var s = app.listen(function(){
var url = 'http://localhost:' + s.address().port;
request(url)
.get('/')
.timeout(1)
.expect(200, function (err) {
err.should.be.an.instanceof(Error);
return done();
});
});
});
it('should handle error returned when server goes down', function (done) {
var app = express();
app.get('/', function(req, res){
res.end();
});
var s = app.listen(function(){
var url = 'http://localhost:' + s.address().port;
s.close();
request(url)
.get('/')
.expect(200, function (err) {
err.should.be.an.instanceof(Error);
return done();
});
});
});
});
describe('.expect(status[, fn])', function(){
it('should assert the response status', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hey');
});
request(app)
.get('/')
.expect(404)
.end(function(err, res){
err.message.should.equal('expected 404 "Not Found", got 200 "OK"');
done();
});
});
});
describe('.expect(status)', function () {
it('should assert only status', function (done) {
var app = express();
app.get('/', function (req, res) {
res.send('hey');
});
request(app)
.get('/')
.expect(200)
.end(done)
});
});
describe('.expect(status, body[, fn])', function(){
it('should assert the response body and status', function(done){
var app = express();
app.get('/', function(req, res){
res.send('foo');
});
request(app)
.get('/')
.expect(200, 'foo', done)
});
describe("when the body argument is an empty string", function() {
it("should not quietly pass on failure", function(done) {
var app = express();
app.get('/', function(req, res){
res.send('foo');
});
request(app)
.get('/')
.expect(200, '')
.end(function(err, res){
err.message.should.equal('expected \'\' response body, got \'foo\'');
done();
});
});
});
});
describe('.expect(body[, fn])', function(){
it('should assert the response body', function(done){
var app = express();
app.set('json spaces', 0);
app.get('/', function(req, res){
res.send({ foo: 'bar' });
});
request(app)
.get('/')
.expect('hey')
.end(function(err, res){
err.message.should.equal('expected \'hey\' response body, got \'{"foo":"bar"}\'');
done();
});
});
it('should assert the status before the body', function (done) {
var app = express();
app.set('json spaces', 0);
app.get('/', function(req, res){
res.status(500).send({ message: 'something went wrong' });
});
request(app)
.get('/')
.expect(200)
.expect('hey')
.end(function(err, res){
err.message.should.equal('expected 200 \"OK"\, got 500 \"Internal Server Error\"');
done();
});
});
it('should assert the response text', function(done){
var app = express();
app.set('json spaces', 0);
app.get('/', function(req, res){
res.send({ foo: 'bar' });
});
request(app)
.get('/')
.expect('{"foo":"bar"}', done);
});
it('should assert the parsed response body', function(done){
var app = express();
app.set('json spaces', 0);
app.get('/', function(req, res){
res.send({ foo: 'bar' });
});
request(app)
.get('/')
.expect({ foo: 'baz' })
.end(function(err, res){
err.message.should.equal('expected { foo: \'baz\' } response body, got { foo: \'bar\' }');
request(app)
.get('/')
.expect({ foo: 'bar' })
.end(done);
});
});
it('should support regular expressions', function(done){
var app = express();
app.get('/', function(req, res){
res.send('foobar');
});
request(app)
.get('/')
.expect(/^bar/)
.end(function(err, res){
err.message.should.equal('expected body \'foobar\' to match /^bar/');
done();
});
});
it('should assert response body multiple times', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hey tj');
});
request(app)
.get('/')
.expect(/tj/)
.expect('hey')
.expect('hey tj')
.end(function (err, res) {
err.message.should.equal("expected 'hey' response body, got 'hey tj'");
done();
});
});
it('should assert response body multiple times with no exception', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hey tj');
});
request(app)
.get('/')
.expect(/tj/)
.expect(/^hey/)
.expect('hey tj', done);
});
});
describe('.expect(field, value[, fn])', function(){
it('should assert the header field presence', function(done){
var app = express();
app.get('/', function(req, res){
res.send({ foo: 'bar' });
});
request(app)
.get('/')
.expect('Content-Foo', 'bar')
.end(function(err, res){
err.message.should.equal('expected "Content-Foo" header field');
done();
});
});
it('should assert the header field value', function(done){
var app = express();
app.get('/', function(req, res){
res.send({ foo: 'bar' });
});
request(app)
.get('/')
.expect('Content-Type', 'text/html')
.end(function(err, res){
err.message.should.equal('expected "Content-Type" of "text/html", got "application/json; charset=utf-8"');
done();
});
});
it('should assert multiple fields', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hey');
});
request(app)
.get('/')
.expect('Content-Type', 'text/html; charset=utf-8')
.expect('Content-Length', '3')
.end(done);
});
it('should support regular expressions', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hey');
});
request(app)
.get('/')
.expect('Content-Type', /^application/)
.end(function(err){
err.message.should.equal('expected "Content-Type" matching /^application/, got "text/html; charset=utf-8"');
done();
});
});
it('should support numbers', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hey');
});
request(app)
.get('/')
.expect('Content-Length', 4)
.end(function(err){
err.message.should.equal('expected "Content-Length" of "4", got "3"');
done();
});
});
describe('handling arbitrary expect functions', function(){
var app, get;
before(function(){
app = express();
app.get('/', function(req, res){
res.send('hey');
});
});
beforeEach(function(){
get = request(app).get('/');
});
it('reports errors',function(done) {
get
.expect(function(res) {
throw new Error("failed")
})
.end(function(err) {
err.message.should.equal('failed');
done()
});
});
it('ensures truthy non-errors returned from asserts are not promoted to errors',function(done){
get
.expect(function(res) {
return "some descriptive error";
})
.end(function(err) {
should.not.exist(err);
done()
});
});
it('ensures truthy errors returned from asserts are throw to end',function(done){
get
.expect(function(res) {
return new Error("some descriptive error");
})
.end(function(err) {
err.message.should.equal("some descriptive error");
(err instanceof Error).should.be.true;
done();
});
});
it("doesn't create false negatives", function(done){
get
.expect(function(res) {})
.end(done);
});
it("handles multiple asserts", function(done){
var calls = [];
get
.expect(function(res) { calls[0] = 1 })
.expect(function(res) { calls[1] = 1 })
.expect(function(res) { calls[2] = 1 })
.end(function() {
var callCount = [0,1,2].reduce(function(count,i) {
return count + calls[i]
},0);
callCount.should.equal(3,"didn't see all assertions run");
done();
});
});
it("plays well with normal assertions - no false positives", function(done){
get
.expect(function(res) {})
.expect('Content-Type', /json/)
.end(function(err) {
err.message.should.match(/Content-Type/);
done();
});
});
it("plays well with normal assertions - no false negatives", function(done){
get
.expect(function(res) {})
.expect('Content-Type', /html/)
.expect(function(res) {})
.expect('Content-Type', /text/)
.end(done)
});
});
describe('handling multiple assertions per field', function(){
it('should work', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hey');
});
request(app)
.get('/')
.expect('Content-Type', /text/)
.expect('Content-Type', /html/)
.end(done);
});
it('should return an error if the first one fails', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hey');
});
request(app)
.get('/')
.expect('Content-Type', /bloop/)
.expect('Content-Type', /html/)
.end(function(err){
err.message.should.equal('expected "Content-Type" matching /bloop/, got "text/html; charset=utf-8"');
done();
});
});
it('should return an error if a middle one fails', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hey');
});
request(app)
.get('/')
.expect('Content-Type', /text/)
.expect('Content-Type', /bloop/)
.expect('Content-Type', /html/)
.end(function(err){
err.message.should.equal('expected "Content-Type" matching /bloop/, got "text/html; charset=utf-8"');
done();
});
});
it('should return an error if the last one fails', function(done){
var app = express();
app.get('/', function(req, res){
res.send('hey');
});
request(app)
.get('/')
.expect('Content-Type', /text/)
.expect('Content-Type', /html/)
.expect('Content-Type', /bloop/)
.end(function(err){
err.message.should.equal('expected "Content-Type" matching /bloop/, got "text/html; charset=utf-8"');
done();
});
});
});
});
});
describe('request.agent(app)', function(){
var app = express();
app.use(cookieParser());
app.get('/', function(req, res){
res.cookie('cookie', 'hey');
res.send();
});
app.get('/return', function(req, res){
if (req.cookies.cookie) res.send(req.cookies.cookie);
else res.send(':(')
});
var agent = request.agent(app);
it('should save cookies', function(done){
agent
.get('/')
.expect('set-cookie', 'cookie=hey; Path=/', done);
});
it('should send cookies', function(done){
agent
.get('/return')
.expect('hey', done);
});
});
describe(".<http verb> works as expected", function(){
it(".delete should work", function (done){
var app = express();
app.delete('/', function(req, res){
res.sendStatus(200);
});
request(app)
.delete('/')
.expect(200, done);
});
it(".del should work", function (done){
var app = express();
app.delete('/', function(req, res){
res.sendStatus(200);
});
request(app)
.del('/')
.expect(200, done);
});
it(".get should work", function (done){
var app = express();
app.get('/', function(req, res){
res.sendStatus(200);
});
request(app)
.get('/')
.expect(200, done);
});
it(".post should work", function (done){
var app = express();
app.post('/', function(req, res){
res.sendStatus(200);
});
request(app)
.post('/')
.expect(200, done);
});
it(".put should work", function (done){
var app = express();
app.put('/', function(req, res){
res.sendStatus(200);
});
request(app)
.put('/')
.expect(200, done);
});
});
describe('assert ordering by call order', function() {
it('should assert the body before status', function(done) {
var app = express();
app.set('json spaces', 0);
app.get('/', function(req, res) {
res.status(500).json({message: 'something went wrong'});
});
request(app)
.get('/')
.expect('hey')
.expect(200)
.end(function(err, res) {
err.message.should.equal('expected \'hey\' response body, got \'{"message":"something went wrong"}\'');
done();
});
});
it('should assert the status before body', function(done) {
var app = express();
app.set('json spaces', 0);
app.get('/', function(req, res) {
res.status(500).json({message: 'something went wrong'});
});
request(app)
.get('/')
.expect(200)
.expect('hey')
.end(function(err, res) {
err.message.should.equal('expected 200 "OK", got 500 "Internal Server Error"');
done();
});
});
it('should assert the fields before body and status', function(done) {
var app = express();
app.set('json spaces', 0);
app.get('/', function(req, res) {
res.status(200).json({hello: 'world'});
});
request(app)
.get('/')
.expect('content-type', /html/)
.expect('hello')
.end(function(err, res) {
err.message.should.equal('expected "content-type" matching /html/, got "application/json; charset=utf-8"');
done();
});
});
it('should call the expect function in order', function(done) {
var app = express();
app.get('/', function(req, res) {
res.status(200).json({});
});
request(app)
.get('/')
.expect(function(res) {
res.body.first = 1;
})
.expect(function(res) {
(res.body.first === 1).should.be.true;
res.body.second = 2;
})
.end(function(err, res) {
if (err) return done(err);
(res.body.first === 1).should.be.true;
(res.body.second === 2).should.be.true;
done();
});
});
it('should call expect(fn) and expect(status, fn) in order', function(done) {
var app = express();
app.get('/', function(req, res) {
res.status(200).json({});
});
request(app)
.get('/')
.expect(function(res) {
res.body.first = 1;
})
.expect(200, function(err, res) {
(err === null).should.be.true;
(res.body.first === 1).should.be.true;
done();
});
});
it('should call expect(fn) and expect(header,value) in order', function(done) {
var app = express();
app.get('/', function(req, res) {
res
.set('X-Some-Header', 'Some value')
.send();
});
request(app)
.get('/')
.expect('X-Some-Header', 'Some value')
.expect(function(res) {
res.headers['x-some-header'] = '';
})
.expect('X-Some-Header', '')
.end(done);
});
it('should call expect(fn) and expect(body) in order', function(done) {
var app = express();
app.get('/', function(req, res) {
res.json({somebody: 'some body value'});
});
request(app)
.get('/')
.expect(/some body value/)
.expect(function(res) {
res.body.somebody = 'nobody';
})
.expect(/some body value/) // res.text should not be modified.
.expect({somebody: 'nobody'})
.expect(function(res) {
res.text = 'gone';
})
.expect('gone')
.expect(/gone/)
.expect({somebody: 'nobody'}) // res.body should not be modified
.expect('gone', done);
});
});
describe("request.get(url).query(vals) works as expected", function(){
it("normal single query string value works", function(done) {
var app = express();
app.get('/', function(req, res){
res.status(200).send(req.query.val);
});
request(app)
.get('/')
.query({val: "Test1"})
.expect(200, function(err, res) {
res.text.should.be.equal('Test1');
done();
});
});
it("array query string value works", function(done) {
var app = express();
app.get('/', function(req, res){
res.status(200).send(Array.isArray(req.query.val));
});
request(app)
.get('/')
.query({'val[]': ["Test1", "Test2"]})
.expect(200, function(err, res) {
res.req.path.should.be.equal('/?val%5B%5D=Test1&val%5B%5D=Test2');
res.text.should.be.equal('true');
done();
});
});
it("array query string value work even with single value", function(done) {
var app = express();
app.get('/', function(req, res){
res.status(200).send(Array.isArray(req.query.val));
});
request(app)
.get('/')
.query({'val[]': ["Test1"]})
.expect(200, function(err, res) {
res.req.path.should.be.equal('/?val%5B%5D=Test1');
res.text.should.be.equal('true');
done();
});
});
it("object query string value works", function(done) {
var app = express();
app.get('/', function(req, res){
res.status(200).send(req.query.val.test);
});
request(app)
.get('/')
.query({val: { test: 'Test1' } })
.expect(200, function(err, res) {
res.text.should.be.equal('Test1');
done();
});
});
});