f100_backend_api-endpoints_tests #31

Merged
jared merged 17 commits from f100_backend_api-endpoints_tests into development 2025-09-04 15:16:50 +02:00
Showing only changes of commit 9be9676f6c - Show all commits

View File

@@ -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);
});
});