Skip to content

Commit

Permalink
upgrade to passport 0.6.0
Browse files Browse the repository at this point in the history
... and replace mocha with Jest.
  • Loading branch information
rkusa committed Jul 19, 2022
1 parent e2340e9 commit 0608284
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 66 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## 5.0.0

- upgrade `passport` to 0.6

## 4.1.4

- add `ip` to the Koa `ctx` delegates #157
Expand Down
17 changes: 6 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
9 changes: 4 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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"
},
Expand All @@ -34,7 +33,7 @@
"url": "git://github.com/rkusa/koa-passport.git"
},
"scripts": {
"test": "mocha"
"test": "jest --testMatch '**/test/*.js'"
},
"engines": {
"node": ">= 4"
Expand Down
101 changes: 60 additions & 41 deletions test/authenticate.js
Original file line number Diff line number Diff line change
@@ -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) {
Expand All @@ -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()
})

Expand Down Expand Up @@ -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() {
Expand All @@ -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()
})
})

Expand All @@ -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()
})
})

Expand All @@ -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)
})
})
})
Expand All @@ -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)
})
})
})
Expand All @@ -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)
})
})
})
Expand All @@ -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()
})
})
Expand All @@ -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)
})
})
})
Expand Down
13 changes: 5 additions & 8 deletions test/initialize.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,22 @@
'use strict'

const expect = require('chai').expect
const passport = require('../')

describe('initialize middleware', function() {
it('it should add itself', function() {
const initialize = passport.initialize()
const context = createContext()
return initialize(context, function() {
expect(context.state).to.have.property('_passport')
expect(context.state).toHaveProperty('_passport')
})
})

it('should define `req.user`', 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)
})
})

Expand All @@ -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()
})
})
})
Expand Down
1 change: 0 additions & 1 deletion test/mocha.opts

This file was deleted.

0 comments on commit 0608284

Please sign in to comment.