diff --git a/.autod.conf.js b/.autod.conf.js index b2039bd..07768d8 100644 --- a/.autod.conf.js +++ b/.autod.conf.js @@ -8,7 +8,6 @@ module.exports = { 'benchmark', ], devdep: [ - 'egg', 'egg-ci', 'egg-bin', 'autod', diff --git a/.travis.yml b/.travis.yml index d680922..0458ab9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ sudo: false language: node_js node_js: - - '6' - - '7' + - '8' + - '9' install: - npm i npminstall && npminstall script: diff --git a/app/extend/application.js b/app/extend/application.js index 944603f..d54eede 100644 --- a/app/extend/application.js +++ b/app/extend/application.js @@ -38,6 +38,9 @@ module.exports = { assert(typeof store.get === 'function', 'store.get must be function'); assert(typeof store.set === 'function', 'store.set must be function'); assert(typeof store.destroy === 'function', 'store.destroy must be function'); + store.get = this.toAsyncFunction(store.get); + store.set = this.toAsyncFunction(store.set); + store.destroy = this.toAsyncFunction(store.destroy); this.config.session.store = store; }, diff --git a/package.json b/package.json index 4e7718c..24f32f1 100644 --- a/package.json +++ b/package.json @@ -22,22 +22,22 @@ "cookie" ], "dependencies": { - "koa-session": "^4.0.0" + "koa-session": "^5.5.0" }, "devDependencies": { - "autod": "^2.7.1", - "egg": "^1.0.0-rc.1", - "egg-bin": "^2.2.3", - "egg-ci": "^1.2.0", - "egg-mock": "^3.0.1", + "autod": "^2.10.1", + "egg": "next", + "egg-bin": "^4.3.5", + "egg-ci": "^1.8.0", + "egg-mock": "^3.13.1", "egg-redis": "^1.0.1", - "eslint": "^3.16.1", - "eslint-config-egg": "^3.2.0", - "mz-modules": "^1.0.0", + "eslint": "^4.10.0", + "eslint-config-egg": "^5.1.1", + "mz-modules": "^2.0.0", "supertest": "^3.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=8.0.0" }, "scripts": { "lint": "eslint .", @@ -48,7 +48,7 @@ "autod": "autod" }, "ci": { - "version": "6, 7", + "version": "8, 9", "services": "redis-server", "type": "travis" }, diff --git a/test/app/middleware/session.test.js b/test/app/middleware/session.test.js index 3d8a755..cbaa2a1 100644 --- a/test/app/middleware/session.test.js +++ b/test/app/middleware/session.test.js @@ -24,40 +24,41 @@ describe('test/app/middlewares/session.test.js', () => { it('should get sessionStore', function* () { mm.empty(app.sessionStore, 'set'); yield agent - .get('/set?foo=bar') - .expect(200) - .expect({ foo: 'bar' }) - .expect('set-cookie', /EGG_SESS=.*?;/); + .get('/set?foo=bar') + .expect(200) + .expect({ foo: 'bar' }) + .expect('set-cookie', /EGG_SESS=.*?;/); yield agent.get('/get') - .expect(200) - .expect({}); + .expect(200) + .expect({}); }); it('should session store can be change', function* () { mm(app.config, 'env', 'local'); yield agent - .get('/set?foo=bar') - .expect(200) - .expect({ foo: 'bar' }) - .expect('set-cookie', /EGG_SESS=.*?;/); + .get('/set?foo=bar') + .expect(200) + .expect({ foo: 'bar' }) + .expect('set-cookie', /EGG_SESS=.*?;/); yield agent.get('/get') - .expect(200) - .expect({ foo: 'bar' }); + .expect(200) + .expect({ foo: 'bar' }); app.sessionStore = null; yield agent.get('/get') - .expect(200) - .expect({}); + .expect(200) + .expect({}); }); }); [ 'cookie-session', 'memory-session', + 'memory-session-generator', 'redis-session', ].forEach(name => { describe(name, () => { @@ -75,85 +76,85 @@ describe('test/app/middlewares/session.test.js', () => { it('should get empty session and do not set cookie when session not populated', function* () { yield agent - .get('/get') - .expect(200) - .expect({}) - .expect(res => { - assert(!res.header['set-cookie'].join('').match(/EGG_SESS/)); - }); + .get('/get') + .expect(200) + .expect({}) + .expect(res => { + assert(!res.header['set-cookie'].join('').match(/EGG_SESS/)); + }); }); it('should ctx.session= change the session', function* () { yield agent - .get('/set?foo=bar') - .expect(200) - .expect({ foo: 'bar' }) - .expect('set-cookie', /EGG_SESS=.*?;/); + .get('/set?foo=bar') + .expect(200) + .expect({ foo: 'bar' }) + .expect('set-cookie', /EGG_SESS=.*?;/); }); it('should ctx.session.key= change the session', function* () { yield agent - .get('/set?key=foo&foo=bar') - .expect(200) - .expect({ key: 'foo', foo: 'bar' }) - .expect('set-cookie', /EGG_SESS=.*?;/); + .get('/set?key=foo&foo=bar') + .expect(200) + .expect({ key: 'foo', foo: 'bar' }) + .expect('set-cookie', /EGG_SESS=.*?;/); yield agent - .get('/setKey?key=bar') - .expect(200) - .expect({ key: 'bar', foo: 'bar' }) - .expect('set-cookie', /EGG_SESS=.*?;/); + .get('/setKey?key=bar') + .expect(200) + .expect({ key: 'bar', foo: 'bar' }) + .expect('set-cookie', /EGG_SESS=.*?;/); }); it('should ctx.session=null remove the session', function* () { yield agent - .get('/set?key=foo&foo=bar') - .expect(200) - .expect({ key: 'foo', foo: 'bar' }) - .expect('set-cookie', /EGG_SESS=.*?;/); + .get('/set?key=foo&foo=bar') + .expect(200) + .expect({ key: 'foo', foo: 'bar' }) + .expect('set-cookie', /EGG_SESS=.*?;/); yield agent - .get('/remove') - .expect(204) - .expect('set-cookie', /EGG_SESS=;/); + .get('/remove') + .expect(204) + .expect('set-cookie', /EGG_SESS=;/); yield agent - .get('/get') - .expect(200) - .expect({}); + .get('/get') + .expect(200) + .expect({}); }); it('should ctx.session.maxAge= change maxAge', function* () { yield agent - .get('/set?key=foo&foo=bar') - .expect(200) - .expect({ key: 'foo', foo: 'bar' }) - .expect('set-cookie', /EGG_SESS=.*?;/); + .get('/set?key=foo&foo=bar') + .expect(200) + .expect({ key: 'foo', foo: 'bar' }) + .expect('set-cookie', /EGG_SESS=.*?;/); let cookie; yield agent - .get('/maxAge?maxAge=100') - .expect(200) - .expect({ key: 'foo', foo: 'bar' }) - .expect(res => { - cookie = res.headers['set-cookie'].join(';'); - assert(cookie.match(/EGG_SESS=.*?;/)); - assert(cookie.match(/expires=/)); - }); + .get('/maxAge?maxAge=100') + .expect(200) + .expect({ key: 'foo', foo: 'bar' }) + .expect(res => { + cookie = res.headers['set-cookie'].join(';'); + assert(cookie.match(/EGG_SESS=.*?;/)); + assert(cookie.match(/expires=/)); + }); yield sleep(200); yield agent - .get('/get') - .expect(200) - .expect({}); + .get('/get') + .expect(200) + .expect({}); yield request(app.callback()) - .get('/get') - .set('cookie', cookie) - .expect(200) - .expect({}); + .get('/get') + .set('cookie', cookie) + .expect(200) + .expect({}); }); }); }); diff --git a/test/fixtures/memory-session-generator/app.js b/test/fixtures/memory-session-generator/app.js new file mode 100644 index 0000000..665adf3 --- /dev/null +++ b/test/fixtures/memory-session-generator/app.js @@ -0,0 +1,19 @@ +'use strict'; + +const sessions = {}; + +module.exports = app => { + app.sessionStore = { + * get(key) { + return sessions[key]; + }, + + * set(key, value) { + sessions[key] = value; + }, + + * destroy(key) { + sessions[key] = undefined; + }, + }; +}; diff --git a/test/fixtures/memory-session-generator/app/controller/home.js b/test/fixtures/memory-session-generator/app/controller/home.js new file mode 100644 index 0000000..b122fac --- /dev/null +++ b/test/fixtures/memory-session-generator/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 = Number(this.query.maxAge); + ctx.body = ctx.session; +}; diff --git a/test/fixtures/memory-session-generator/app/router.js b/test/fixtures/memory-session-generator/app/router.js new file mode 100644 index 0000000..d5938ed --- /dev/null +++ b/test/fixtures/memory-session-generator/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/memory-session-generator/config/config.default.js b/test/fixtures/memory-session-generator/config/config.default.js new file mode 100644 index 0000000..5a194a1 --- /dev/null +++ b/test/fixtures/memory-session-generator/config/config.default.js @@ -0,0 +1,3 @@ +'use strict'; + +exports.keys = 'keys'; diff --git a/test/fixtures/memory-session-generator/package.json b/test/fixtures/memory-session-generator/package.json new file mode 100644 index 0000000..97974c3 --- /dev/null +++ b/test/fixtures/memory-session-generator/package.json @@ -0,0 +1,3 @@ +{ + "name": "memory-session-generator" +} diff --git a/test/fixtures/memory-session/app.js b/test/fixtures/memory-session/app.js index 665adf3..6597abd 100644 --- a/test/fixtures/memory-session/app.js +++ b/test/fixtures/memory-session/app.js @@ -4,15 +4,15 @@ const sessions = {}; module.exports = app => { app.sessionStore = { - * get(key) { + async get(key) { return sessions[key]; }, - * set(key, value) { + async set(key, value) { sessions[key] = value; }, - * destroy(key) { + async destroy(key) { sessions[key] = undefined; }, }; diff --git a/test/fixtures/memory-session/app/controller/home.js b/test/fixtures/memory-session/app/controller/home.js index b122fac..c1a41a9 100644 --- a/test/fixtures/memory-session/app/controller/home.js +++ b/test/fixtures/memory-session/app/controller/home.js @@ -1,25 +1,25 @@ 'use strict'; -exports.get = function* (ctx) { +exports.get = async ctx => { ctx.body = ctx.session; }; -exports.set = function* (ctx) { +exports.set = async ctx => { ctx.session = ctx.query; ctx.body = ctx.session; }; -exports.setKey = function* (ctx) { +exports.setKey = async ctx => { ctx.session.key = ctx.query.key; ctx.body = ctx.session; }; -exports.remove = function* (ctx) { +exports.remove = async ctx => { ctx.session = null; ctx.body = ctx.session; }; -exports.maxAge = function* (ctx) { - ctx.session.maxAge = Number(this.query.maxAge); +exports.maxAge = async ctx => { + ctx.session.maxAge = Number(ctx.query.maxAge); ctx.body = ctx.session; };