You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
282 lines
7.5 KiB
282 lines
7.5 KiB
var koa = require('koa');
|
|
var http = require('http');
|
|
var chai = require('chai');
|
|
var cors = require('../');
|
|
var superagent = require('superagent');
|
|
|
|
var app, server;
|
|
|
|
describe('cors()', function() {
|
|
|
|
beforeEach(function() {
|
|
setupServer();
|
|
});
|
|
|
|
it('should set "Access-Control-Allow-Origin" to "*"', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Origin')).to.equal('*');
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should set "Access-Control-Allow-Origin" to "example.org"', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.set('Origin', 'example.org')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Origin')).to.equal('example.org');
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should update "Access-Control-Allow-Origin" for each request', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Origin')).to.equal('*');
|
|
|
|
superagent.get('http://localhost:3000')
|
|
.set('Origin', 'localhost')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Origin')).to.equal('localhost');
|
|
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
it('should not set "Access-Control-Expose-Headers"', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Expose-Headers')).to.not.exist;
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should not set "Access-Control-Allow-Max-Age"', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Max-Age')).to.not.exist;
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should not set "Access-Control-Allow-Methods"', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Methods')).to.equal('GET,HEAD,PUT,POST,DELETE');
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should not set "Access-Control-Allow-Credentials"', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Credentials')).to.not.exist;
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should set "Access-Control-Allow-Headers" to "Accept"', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.set('Access-Control-Request-Headers', 'Accept')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Headers')).to.equal('Accept');
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should set "Access-Control-Allow-Headers" to "X-Foo"', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.set('Access-Control-Request-Headers', 'X-Foo')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Headers')).to.equal('X-Foo');
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should not fix value of "Access-Control-Allow-Headers"', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.set('Access-Control-Request-Headers', 'X-Foo')
|
|
.end(function() {
|
|
superagent.get('http://localhost:3000')
|
|
.set('Access-Control-Request-Headers', 'X-Bar')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Headers')).to.equal('X-Bar');
|
|
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
describe('cors({ origin: true })', function() {
|
|
|
|
beforeEach(function() {
|
|
setupServer({ origin: true });
|
|
});
|
|
|
|
it('should set "Access-Control-Allow-Origin" to "*"', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Origin')).to.equal('*');
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should set "Access-Control-Allow-Origin" to "example.org"', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.set('Origin', 'example.org')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Origin')).to.equal('example.org');
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
describe('cors({ origin: false })', function() {
|
|
|
|
beforeEach(function() {
|
|
setupServer({ origin: false });
|
|
});
|
|
|
|
it('should not set any "Access-Control-Allow-*" header', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Origin')).to.not.exist;
|
|
chai.expect(response.get('Access-Control-Allow-Methods')).to.not.exist;
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
describe('cors({ origin: [function]})', function() {
|
|
|
|
beforeEach(function() {
|
|
var originWhiteList = ["localhost", "otherhost.com"];
|
|
|
|
var originFunction = function(req) {
|
|
var origin = req.header.origin;
|
|
if (originWhiteList.indexOf(origin) !== -1) {
|
|
return origin;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
setupServer({ origin: originFunction });
|
|
});
|
|
|
|
it('should not set any "Access-Control-Allow-*" header', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.set('Origin', 'example.com')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Origin')).to.not.exist;
|
|
chai.expect(response.get('Access-Control-Allow-Methods')).to.not.exist;
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should set "Access-Control-Allow-Origin" to "otherhost.com"', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.set('Origin', 'otherhost.com')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Origin')).to.equal('otherhost.com');
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should set "Access-Control-Allow-Origin" to "localhost"', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.set('Origin', 'localhost')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Allow-Origin')).to.equal('localhost');
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
describe('cors({ expose: "Acccept,Authorization" })', function() {
|
|
|
|
beforeEach(function() {
|
|
setupServer({ expose: 'Accept,Authorization' });
|
|
});
|
|
|
|
it('should set "Access-Control-Expose-Headers" header', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Expose-Headers'))
|
|
.to.equal('Accept,Authorization');
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
describe('cors({ expose: ["Acccept", "Authorization"] })', function() {
|
|
|
|
beforeEach(function() {
|
|
setupServer({ expose: ['Accept', 'Authorization'] });
|
|
});
|
|
|
|
it('should set "Access-Control-Expose-Headers" header', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Expose-Headers'))
|
|
.to.equal('Accept,Authorization');
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
describe('cors({ maxAge: 60 * 24 })', function() {
|
|
|
|
beforeEach(function() {
|
|
setupServer({ maxAge: 60 * 24 });
|
|
});
|
|
|
|
it('should set "Access-Control-Max-Age" header', function(done) {
|
|
superagent.get('http://localhost:3000')
|
|
.end(function(response) {
|
|
chai.expect(response.get('Access-Control-Max-Age')).to.equal('1440');
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
afterEach(function() {
|
|
server.close();
|
|
});
|
|
|
|
function setupServer(options) {
|
|
app = koa();
|
|
|
|
app.use(cors(options));
|
|
|
|
app.use(function *(next) {
|
|
this.body = 'Hello';
|
|
});
|
|
|
|
server = http.createServer(app.callback()).listen(3000);
|
|
}
|
|
|