From 9be9676f6cc8fb0f856edf94974e618ac4c213e0 Mon Sep 17 00:00:00 2001 From: Chi Cong Tran Date: Fri, 29 Aug 2025 10:19:45 +0200 Subject: [PATCH] add more tests for API endpoint: list/[vorgang], HEAD and DELETE --- tests/APIListVorgang.test.ts | 81 ++++++++++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 9 deletions(-) diff --git a/tests/APIListVorgang.test.ts b/tests/APIListVorgang.test.ts index 9eed193..f5267e0 100644 --- a/tests/APIListVorgang.test.ts +++ b/tests/APIListVorgang.test.ts @@ -1,11 +1,26 @@ import { describe, test, expect, vi } from 'vitest'; -import { GET } from '../src/routes/api/list/[vorgang]/+server'; +import { DELETE, GET, HEAD } from '../src/routes/api/list/[vorgang]/+server'; +import { + getCrimesListByToken, + vorgangNameExists, + deleteVorgangByToken +} from '$lib/server/vorgangService'; +import { client } from '$lib/minio'; +import { EventEmitter } from 'events'; +// Mocks vi.mock('$lib/server/vorgangService', () => ({ - getCrimesListByToken: vi.fn() + getCrimesListByToken: vi.fn(), + vorgangNameExists: vi.fn(), + deleteVorgangByToken: vi.fn() })); -import { getCrimesListByToken } from '$lib/server/vorgangService'; +vi.mock('$lib/minio', () => ({ + client: { + listObjects: vi.fn(), + removeObjects: vi.fn() + } +})); const MockEvent = { params: { vorgang: '123' }, @@ -31,19 +46,19 @@ describe('API-Endpoints: list/[vorgang]', () => { }); test('Vorgang ohne Tatorte', async () => { - const testTatorte = []; + const testCrimesList = []; - vi.mocked(getCrimesListByToken).mockReturnValueOnce(testTatorte); + vi.mocked(getCrimesListByToken).mockReturnValueOnce(testCrimesList); const response = await GET(MockEvent); expect(response.status).toBe(200); const json = await response.json(); - expect(json).toEqual(testTatorte); + expect(json).toEqual(testCrimesList); }); test('Vorgang mit Tatorte', async () => { - const testTatorte = [ + const testCrimesList = [ { name: 'model-A', lastModified: '2025-08-28T09:44:12.453Z', @@ -62,12 +77,60 @@ describe('API-Endpoints: list/[vorgang]', () => { } ]; - vi.mocked(getCrimesListByToken).mockReturnValueOnce(testTatorte); + vi.mocked(getCrimesListByToken).mockReturnValueOnce(testCrimesList); const response = await GET(MockEvent); expect(response.status).toBe(200); const json = await response.json(); - expect(json).toEqual(testTatorte); + expect(json).toEqual(testCrimesList); + }); + + test('Vorgang existiert via HEAD', async () => { + const vorgangExists = true; + vi.mocked(vorgangNameExists).mockReturnValueOnce(vorgangExists); + + const response = await HEAD(MockEvent); + expect(response.status).toBe(200); + + const textContent = await response.text(); + expect(textContent).toEqual(''); + }); + + test('Vorgang existiert nicht via HEAD', async () => { + const vorgangExists = false; + vi.mocked(vorgangNameExists).mockReturnValueOnce(vorgangExists); + const response = await HEAD(MockEvent); + + expect(response.status).toBe(404); + const textContent = await response.text(); + + expect(textContent).toEqual(''); + }); + + test('Lösche Vorgang und dazugehörige S3 Objekte', async () => { + // Mock data + const fakeStream = new EventEmitter(); + vi.mocked(client.listObjects).mockReturnValue(fakeStream); + vi.mocked(client.removeObjects).mockResolvedValue(undefined); + vi.mocked(deleteVorgangByToken).mockReturnValueOnce(undefined); + + const responsePromise = DELETE(MockEvent); + const fakeCrimeNames = [ + `${MockEvent.params.vorgang}/file1.glb`, + `${MockEvent.params.vorgang}/file2.glb` + ]; + + // simulate data stream + fakeStream.emit('data', { name: fakeCrimeNames[0] }); + fakeStream.emit('data', { name: fakeCrimeNames[1] }); + fakeStream.emit('end'); + + const response = await responsePromise; + + expect(client.removeObjects).toHaveBeenCalledWith('tatort', fakeCrimeNames); + expect(deleteVorgangByToken).toHaveBeenCalledWith(MockEvent.params.vorgang); + + expect(response.status).toBe(204); }); });