mirror of
https://github.com/scratchfoundation/restify-cors-middleware.git
synced 2024-12-20 21:02:33 -05:00
130 lines
4.5 KiB
JavaScript
130 lines
4.5 KiB
JavaScript
//
|
|
// Based on the spec at http://www.w3.org/TR/cors/
|
|
// The test numbers correspond to steps in the specification
|
|
//
|
|
|
|
var request = require('supertest');
|
|
var should = require('should');
|
|
var test = require('./test');
|
|
|
|
var METHOD_NOT_ALLOWED = 405;
|
|
|
|
describe('CORS: preflight requests', function() {
|
|
|
|
it('6.2.1 Does not set headers if Origin is missing', function(done) {
|
|
var server = test.corsServer({
|
|
origins: ['http://api.myapp.com', 'http://www.myapp.com']
|
|
});
|
|
request(server)
|
|
.options('/test')
|
|
.expect(test.noHeader('access-control-allow-origin'))
|
|
.expect(METHOD_NOT_ALLOWED)
|
|
.end(done);
|
|
});
|
|
|
|
it('6.2.2 Does not set headers if Origin does not match', function(done) {
|
|
var server = test.corsServer({
|
|
origins: ['http://api.myapp.com', 'http://www.myapp.com']
|
|
});
|
|
request(server)
|
|
.options('/test')
|
|
.set('Origin', 'http://random-website.com')
|
|
.expect(test.noHeader('access-control-allow-origin'))
|
|
.expect(METHOD_NOT_ALLOWED)
|
|
.end(done);
|
|
});
|
|
|
|
it('6.2.3 Does not set headers if Access-Control-Request-Method is missing', function(done) {
|
|
var server = test.corsServer({
|
|
origins: ['http://api.myapp.com', 'http://www.myapp.com']
|
|
});
|
|
request(server)
|
|
.options('/test')
|
|
.set('Origin', 'http://api.myapp.com')
|
|
.expect(test.noHeader('access-control-allow-origin'))
|
|
.expect(test.noHeader('access-control-allow-methods'))
|
|
.expect(METHOD_NOT_ALLOWED)
|
|
.end(done);
|
|
});
|
|
|
|
xit('6.2.4 Does not terminate if parsing of Access-Control-Request-Headers fails', function(done) {
|
|
done();
|
|
});
|
|
|
|
xit('6.2.5 Always matches Access-Control-Request-Method (spec says it is acceptable)', function(done) {
|
|
done();
|
|
});
|
|
|
|
it('6.2.6 Does not set headers if Access-Control-Request-Headers does not match', function(done) {
|
|
var server = test.corsServer({
|
|
origins: ['http://api.myapp.com', 'http://www.myapp.com'],
|
|
acceptHeaders: ['API-Token']
|
|
});
|
|
request(server)
|
|
.options('/test')
|
|
.set('Origin', 'http://api.myapp.com')
|
|
.set('Access-Control-Request-Headers', 'Weird-Header')
|
|
.expect(test.noHeader('access-control-allow-origin'))
|
|
.expect(test.noHeader('access-control-allow-methods'))
|
|
.expect(test.noHeader('access-control-allow-headers'))
|
|
.expect(METHOD_NOT_ALLOWED)
|
|
.end(done);
|
|
});
|
|
|
|
it('6.2.7 Set the Allow-Origin header if it matches', function(done) {
|
|
var server = test.corsServer({
|
|
origins: ['http://api.myapp.com', 'http://www.myapp.com']
|
|
});
|
|
request(server)
|
|
.options('/test')
|
|
.set('Origin', 'http://api.myapp.com')
|
|
.set('Access-Control-Request-Method', 'GET')
|
|
.expect('Access-Control-Allow-Origin', 'http://api.myapp.com')
|
|
.expect(204)
|
|
.end(done);
|
|
});
|
|
|
|
it('6.2.8 Set the Access-Control-Max-Age header if a max age is provided', function(done) {
|
|
var server = test.corsServer({
|
|
preflightMaxAge: 5,
|
|
origins: ['http://api.myapp.com', 'http://www.myapp.com']
|
|
});
|
|
request(server)
|
|
.options('/test')
|
|
.set('Origin', 'http://api.myapp.com')
|
|
.set('Access-Control-Request-Method', 'GET')
|
|
.expect('Access-Control-Max-Age', '5')
|
|
.expect(204)
|
|
.end(done);
|
|
});
|
|
|
|
it('6.2.9 Set the Allow-Method header', function(done) {
|
|
var server = test.corsServer({
|
|
origins: ['http://api.myapp.com', 'http://www.myapp.com']
|
|
});
|
|
request(server)
|
|
.options('/test')
|
|
.set('Origin', 'http://api.myapp.com')
|
|
.set('Access-Control-Request-Method', 'GET')
|
|
.expect('Access-Control-Allow-Methods', 'GET, OPTIONS')
|
|
.expect(204)
|
|
.end(done);
|
|
});
|
|
|
|
it('6.2.10 Set the Allow-Headers to all configured custom headers', function(done) {
|
|
var server = test.corsServer({
|
|
origins: ['http://api.myapp.com', 'http://www.myapp.com'],
|
|
allowHeaders: ['HeaderA']
|
|
});
|
|
request(server)
|
|
.options('/test')
|
|
.set('Origin', 'http://api.myapp.com')
|
|
.set('Access-Control-Request-Method', 'GET')
|
|
.expect('Access-Control-Allow-Headers', /accept-version/) // restify defaults
|
|
.expect('Access-Control-Allow-Headers', /x-api-version/) // restify defaults
|
|
.expect('Access-Control-Allow-Headers', /HeaderA/) // custom header
|
|
.expect(204)
|
|
.end(done);
|
|
});
|
|
|
|
});
|