Nuxt/packages/server/test/middleware/modern.test.js

108 lines
3.3 KiB
JavaScript
Raw Normal View History

jest.mock('chalk', () => ({
green: {
bold: modern => `greenBold(${modern})`
}
}))
const createServerContext = () => ({
resources: {},
options: {
render: {}
}
})
const createRenderContext = () => ({
req: { headers: {} },
next: jest.fn()
})
describe('server: modernMiddleware', () => {
let createModernMiddleware
beforeEach(() => {
jest.isolateModules(() => {
createModernMiddleware = require('../../src/middleware/modern').default
})
jest.clearAllMocks()
})
test('should return modern middleware', () => {
const modernMiddleware = createModernMiddleware({})
expect(modernMiddleware).toBeInstanceOf(Function)
})
test('should not detect modern build if modern mode is specified', () => {
const serverContext = createServerContext()
const modernMiddleware = createModernMiddleware({ serverContext })
const ctx = createRenderContext()
serverContext.options.modern = false
modernMiddleware(ctx.req, ctx.res, ctx.next)
serverContext.options.modern = 'client'
modernMiddleware(ctx.req, ctx.res, ctx.next)
serverContext.options.modern = 'server'
modernMiddleware(ctx.req, ctx.res, ctx.next)
expect(ctx.req._modern).toEqual(false)
})
test('should not detect modern browser if connect has been detected', () => {
const serverContext = createServerContext()
const modernMiddleware = createModernMiddleware({ serverContext })
const ctx = createRenderContext()
ctx.req.socket = { isModernBrowser: true }
serverContext.options.dev = true
serverContext.options.modern = 'server'
modernMiddleware(ctx.req, ctx.res, ctx.next)
expect(ctx.req._modern).toEqual(true)
})
test('should detect modern browser based on user-agent', () => {
const serverContext = createServerContext()
const modernMiddleware = createModernMiddleware({ serverContext })
const ctx = createRenderContext()
const ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
ctx.req.headers['user-agent'] = ua
ctx.req.socket = {}
serverContext.options.dev = true
serverContext.options.modern = 'server'
modernMiddleware(ctx.req, ctx.res, ctx.next)
expect(ctx.req.socket.isModernBrowser).toEqual(true)
expect(ctx.req._modern).toEqual(true)
})
test('should detect legacy browser based on user-agent', () => {
const serverContext = createServerContext()
const modernMiddleware = createModernMiddleware({ serverContext })
const ctx = createRenderContext()
const ua = 'Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))'
ctx.req.headers['user-agent'] = ua
ctx.req.socket = {}
serverContext.options.dev = true
serverContext.options.modern = 'client'
modernMiddleware(ctx.req, ctx.res, ctx.next)
expect(ctx.req.socket.isModernBrowser).toEqual(false)
})
test('should ignore illegal user-agent', () => {
const serverContext = createServerContext()
const modernMiddleware = createModernMiddleware({ serverContext })
const ctx = createRenderContext()
const ua = 'illegal user agent'
ctx.req.headers['user-agent'] = ua
ctx.req.socket = {}
serverContext.options.dev = true
serverContext.options.modern = 'client'
modernMiddleware(ctx.req, ctx.res, ctx.next)
expect(ctx.req.socket.isModernBrowser).toEqual(false)
})
})