import { describe, test, expect, vi } from 'vitest'; import { DELETE, PUT } from '../src/routes/api/list/[vorgang]/[tatort]/+server'; import { BUCKET, client } from '$lib/minio'; // Mock data and methods const fakeVorgangToken = `c399423a-ba37-4fe1-bbdf-80e5881168ff`; const fakeCrimeOldName = `model-A`; const fakeCrimeNewName = 'model-Z'; const fakeCrimePath = `${fakeVorgangToken}/${fakeCrimeOldName}`; const fullFakeCrimePath = `/${BUCKET}/${fakeCrimePath}`; const fakeCrimeAPIURL = `http://localhost:5173/api/list/${fakeCrimePath}`; vi.mock('$lib/minio', () => ({ client: { removeObject: vi.fn(), statObject: vi.fn(), copyObject: vi.fn() }, BUCKET: 'tatort' })); describe('API-Endpoints: list/[vorgang]/[tatort]', () => { test('Löschen von Tatorten', async () => { const request = new Request(fakeCrimeAPIURL); const response = await DELETE({ request }); expect(client.removeObject).toHaveBeenCalledWith(BUCKET, fakeCrimePath); expect(response.status).toBe(204); const responseBody = await response.text(); expect(responseBody).toBe(''); }); test('Umbennen von Tatorten: Erfolgreich', async () => { const request = new Request(fakeCrimeAPIURL, { method: 'PUT', body: JSON.stringify({ oldName: fakeCrimeOldName, newName: fakeCrimeNewName }) }); const params = { vorgang: fakeVorgangToken }; // Mock Datei nicht gefunden client.statObject.mockRejectedValueOnce(new Error('NotFound')); const response = await PUT({ params, request }); const fakeCrimeNewPath = `${fakeVorgangToken}/${fakeCrimeNewName}`; expect(client.statObject).toHaveBeenCalledWith(BUCKET, fakeCrimeNewPath); expect(client.copyObject).toHaveBeenCalledWith(BUCKET, fakeCrimeNewPath, fullFakeCrimePath); expect(client.removeObject).toHaveBeenCalledWith(BUCKET, fakeCrimePath); expect(response.status).toBe(200); }); test('Umbennen von Tatorten: Fehlende(r) Name', async () => { const request = new Request(fakeCrimeAPIURL, { method: 'PUT', body: JSON.stringify({ oldName: '', newName: '' }) }); const params = { vorgang: fakeVorgangToken }; const response = await PUT({ params, request }); expect(response.status).toBe(400); }); test('Umbennen von Tatorten: Existierender Name', async () => { const request = new Request(fakeCrimeAPIURL, { method: 'PUT', body: JSON.stringify({ oldName: fakeCrimeOldName, newName: fakeCrimeNewName }) }); const params = { vorgang: fakeVorgangToken }; // Datei existiert bereits client.statObject.mockResolvedValueOnce({}); const response = await PUT({ params, request }); expect(response.status).toBe(400); const fakeCrimeNewPath = `${fakeVorgangToken}/${fakeCrimeNewName}`; expect(client.statObject).toHaveBeenCalledWith(BUCKET, fakeCrimeNewPath); expect(client.copyObject).not.toHaveBeenCalled(); expect(client.removeObject).not.toHaveBeenCalled(); }); });