四好公路
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

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);
}