67 lines
1.5 KiB
TypeScript
67 lines
1.5 KiB
TypeScript
import express, { Application, NextFunction as Next, Request, Response } from 'express'
|
|
import request from 'supertest'
|
|
import { ensureLoggedInApi, ensureLoggedInSite } from './ensureLoggedIn'
|
|
|
|
function createMockUserMiddleware() {
|
|
const context: {user?: any} = {}
|
|
function middleware(req: Request, res: Response, next: Next) {
|
|
(req as any).user = context.user
|
|
next()
|
|
}
|
|
return {context, middleware}
|
|
}
|
|
|
|
describe('user login', () => {
|
|
|
|
const {context, middleware} = createMockUserMiddleware()
|
|
|
|
let app: Application
|
|
beforeEach(() => {
|
|
context.user = null
|
|
app = express()
|
|
app.use('/', middleware)
|
|
|
|
app.use('/api', ensureLoggedInApi)
|
|
app.get('/api', (req, res) => res.json({status: 'ok'}))
|
|
|
|
app.use('/app', ensureLoggedInSite('/login'))
|
|
app.get('/app', (req, res) => res.end('ok'))
|
|
})
|
|
|
|
describe('userLoggedInApi', () => {
|
|
|
|
it('should result in 401 when user not logged in', async () => {
|
|
await request(app)
|
|
.get('/api')
|
|
.expect(401)
|
|
})
|
|
|
|
it('should result in 200 when user logged in', async () => {
|
|
context.user = {}
|
|
await request(app)
|
|
.get('/api')
|
|
.expect(200)
|
|
})
|
|
|
|
})
|
|
|
|
describe('userLoggedInSite', () => {
|
|
|
|
it('should result in redirect when user not logged in', async () => {
|
|
await request(app)
|
|
.get('/app')
|
|
.expect(302)
|
|
.expect('Location', '/login')
|
|
})
|
|
|
|
it('should result in 200 when user logged in', async () => {
|
|
context.user = {}
|
|
await request(app)
|
|
.get('/app')
|
|
.expect(200)
|
|
})
|
|
|
|
})
|
|
|
|
})
|