From 0608284028049bf631b6b4e8eb46387d84b25898 Mon Sep 17 00:00:00 2001 From: Markus Ast Date: Tue, 19 Jul 2022 11:46:05 +0200 Subject: [PATCH] upgrade to passport 0.6.0 ... and replace mocha with Jest. --- CHANGELOG.md | 4 ++ README.md | 17 +++----- package.json | 9 ++-- test/authenticate.js | 101 +++++++++++++++++++++++++------------------ test/initialize.js | 13 +++--- test/mocha.opts | 1 - 6 files changed, 79 insertions(+), 66 deletions(-) delete mode 100644 test/mocha.opts diff --git a/CHANGELOG.md b/CHANGELOG.md index 49affb6..834ee5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 5.0.0 + +- upgrade `passport` to 0.6 + ## 4.1.4 - add `ip` to the Koa `ctx` delegates #157 diff --git a/README.md b/README.md index 44b9a2e..a1d868a 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,12 @@ [![Dependency Status][dependencies]](https://david-dm.org/rkusa/koa-passport) [![Build Status][travis]](https://travis-ci.org/rkusa/koa-passport) -koa-passport version | koa version | branch ---------------------- | ------------| ------ -1.x | 1.x | v1.x -2.x | 2.x | v2.x -4.x | 2.x | master - -## Migration to `v3` - -- change `ctx.passport.*` to `ctx.state.*` (e.g. `ctx.passport.user` to `ctx.state.user`) -- don't call passport methods on `ctx.req` (e.g. use `ctx.login` instead of `ctx.req.login`) -- update custom authentication callback arguments to `err, user, info, status` (e.g. `passport.authenticate('local', function(err, user, info, status) { ... })(ctx, next)`) +koa-passport version | passport version | koa version | branch +--------------------- | ---------------- | ------------| ------ +5.x | 6.x, 5.x | 2.x | main +4.x | 4.x | 2.x | v3.x +3.x, 2.x | 2.x | 2.x | v2.x +1.x | 1.x | 1.x | v1.x ## Usage diff --git a/package.json b/package.json index 9fd2f8f..3024158 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "name": "Markus Ast", "email": "npm.m@rkusa.st" }, - "version": "4.1.4", + "version": "5.0.0", "description": "Passport middleware for Koa", "keywords": [ "koa", @@ -17,14 +17,13 @@ "license": "MIT", "main": "./lib", "dependencies": { - "passport": "^0.4.0" + "passport": "^0.6.0" }, "devDependencies": { - "chai": "^4.2.0", + "jest": "^28.1.3", "koa": "^2.6.2", "koa-bodyparser": "^4.2.1", "koa-route": "^3.2", - "mocha": "^8.3.1", "passport-local": "^1.0", "supertest": "^6.1.3" }, @@ -34,7 +33,7 @@ "url": "git://github.com/rkusa/koa-passport.git" }, "scripts": { - "test": "mocha" + "test": "jest --testMatch '**/test/*.js'" }, "engines": { "node": ">= 4" diff --git a/test/authenticate.js b/test/authenticate.js index b5dd78d..8e7a918 100644 --- a/test/authenticate.js +++ b/test/authenticate.js @@ -1,10 +1,6 @@ -'use strict' - -const supertest = require('supertest') -const expect = require('chai').expect - const user = { id: 1, username: 'test' } +const supertest = require('supertest') const passport = require('../') passport.serializeUser(function(user, done) { @@ -29,9 +25,23 @@ const Koa = require('koa') const app = new Koa() app.use(require('koa-bodyparser')()) + let session app.use(function(ctx, next) { - ctx.session = session = {} + ctx.session = session = { + regenerate(done) { + for (const key of Object.keys(session)) { + if (key === 'regenerate') { + continue + } + delete session[key] + } + ctx.session.save = function(done) { + process.nextTick(done) + } + process.nextTick(done) + } + } return next() }) @@ -71,11 +81,11 @@ app.use(route.post('/custom', function(ctx, next) { describe('authenticate middleware', function() { const port = process.env.PORT || 4000 let server, client - before(function(done) { + beforeAll(function(done) { server = app.listen(port, done) client = supertest(server) }) - after(function(done) { + afterAll(function(done) { server.close(done) }) process.on('exit', function() { @@ -89,8 +99,8 @@ describe('authenticate middleware', function() { .get('/') .expect(204) .then(() => { - expect(context.req.user).to.be.undefined - expect(context.state.user).to.be.undefined + expect(context.req.user).toBeUndefined() + expect(context.state.user).toBeUndefined() }) }) @@ -102,12 +112,11 @@ describe('authenticate middleware', function() { .expect(302) .then(() => { const redirectTo = context.response.get('Location') - expect(redirectTo).to.equal('/failed') - expect(session).to.eql({}) - expect(context.isAuthenticated()).to.be.false - expect(context.isUnauthenticated()).to.be.true - expect(context.state.user).to.be.undefined - expect() + expect(redirectTo).toEqual('/failed') + expect(session).toEqual({regenerate: expect.any(Function)}) + expect(context.isAuthenticated()).toBe(false) + expect(context.isUnauthenticated()).toBe(true) + expect(context.state.user).toBeUndefined() }) }) @@ -118,12 +127,14 @@ describe('authenticate middleware', function() { .expect(302) .then(() => { const redirectTo = context.response.get('Location') - expect(redirectTo).to.equal('/secured') - expect(context.isAuthenticated()).to.be.true - expect(context.isUnauthenticated()).to.be.false - expect(context.state.user).to.eql(user) - expect(session).to.eql({ - passport: { user: 1 } + expect(redirectTo).toEqual('/secured') + expect(context.isAuthenticated()).toBe(true) + expect(context.isUnauthenticated()).toBe(false) + expect(context.state.user).toEqual(user) + expect(session).toEqual({ + passport: { user: 1 }, + regenerate: expect.any(Function), + save: expect.any(Function) }) }) }) @@ -136,12 +147,14 @@ describe('authenticate middleware', function() { .expect(204) .then(() => { return context.login(user).then(() => { - expect(session).to.eql({ - passport: { user: 1 } + expect(session).toEqual({ + passport: { user: 1 }, + regenerate: expect.any(Function), + save: expect.any(Function) }) - expect(context.isAuthenticated()).to.be.true - expect(context.isUnauthenticated()).to.be.false - expect(context.state.user).to.eql(user) + expect(context.isAuthenticated()).toBe(true) + expect(context.isUnauthenticated()).toBe(false) + expect(context.state.user).toEqual(user) }) }) }) @@ -154,12 +167,16 @@ describe('authenticate middleware', function() { .expect(204) .then(() => { return context.login(user).then(() => { - context.logout() + context.logout(jest.fn()) - expect(session).to.eql({ passport: {} }) - expect(context.isAuthenticated()).to.be.false - expect(context.isUnauthenticated()).to.be.true - expect(context.state.user).to.be.null + expect(session).toEqual({ + passport: {}, + regenerate: expect.any(Function), + save: expect.any(Function) + }) + expect(context.isAuthenticated()).toBe(false) + expect(context.isUnauthenticated()).toBe(true) + expect(context.state.user).toBe(null) }) }) }) @@ -172,10 +189,10 @@ describe('authenticate middleware', function() { .send({ username: 'test', password: 'asdf' }) .expect(401, '{"success":false}') .then(() => { - expect(session).to.eql({}) - expect(context.isAuthenticated()).to.be.false - expect(context.isUnauthenticated()).to.be.true - expect(context.state.user).to.be.undefined + expect(session).toEqual({regenerate: expect.any(Function)}) + expect(context.isAuthenticated()).toBe(false) + expect(context.isUnauthenticated()).toBe(true) + expect(context.state.user).toBeUndefined() expect() }) }) @@ -186,11 +203,13 @@ describe('authenticate middleware', function() { .send({ username: 'test', password: 'test' }) .expect(200, '{"success":true}') .then(() => { - expect(context.isAuthenticated()).to.be.true - expect(context.isUnauthenticated()).to.be.false - expect(context.state.user).to.eql(user) - expect(session).to.eql({ - passport: { user: 1 } + expect(context.isAuthenticated()).toBe(true) + expect(context.isUnauthenticated()).toBe(false) + expect(context.state.user).toEqual(user) + expect(session).toEqual({ + passport: { user: 1 }, + regenerate: expect.any(Function), + save: expect.any(Function) }) }) }) diff --git a/test/initialize.js b/test/initialize.js index 666b32d..bf1f6d7 100644 --- a/test/initialize.js +++ b/test/initialize.js @@ -1,6 +1,3 @@ -'use strict' - -const expect = require('chai').expect const passport = require('../') describe('initialize middleware', function() { @@ -8,7 +5,7 @@ describe('initialize middleware', function() { const initialize = passport.initialize() const context = createContext() return initialize(context, function() { - expect(context.state).to.have.property('_passport') + expect(context.state).toHaveProperty('_passport') }) }) @@ -16,10 +13,10 @@ describe('initialize middleware', function() { const initialize = passport.initialize() const context = createContext() return initialize(context, function() { - expect('user' in context.req).to.be.true + expect('user' in context.req).toBe(true) context.state.user = {} - expect(context.req.user).to.equal(context.state.user) + expect(context.req.user).toEqual(context.state.user) }) }) @@ -29,8 +26,8 @@ describe('initialize middleware', function() { const methods = ['login', 'logIn', 'logout', 'logOut', 'isAuthenticated', 'isUnauthenticated'] return initialize(context, function() { methods.forEach(function(name) { - expect(context.req[name]).to.not.exist - expect(context[name]).to.exist + expect(context.req[name]).toBeUndefined() + expect(context[name]).toBeDefined() }) }) }) diff --git a/test/mocha.opts b/test/mocha.opts deleted file mode 100644 index fb5f824..0000000 --- a/test/mocha.opts +++ /dev/null @@ -1 +0,0 @@ ---reporter spec \ No newline at end of file