Update dependencies in package.json and package-lock.json; add testing scripts for Vitest, and include new packages such as supertest and vitest. Refactor Navigation component to improve event handling and cleanup, ensuring better performance and user experience. Enhance error handling in various API endpoints for PDF uploads and CSV saves, ensuring robust error propagation. Update nodemailer transport configuration for consistency across API handlers.
This commit is contained in:
121
tests/setup.ts
Normal file
121
tests/setup.ts
Normal file
@@ -0,0 +1,121 @@
|
||||
import { vi } from 'vitest'
|
||||
|
||||
type CookieStore = Record<string, { value: string; options?: Record<string, any> }>
|
||||
|
||||
declare global {
|
||||
// eslint-disable-next-line no-var
|
||||
var __testCookies__: WeakMap<any, CookieStore>
|
||||
}
|
||||
|
||||
if (!global.__testCookies__) {
|
||||
global.__testCookies__ = new WeakMap()
|
||||
}
|
||||
|
||||
const getCookieStore = (event: any): CookieStore => {
|
||||
if (!global.__testCookies__.has(event)) {
|
||||
global.__testCookies__.set(event, {})
|
||||
}
|
||||
return global.__testCookies__.get(event) as CookieStore
|
||||
}
|
||||
|
||||
global.readBody = vi.fn(async (event: any) => event.__body ?? null)
|
||||
global.getQuery = (event: any) => event.__query ?? {}
|
||||
global.getHeader = (event: any, name: string) => {
|
||||
const headers = event.node?.req?.headers || {}
|
||||
const key = Object.keys(headers).find(h => h.toLowerCase() === name.toLowerCase())
|
||||
return key ? headers[key] : undefined
|
||||
}
|
||||
|
||||
global.setCookie = (event: any, name: string, value: string, options = {}) => {
|
||||
const store = getCookieStore(event)
|
||||
store[name] = { value, options }
|
||||
}
|
||||
|
||||
global.getCookie = (event: any, name: string) => {
|
||||
const store = getCookieStore(event)
|
||||
return store[name]?.value ?? null
|
||||
}
|
||||
|
||||
global.deleteCookie = (event: any, name: string) => {
|
||||
const store = getCookieStore(event)
|
||||
if (store[name]) {
|
||||
delete store[name]
|
||||
}
|
||||
}
|
||||
|
||||
global.createError = ({ statusCode = 500, statusMessage, message }: any) => {
|
||||
const error = new Error(statusMessage || message || 'Unbekannter Fehler')
|
||||
error.name = 'H3Error'
|
||||
// @ts-ignore
|
||||
error.statusCode = statusCode
|
||||
// @ts-ignore
|
||||
error.statusMessage = statusMessage || message || 'Fehler'
|
||||
return error
|
||||
}
|
||||
|
||||
global.useRuntimeConfig = () => ({
|
||||
encryptionKey: 'test-encryption-key',
|
||||
smtp: {
|
||||
host: 'localhost',
|
||||
port: 1025,
|
||||
user: 'test',
|
||||
pass: 'pass'
|
||||
},
|
||||
membership: {
|
||||
adminEmails: ['admin@test.local']
|
||||
}
|
||||
})
|
||||
|
||||
global.defineEventHandler = (handler: any) => handler
|
||||
|
||||
export const createEvent = (overrides: Record<string, any> = {}) => {
|
||||
const event = {
|
||||
context: {},
|
||||
node: {
|
||||
req: {
|
||||
headers: overrides.headers || {},
|
||||
method: overrides.method || 'GET'
|
||||
},
|
||||
res: {
|
||||
setHeader: vi.fn(),
|
||||
getHeader: vi.fn(),
|
||||
end: vi.fn(),
|
||||
statusCode: 200
|
||||
}
|
||||
},
|
||||
__body: overrides.body,
|
||||
__query: overrides.query,
|
||||
...overrides
|
||||
}
|
||||
|
||||
if (overrides.cookies) {
|
||||
const store = getCookieStore(event)
|
||||
Object.entries(overrides.cookies).forEach(([key, value]) => {
|
||||
store[key] = { value: value as string }
|
||||
})
|
||||
}
|
||||
|
||||
return event
|
||||
}
|
||||
|
||||
export const resetEventMocks = () => {
|
||||
(global.readBody as any).mockClear()
|
||||
global.__testCookies__ = new WeakMap()
|
||||
}
|
||||
|
||||
export const expectError = async (fn: () => Promise<any>, statusCode: number) => {
|
||||
try {
|
||||
await fn()
|
||||
throw new Error('Erwarteter Fehler wurde nicht ausgelöst')
|
||||
} catch (error: any) {
|
||||
expect(error.statusCode).toBe(statusCode)
|
||||
}
|
||||
}
|
||||
|
||||
export const mockSuccessReadBody = (payload: any) => {
|
||||
(global.readBody as any).mockResolvedValue(payload)
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
resetEventMocks()
|
||||
})
|
||||
Reference in New Issue
Block a user