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:
96
tests/cms-files-endpoints.spec.ts
Normal file
96
tests/cms-files-endpoints.spec.ts
Normal file
@@ -0,0 +1,96 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import { createEvent, mockSuccessReadBody } from './setup'
|
||||
import fs from 'fs/promises'
|
||||
|
||||
vi.mock('multer', () => {
|
||||
const single = vi.fn((field) => (req, _res, cb) => {
|
||||
if (req.__mockMulterError) {
|
||||
cb(req.__mockMulterError)
|
||||
return
|
||||
}
|
||||
req.file = req.__mockFile || null
|
||||
req.body = req.body || {}
|
||||
cb(null)
|
||||
})
|
||||
|
||||
const multerFn = vi.fn(() => ({ single }))
|
||||
const diskStorage = vi.fn(() => ({}))
|
||||
multerFn.diskStorage = diskStorage
|
||||
|
||||
return {
|
||||
default: multerFn,
|
||||
diskStorage
|
||||
}
|
||||
})
|
||||
|
||||
vi.mock('child_process', () => ({
|
||||
exec: vi.fn()
|
||||
}))
|
||||
|
||||
vi.mock('util', () => ({
|
||||
promisify: () => () => Promise.resolve({ stdout: 'PDF Inhalt', stderr: '' })
|
||||
}))
|
||||
|
||||
import saveCsvHandler from '../server/api/cms/save-csv.post.js'
|
||||
import uploadSpielplanHandler from '../server/api/cms/upload-spielplan-pdf.post.js'
|
||||
import satzungUploadHandler from '../server/api/cms/satzung-upload.post.js'
|
||||
|
||||
describe('CMS File Endpoints', () => {
|
||||
beforeEach(() => {
|
||||
vi.restoreAllMocks()
|
||||
vi.clearAllMocks()
|
||||
})
|
||||
|
||||
describe('POST /api/cms/save-csv', () => {
|
||||
it('validiert Eingaben', async () => {
|
||||
const event = createEvent()
|
||||
mockSuccessReadBody({})
|
||||
|
||||
await expect(saveCsvHandler(event)).rejects.toMatchObject({ statusCode: 400 })
|
||||
})
|
||||
|
||||
it('speichert erlaubte Datei', async () => {
|
||||
const event = createEvent()
|
||||
mockSuccessReadBody({ filename: 'mannschaften.csv', content: 'data' })
|
||||
vi.spyOn(fs, 'mkdir').mockResolvedValue(undefined)
|
||||
vi.spyOn(fs, 'writeFile').mockResolvedValue(undefined)
|
||||
|
||||
const response = await saveCsvHandler(event)
|
||||
expect(response.success).toBe(true)
|
||||
expect(fs.writeFile).toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
|
||||
describe('POST /api/cms/upload-spielplan-pdf', () => {
|
||||
it('erfordert Authorization Header', async () => {
|
||||
const event = createEvent({ method: 'POST' })
|
||||
event.node.req.__mockFile = { filename: 'file.pdf', originalname: 'orig.pdf', path: 'tmp', mimetype: 'application/pdf' }
|
||||
event.node.req.body = { type: 'gesamt' }
|
||||
|
||||
await expect(uploadSpielplanHandler(event)).rejects.toMatchObject({ statusCode: 401 })
|
||||
})
|
||||
|
||||
it('lädt PDF hoch und gibt Erfolg zurück', async () => {
|
||||
const event = createEvent({ method: 'POST', headers: { authorization: 'Bearer token' } })
|
||||
event.node.req.__mockFile = { filename: 'spielplan_gesamt.pdf', originalname: 'orig.pdf', path: 'tmp', mimetype: 'application/pdf' }
|
||||
event.node.req.body = { type: 'gesamt' }
|
||||
|
||||
const response = await uploadSpielplanHandler(event)
|
||||
expect(response.success).toBe(true)
|
||||
expect(response.filename).toBeDefined()
|
||||
})
|
||||
})
|
||||
|
||||
describe('POST /api/cms/satzung-upload', () => {
|
||||
it('verarbeitet hochgeladene Satzung', async () => {
|
||||
const event = createEvent({ method: 'POST' })
|
||||
event.node.req.__mockFile = { path: 'public/documents/satzung.pdf', filename: 'satzung.pdf', originalname: 'satzung.pdf', mimetype: 'application/pdf' }
|
||||
vi.spyOn(fs, 'readFile').mockResolvedValueOnce(JSON.stringify({ seiten: {}, vorstand: { vorsitzender: { email: '' }, schriftfuehrer: { email: '' } } }))
|
||||
vi.spyOn(fs, 'writeFile').mockResolvedValue(undefined)
|
||||
|
||||
const response = await satzungUploadHandler(event)
|
||||
expect(response.success).toBe(true)
|
||||
expect(fs.writeFile).toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user