97 lines
3.3 KiB
TypeScript
97 lines
3.3 KiB
TypeScript
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()
|
|
})
|
|
})
|
|
})
|