From 418e91c504067c06724b7fb3573033f17a8183b8 Mon Sep 17 00:00:00 2001 From: Chi Cong Tran Date: Tue, 2 Sep 2025 10:47:08 +0200 Subject: [PATCH] add tests for API endpoint: list/[vorgang]/[tatort] --- tests/APIListVorgangTatort.test.ts | 93 ++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 tests/APIListVorgangTatort.test.ts diff --git a/tests/APIListVorgangTatort.test.ts b/tests/APIListVorgangTatort.test.ts new file mode 100644 index 0000000..08e5db5 --- /dev/null +++ b/tests/APIListVorgangTatort.test.ts @@ -0,0 +1,93 @@ +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(); + }); +});