mirror of
https://github.com/expressjs/express.git
synced 2026-02-21 19:41:36 +00:00
Throw on invalid status codes (#4212)
* check status code is integer, or string integer, in range * fix tests, update jsdoc comment for res.status * throw if number is string * narrow valid range to between 1xx and 5xx * disambiguate the error message * update skipped tests, remove invalid string test * remove invalid float test * fixup! remove invalid float test * fix invalid range tests error assertions * remove unused deprecate function * add test to assert on 200.00 coming through as 200 this is the behavior of node's underlying HTTP module * revert back to throwing only on > 999 and < 100 * update implementation for > 999 * add test for 700 status code * update history with change * update jsdoc * clarify jsdoc comment * one more round of jsdoc * update 501 test * add invalid status code test for res.sendStatus * add test describe block for valid range * fixup! add test describe block for valid range * reduce the describe nesting * switch to testing status 100, to avoid 100-continue behavior * fix 900 test * stringify code in thrown RangeError message * remove accidentally duplicated res.status method * fix error range message Co-authored-by: Chris de Almeida <ctcpip@users.noreply.github.com> * update sendStatus invalid code test to use sendStatus --------- Co-authored-by: Chris de Almeida <ctcpip@users.noreply.github.com>
This commit is contained in:
@@ -28,5 +28,17 @@ describe('res', function () {
|
||||
.get('/')
|
||||
.expect(599, '599', done);
|
||||
})
|
||||
|
||||
it('should raise error for invalid status code', function (done) {
|
||||
var app = express()
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.sendStatus(undefined).end()
|
||||
})
|
||||
|
||||
request(app)
|
||||
.get('/')
|
||||
.expect(500, /TypeError: Invalid status code/, done)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,59 +1,36 @@
|
||||
'use strict'
|
||||
|
||||
var express = require('../')
|
||||
var request = require('supertest')
|
||||
|
||||
var isIoJs = process.release
|
||||
? process.release.name === 'io.js'
|
||||
: ['v1.', 'v2.', 'v3.'].indexOf(process.version.slice(0, 3)) !== -1
|
||||
const express = require('../.');
|
||||
const request = require('supertest');
|
||||
|
||||
describe('res', function () {
|
||||
describe('.status(code)', function () {
|
||||
// This test fails in node 4.0.0
|
||||
// https://github.com/expressjs/express/pull/2237/checks
|
||||
// As this will all be removed when https://github.com/expressjs/express/pull/4212
|
||||
// lands I am skipping for now and we can delete with that PR
|
||||
describe.skip('when "code" is undefined', function () {
|
||||
it('should raise error for invalid status code', function (done) {
|
||||
|
||||
it('should set the status code when valid', function (done) {
|
||||
var app = express();
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.status(200).end();
|
||||
});
|
||||
|
||||
request(app)
|
||||
.get('/')
|
||||
.expect(200, done);
|
||||
});
|
||||
|
||||
describe('accept valid ranges', function() {
|
||||
// not testing w/ 100, because that has specific meaning and behavior in Node as Expect: 100-continue
|
||||
it('should set the response status code to 101', function (done) {
|
||||
var app = express()
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.status(undefined).end()
|
||||
res.status(101).end()
|
||||
})
|
||||
|
||||
request(app)
|
||||
.get('/')
|
||||
.expect(500, /Invalid status code/, function (err) {
|
||||
if (isIoJs) {
|
||||
done(err ? null : new Error('expected error'))
|
||||
} else {
|
||||
done(err)
|
||||
}
|
||||
})
|
||||
.expect(101, done)
|
||||
})
|
||||
})
|
||||
|
||||
describe.skip('when "code" is null', function () {
|
||||
it('should raise error for invalid status code', function (done) {
|
||||
var app = express()
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.status(null).end()
|
||||
})
|
||||
|
||||
request(app)
|
||||
.get('/')
|
||||
.expect(500, /Invalid status code/, function (err) {
|
||||
if (isIoJs) {
|
||||
done(err ? null : new Error('expected error'))
|
||||
} else {
|
||||
done(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('when "code" is 201', function () {
|
||||
it('should set the response status code to 201', function (done) {
|
||||
var app = express()
|
||||
|
||||
@@ -65,9 +42,7 @@ describe('res', function () {
|
||||
.get('/')
|
||||
.expect(201, done)
|
||||
})
|
||||
})
|
||||
|
||||
describe('when "code" is 302', function () {
|
||||
it('should set the response status code to 302', function (done) {
|
||||
var app = express()
|
||||
|
||||
@@ -79,9 +54,7 @@ describe('res', function () {
|
||||
.get('/')
|
||||
.expect(302, done)
|
||||
})
|
||||
})
|
||||
|
||||
describe('when "code" is 403', function () {
|
||||
it('should set the response status code to 403', function (done) {
|
||||
var app = express()
|
||||
|
||||
@@ -93,9 +66,7 @@ describe('res', function () {
|
||||
.get('/')
|
||||
.expect(403, done)
|
||||
})
|
||||
})
|
||||
|
||||
describe('when "code" is 501', function () {
|
||||
it('should set the response status code to 501', function (done) {
|
||||
var app = express()
|
||||
|
||||
@@ -107,100 +78,129 @@ describe('res', function () {
|
||||
.get('/')
|
||||
.expect(501, done)
|
||||
})
|
||||
})
|
||||
|
||||
describe('when "code" is "410"', function () {
|
||||
it('should set the response status code to 410', function (done) {
|
||||
it('should set the response status code to 700', function (done) {
|
||||
var app = express()
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.status('410').end()
|
||||
res.status(700).end()
|
||||
})
|
||||
|
||||
request(app)
|
||||
.get('/')
|
||||
.expect(410, done)
|
||||
.expect(700, done)
|
||||
})
|
||||
})
|
||||
|
||||
describe.skip('when "code" is 410.1', function () {
|
||||
it('should set the response status code to 410', function (done) {
|
||||
it('should set the response status code to 800', function (done) {
|
||||
var app = express()
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.status(410.1).end()
|
||||
res.status(800).end()
|
||||
})
|
||||
|
||||
request(app)
|
||||
.get('/')
|
||||
.expect(410, function (err) {
|
||||
if (isIoJs) {
|
||||
done(err ? null : new Error('expected error'))
|
||||
} else {
|
||||
done(err)
|
||||
}
|
||||
})
|
||||
.expect(800, done)
|
||||
})
|
||||
})
|
||||
|
||||
describe.skip('when "code" is 1000', function () {
|
||||
it('should raise error for invalid status code', function (done) {
|
||||
it('should set the response status code to 900', function (done) {
|
||||
var app = express()
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.status(1000).end()
|
||||
res.status(900).end()
|
||||
})
|
||||
|
||||
request(app)
|
||||
.get('/')
|
||||
.expect(500, /Invalid status code/, function (err) {
|
||||
if (isIoJs) {
|
||||
done(err ? null : new Error('expected error'))
|
||||
} else {
|
||||
done(err)
|
||||
}
|
||||
})
|
||||
.expect(900, done)
|
||||
})
|
||||
})
|
||||
|
||||
describe.skip('when "code" is 99', function () {
|
||||
it('should raise error for invalid status code', function (done) {
|
||||
var app = express()
|
||||
describe('invalid status codes', function () {
|
||||
it('should raise error for status code below 100', function (done) {
|
||||
var app = express();
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.status(99).end()
|
||||
})
|
||||
res.status(99).end();
|
||||
});
|
||||
|
||||
request(app)
|
||||
.get('/')
|
||||
.expect(500, /Invalid status code/, function (err) {
|
||||
if (isIoJs) {
|
||||
done(err ? null : new Error('expected error'))
|
||||
} else {
|
||||
done(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
.expect(500, /Invalid status code/, done);
|
||||
});
|
||||
|
||||
describe.skip('when "code" is -401', function () {
|
||||
it('should raise error for invalid status code', function (done) {
|
||||
var app = express()
|
||||
it('should raise error for status code above 999', function (done) {
|
||||
var app = express();
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.status(-401).end()
|
||||
})
|
||||
res.status(1000).end();
|
||||
});
|
||||
|
||||
request(app)
|
||||
.get('/')
|
||||
.expect(500, /Invalid status code/, function (err) {
|
||||
if (isIoJs) {
|
||||
done(err ? null : new Error('expected error'))
|
||||
} else {
|
||||
done(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
.expect(500, /Invalid status code/, done);
|
||||
});
|
||||
|
||||
it('should raise error for non-integer status codes', function (done) {
|
||||
var app = express();
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.status(200.1).end();
|
||||
});
|
||||
|
||||
request(app)
|
||||
.get('/')
|
||||
.expect(500, /Invalid status code/, done);
|
||||
});
|
||||
|
||||
it('should raise error for undefined status code', function (done) {
|
||||
var app = express();
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.status(undefined).end();
|
||||
});
|
||||
|
||||
request(app)
|
||||
.get('/')
|
||||
.expect(500, /Invalid status code/, done);
|
||||
});
|
||||
|
||||
it('should raise error for null status code', function (done) {
|
||||
var app = express();
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.status(null).end();
|
||||
});
|
||||
|
||||
request(app)
|
||||
.get('/')
|
||||
.expect(500, /Invalid status code/, done);
|
||||
});
|
||||
|
||||
it('should raise error for string status code', function (done) {
|
||||
var app = express();
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.status("200").end();
|
||||
});
|
||||
|
||||
request(app)
|
||||
.get('/')
|
||||
.expect(500, /Invalid status code/, done);
|
||||
});
|
||||
|
||||
it('should raise error for NaN status code', function (done) {
|
||||
var app = express();
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.status(NaN).end();
|
||||
});
|
||||
|
||||
request(app)
|
||||
.get('/')
|
||||
.expect(500, /Invalid status code/, done);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user