Skip to content

Commit bc79cc4

Browse files
committed
test: enhance helmet middleware tests for Koa integration
- Updated test descriptions for clarity. - Added tests to verify middleware creation and option handling. - Included error handling test for express helmet middleware.
1 parent cdc7208 commit bc79cc4

File tree

1 file changed

+76
-4
lines changed

1 file changed

+76
-4
lines changed

src/middleware/helmet.test.ts

Lines changed: 76 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,87 @@
11
import helmet from 'helmet'
2+
import type { Context } from 'koa'
23
import { describe, expect, it, vi } from 'vitest'
34

45
vi.mock('helmet')
56

67
describe('helmet', () => {
7-
it('should export helmet', async () => {
8+
it('should export a function that wraps helmet for Koa', async () => {
89
expect.assertions(2)
910

10-
const { default: actual } = await import('./helmet.js')
11+
const { default: helmetMiddleware } = await import('./helmet.js')
1112

12-
expect(helmet).toHaveBeenCalledOnce()
13-
expect(actual).toStrictEqual(helmet)
13+
expect(helmetMiddleware).toBeTypeOf('function')
14+
15+
// Call the function to create middleware
16+
const middleware = helmetMiddleware()
17+
18+
expect(middleware).toBeTypeOf('function')
19+
})
20+
21+
it('should call helmet with options when provided', async () => {
22+
expect.assertions(1)
23+
24+
const mockHelmet = vi.mocked(helmet)
25+
mockHelmet.mockReturnValue(vi.fn())
26+
27+
const { default: helmetMiddleware } = await import('./helmet.js')
28+
29+
const options = { contentSecurityPolicy: false }
30+
helmetMiddleware(options)
31+
32+
expect(mockHelmet).toHaveBeenCalledWith(options)
33+
})
34+
35+
it('should call the express helmet middleware and continue to next', async () => {
36+
expect.assertions(2)
37+
38+
const mockExpressHelmet = vi.fn((_req, _res, next) => {
39+
next()
40+
})
41+
const mockHelmet = vi.mocked(helmet)
42+
mockHelmet.mockReturnValue(mockExpressHelmet)
43+
44+
const { default: helmetMiddleware } = await import('./helmet.js')
45+
46+
const middleware = helmetMiddleware()
47+
48+
const ctx = {
49+
req: {},
50+
res: {},
51+
} as Context
52+
const next = vi.fn().mockResolvedValue(undefined)
53+
54+
await middleware(ctx, next)
55+
56+
expect(mockExpressHelmet).toHaveBeenCalledWith(
57+
ctx.req,
58+
ctx.res,
59+
expect.any(Function),
60+
)
61+
expect(next).toHaveBeenCalledOnce()
62+
})
63+
64+
it('should reject promise when express helmet middleware returns error', async () => {
65+
expect.assertions(2)
66+
67+
const error = new Error('Helmet error')
68+
const mockExpressHelmet = vi.fn((_req, _res, callback) => {
69+
callback(error)
70+
})
71+
const mockHelmet = vi.mocked(helmet)
72+
mockHelmet.mockReturnValue(mockExpressHelmet)
73+
74+
const { default: helmetMiddleware } = await import('./helmet.js')
75+
76+
const middleware = helmetMiddleware()
77+
78+
const ctx = {
79+
req: {},
80+
res: {},
81+
} as Context
82+
const next = vi.fn()
83+
84+
await expect(middleware(ctx, next)).rejects.toThrow('Helmet error')
85+
expect(next).not.toHaveBeenCalled()
1486
})
1587
})

0 commit comments

Comments
 (0)