Skip to content

Commit 63f0b88

Browse files
brandonmankedougwilson
authored andcommitted
add: promise support for sessionStore regenerate
1 parent 7c53597 commit 63f0b88

File tree

2 files changed

+78
-4
lines changed

2 files changed

+78
-4
lines changed

session/session.js

+17-3
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,23 @@ defineMethod(Session.prototype, 'destroy', function destroy(fn) {
165165
*/
166166

167167
defineMethod(Session.prototype, 'regenerate', function regenerate(fn) {
168-
this.req.sessionStore.regenerate(this.req, fn);
169-
return this;
170-
});
168+
if (fn) {
169+
this.req.sessionStore.regenerate(this.req, fn)
170+
return
171+
}
172+
173+
if (!fn && !global.Promise) {
174+
throw new Error('must use callback without promises')
175+
}
176+
177+
var sess = this
178+
return new Promise(function (resolve, reject) {
179+
sess.req.sessionStore.regenerate(sess.req, function(err) {
180+
if (err) reject(err)
181+
resolve()
182+
})
183+
})
184+
})
171185

172186
/**
173187
* Helper function for creating a method on a prototype.

test/session.js

+61-1
Original file line numberDiff line numberDiff line change
@@ -1603,7 +1603,7 @@ describe('session()', function(){
16031603
})
16041604
})
16051605

1606-
describe('.regenerate()', function(){
1606+
describe('.regenerate()', function () {
16071607
it('should destroy/replace the previous session', function(done){
16081608
var server = createServer(null, function (req, res) {
16091609
var id = req.session.id
@@ -1626,6 +1626,66 @@ describe('session()', function(){
16261626
.expect(200, 'false', done)
16271627
});
16281628
})
1629+
1630+
describe('with global Promise', function () {
1631+
beforeEach(function () {
1632+
global.Promise = Promise
1633+
})
1634+
1635+
afterEach(function () {
1636+
global.Promise = undefined
1637+
})
1638+
1639+
it('should return Promise without callback', function (done) {
1640+
var server = createServer(null, function (req, res) {
1641+
var id = req.session.id
1642+
req.session.regenerate()
1643+
.then(function() {
1644+
res.end(String(req.session.id === id))
1645+
})
1646+
.catch(function (err) {
1647+
if (err) res.statusCode = 500
1648+
})
1649+
})
1650+
1651+
request(server)
1652+
.get('/')
1653+
.expect(shouldSetCookie('connect.sid'))
1654+
.expect(200, function (err, res) {
1655+
if (err) return done(err)
1656+
request(server)
1657+
.get('/')
1658+
.set('Cookie', cookie(res))
1659+
.expect(shouldSetCookie('connect.sid'))
1660+
.expect(shouldSetCookieToDifferentSessionId(sid(res)))
1661+
.expect(200, 'false', done)
1662+
})
1663+
})
1664+
1665+
it('should not return Promise with callback', function(done){
1666+
var server = createServer(null, function (req, res) {
1667+
var id = req.session.id
1668+
var ret = req.session.regenerate(function (err) {
1669+
if (err) res.statusCode = 500
1670+
res.statusCode = (ret === undefined) ? 200 : 500
1671+
res.end(String(req.session.id === id))
1672+
})
1673+
})
1674+
1675+
request(server)
1676+
.get('/')
1677+
.expect(shouldSetCookie('connect.sid'))
1678+
.expect(200, function (err, res) {
1679+
if (err) return done(err)
1680+
request(server)
1681+
.get('/')
1682+
.set('Cookie', cookie(res))
1683+
.expect(shouldSetCookie('connect.sid'))
1684+
.expect(shouldSetCookieToDifferentSessionId(sid(res)))
1685+
.expect(200, 'false', done)
1686+
})
1687+
})
1688+
})
16291689
})
16301690

16311691
describe('.reload()', function () {

0 commit comments

Comments
 (0)