rondo-framework/packages/server/src/middleware/ensureLoggedIn.test.ts

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)
})
})
})