diff --git a/test/app/middleware/session.test.js b/test/app/middleware/session.test.js index b7edbbc..6b49df1 100644 --- a/test/app/middleware/session.test.js +++ b/test/app/middleware/session.test.js @@ -92,6 +92,43 @@ describe('test/app/middlewares/session.test.js', () => { }); }); + describe('session maxage', () => { + before(() => { + app = mm.app({ baseDir: 'session-maxage-session' }); + return app.ready(); + }); + beforeEach(() => { + agent = request.agent(app.callback()); + }); + after(() => app.close()); + + it('should work with maxage=ession', async () => { + await agent + .get('/set?foo=bar') + .set('user-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36') + .set('x-forwarded-proto', 'https') + .expect(200) + .expect({ foo: 'bar' }) + .expect(res => { + const cookie = res.headers['set-cookie'].join('|'); + assert(!cookie.includes('expires')); + assert(!cookie.includes('max-age')); + }); + }); + + it('should ctx.session.maxAge=session work', async () => { + await agent + .get('/maxAge?maxAge=session') + .expect(200) + .expect(res => { + const cookie = res.headers['set-cookie'].join(';'); + assert(cookie.match(/EGG_SESS=.*?;/)); + assert(!cookie.includes('expires')); + assert(!cookie.includes('max-age')); + }); + }); + }); + [ 'cookie-session', 'memory-session', @@ -195,6 +232,7 @@ describe('test/app/middlewares/session.test.js', () => { cookie = res.headers['set-cookie'].join(';'); assert(cookie.match(/EGG_SESS=.*?;/)); assert(cookie.match(/expires=/)); + assert(cookie.match(/max-age=/)); }); yield sleep(200); diff --git a/test/fixtures/session-maxage-session/app/controller/home.js b/test/fixtures/session-maxage-session/app/controller/home.js new file mode 100644 index 0000000..1b97026 --- /dev/null +++ b/test/fixtures/session-maxage-session/app/controller/home.js @@ -0,0 +1,25 @@ +'use strict'; + +exports.get = function* (ctx) { + ctx.body = ctx.session; +}; + +exports.set = function* (ctx) { + ctx.session = ctx.query; + ctx.body = ctx.session; +}; + +exports.setKey = function* (ctx) { + ctx.session.key = ctx.query.key; + ctx.body = ctx.session; +}; + +exports.remove = function* (ctx) { + ctx.session = null; + ctx.body = ctx.session; +}; + +exports.maxAge = function* (ctx) { + ctx.session.maxAge = this.query.maxAge; + ctx.body = ctx.session; +}; diff --git a/test/fixtures/session-maxage-session/app/router.js b/test/fixtures/session-maxage-session/app/router.js new file mode 100644 index 0000000..d5938ed --- /dev/null +++ b/test/fixtures/session-maxage-session/app/router.js @@ -0,0 +1,9 @@ +'use strict'; + +module.exports = function(app) { + app.get('/get', 'home.get'); + app.get('/set', 'home.set'); + app.get('/setKey', 'home.setKey'); + app.get('/remove', 'home.remove'); + app.get('/maxAge', 'home.maxAge'); +}; diff --git a/test/fixtures/session-maxage-session/config/config.default.js b/test/fixtures/session-maxage-session/config/config.default.js new file mode 100644 index 0000000..aa6ff99 --- /dev/null +++ b/test/fixtures/session-maxage-session/config/config.default.js @@ -0,0 +1,6 @@ +'use strict'; + +exports.keys = 'keys'; +exports.session = { + maxAge: 'session', +}; diff --git a/test/fixtures/session-maxage-session/package.json b/test/fixtures/session-maxage-session/package.json new file mode 100644 index 0000000..9f1ec46 --- /dev/null +++ b/test/fixtures/session-maxage-session/package.json @@ -0,0 +1,3 @@ +{ + "name": "httponly-false-session" +}