f100_backend_api-endpoints_tests #31
@@ -1,11 +1,26 @@
|
|||||||
import { describe, test, expect, vi } from 'vitest';
|
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', () => ({
|
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 = {
|
const MockEvent = {
|
||||||
params: { vorgang: '123' },
|
params: { vorgang: '123' },
|
||||||
@@ -31,19 +46,19 @@ describe('API-Endpoints: list/[vorgang]', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('Vorgang ohne Tatorte', async () => {
|
test('Vorgang ohne Tatorte', async () => {
|
||||||
const testTatorte = [];
|
const testCrimesList = [];
|
||||||
|
|
||||||
vi.mocked(getCrimesListByToken).mockReturnValueOnce(testTatorte);
|
vi.mocked(getCrimesListByToken).mockReturnValueOnce(testCrimesList);
|
||||||
|
|
||||||
const response = await GET(MockEvent);
|
const response = await GET(MockEvent);
|
||||||
expect(response.status).toBe(200);
|
expect(response.status).toBe(200);
|
||||||
|
|
||||||
const json = await response.json();
|
const json = await response.json();
|
||||||
expect(json).toEqual(testTatorte);
|
expect(json).toEqual(testCrimesList);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Vorgang mit Tatorte', async () => {
|
test('Vorgang mit Tatorte', async () => {
|
||||||
const testTatorte = [
|
const testCrimesList = [
|
||||||
{
|
{
|
||||||
name: 'model-A',
|
name: 'model-A',
|
||||||
lastModified: '2025-08-28T09:44:12.453Z',
|
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);
|
const response = await GET(MockEvent);
|
||||||
expect(response.status).toBe(200);
|
expect(response.status).toBe(200);
|
||||||
|
|
||||||
const json = await response.json();
|
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);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user