koa-lite/test/context/cookies.js

111 lines
2.4 KiB
JavaScript
Raw Normal View History

2013-11-15 18:03:40 +00:00
'use strict';
const request = require('supertest');
2015-10-13 06:19:42 +00:00
const Koa = require('../..');
2013-11-15 18:03:40 +00:00
describe('ctx.cookies.set()', () => {
it('should set an unsigned cookie', done => {
2015-10-13 06:19:42 +00:00
const app = new Koa();
2013-11-15 18:03:40 +00:00
app.use((ctx, next) => {
ctx.cookies.set('name', 'jon');
ctx.status = 204;
2015-10-12 20:36:41 +00:00
});
2013-11-15 18:03:40 +00:00
const server = app.listen();
2013-11-15 18:03:40 +00:00
request(server)
.get('/')
.expect(204)
.end((err, res) => {
if (err) return done(err);
2013-11-15 18:03:40 +00:00
res.headers['set-cookie'].some(cookie => /^name=/.test(cookie)).should.be.ok;
2013-11-15 18:03:40 +00:00
done();
});
2015-10-12 20:36:41 +00:00
});
2013-11-15 18:03:40 +00:00
describe('with .signed', () => {
describe('when no .keys are set', () => {
it('should error', done => {
2015-10-13 06:19:42 +00:00
const app = new Koa();
2013-11-15 18:03:40 +00:00
app.use((ctx, next) => {
2013-11-15 18:03:40 +00:00
try {
ctx.cookies.set('foo', 'bar', { signed: true });
2013-11-15 18:03:40 +00:00
} catch (err) {
ctx.body = err.message;
2013-11-15 18:03:40 +00:00
}
});
request(app.listen())
.get('/')
.expect('.keys required for signed cookies', done);
2015-10-12 20:36:41 +00:00
});
});
2013-11-15 18:03:40 +00:00
it('should send a signed cookie', done => {
2015-10-13 06:19:42 +00:00
const app = new Koa();
2013-11-15 18:03:40 +00:00
app.keys = ['a', 'b'];
app.use((ctx, next) => {
ctx.cookies.set('name', 'jon', { signed: true });
ctx.status = 204;
2015-10-12 20:36:41 +00:00
});
2013-11-15 18:03:40 +00:00
const server = app.listen();
2013-11-15 18:03:40 +00:00
request(server)
.get('/')
.expect(204)
.end((err, res) => {
if (err) return done(err);
2013-11-15 18:03:40 +00:00
const cookies = res.headers['set-cookie'];
2013-11-15 18:03:40 +00:00
cookies.some(cookie => /^name=/.test(cookie)).should.be.ok;
2013-11-15 18:03:40 +00:00
cookies.some(cookie => /^name\.sig=/.test(cookie)).should.be.ok;
2013-11-15 18:03:40 +00:00
done();
});
2015-10-12 20:36:41 +00:00
});
});
2015-12-02 15:13:01 +00:00
describe('with secure', () => {
it('should get secure from request', done => {
const app = new Koa();
app.proxy = true;
app.keys = ['a', 'b'];
app.use(ctx => {
ctx.cookies.set('name', 'jon', { signed: true });
ctx.status = 204;
});
const server = app.listen();
request(server)
.get('/')
.set('x-forwarded-proto', 'https') // mock secure
.expect(204)
.end((err, res) => {
if (err) return done(err);
const cookies = res.headers['set-cookie'];
cookies.some(cookie => /^name=/.test(cookie)).should.be.ok;
cookies.some(cookie => /^name\.sig=/.test(cookie)).should.be.ok;
cookies.every(cookie => /secure/.test(cookie)).should.be.ok;
done();
});
});
});
2015-10-12 20:36:41 +00:00
});