122 lines
3.7 KiB
TypeScript
122 lines
3.7 KiB
TypeScript
import { render, screen, within } from '@testing-library/svelte';
|
|
import { describe, expect, it, test } from "vitest";
|
|
import TatortListPage from "../src/routes/(token-based)/list/[vorgang]/+page.svelte";
|
|
|
|
const testUser = {
|
|
admin: true,
|
|
exp: 1757067123,
|
|
iat: 1757063523,
|
|
id: "admin",
|
|
}
|
|
const testCrimesList = [
|
|
{
|
|
name: 'model-A',
|
|
lastModified: '2025-08-28T09:44:12.453Z',
|
|
etag: '558f35716f6af953f9bb5d75f6d77e6a',
|
|
size: 8947140,
|
|
prefix: '7596e4d5-c51f-482d-a4aa-ff76434305fc',
|
|
show_button: true
|
|
},
|
|
{
|
|
name: 'model-z',
|
|
lastModified: '2025-08-28T10:37:20.142Z',
|
|
etag: '43e3989c32c4682bee407baaf83b6fa0',
|
|
size: 35788560,
|
|
prefix: '7596e4d5-c51f-482d-a4aa-ff76434305fc',
|
|
show_button: true
|
|
}
|
|
];
|
|
|
|
const testVorgangsList = [
|
|
{
|
|
vorgangName: "vorgang-1",
|
|
vorgangPIN: "pin-123",
|
|
vorgangToken: "c322f26f-8c5e-4cb9-94b3-b5433bf5109e"
|
|
},
|
|
{
|
|
vorgangName: "vorgang-2",
|
|
vorgangPIN: "pin-2",
|
|
vorgangToken: "cb0051bc-5f38-47b8-943c-9352d4d9c984"
|
|
}
|
|
|
|
]
|
|
|
|
const baseData = {
|
|
user: testUser,
|
|
vorgang: testVorgangsList[0],
|
|
vorgangList: testVorgangsList,
|
|
crimesList: testCrimesList,
|
|
url: URL,
|
|
crimeNames: [ "modell-A" ]
|
|
}
|
|
|
|
|
|
describe('Seite: Vorgangsansicht', () => {
|
|
test.todo('zeigt PIN und Share-Link, wenn Admin');
|
|
|
|
describe('Szenario: Liste leer (unabhängig von Rolle)', () => {
|
|
it('zeigt Hinweistext bei leerer Liste', () => {
|
|
const testData = { ...baseData, crimesList: [] };
|
|
const { getByTestId } = render(TatortListPage, {props:{data: testData}});
|
|
|
|
expect(getByTestId('empty-list')).toBeInTheDocument();
|
|
});
|
|
it('zeigt keinen Listeneintrag', () => {
|
|
const items = screen.queryAllByTestId('test-list-item');
|
|
|
|
expect(items).toHaveLength(0);
|
|
});
|
|
});
|
|
describe('Szenario: Liste gefüllt (unabhängig von Rolle)', () => {
|
|
it('rendert mindestens ein Listenelement bei vorhandenen crimesList-Daten und prüft ob Link vorhanden', () => {
|
|
const testData = { ...baseData };
|
|
const { queryAllByTestId } = render(TatortListPage, {props:{data: testData}});
|
|
const items = queryAllByTestId('test-list-item');
|
|
|
|
expect(items.length).toBeGreaterThan(0);
|
|
});
|
|
|
|
it('zeigt für jeden Eintrag einen Link', () => {
|
|
const testData = { ...baseData };
|
|
render(TatortListPage, { props: { data: testData } });
|
|
const links = screen.queryAllByTestId('crime-link');
|
|
|
|
expect(links).toHaveLength(testData.crimesList.length);
|
|
});
|
|
|
|
it('prüft href und title jedes Links', () => {
|
|
const testData = { ...baseData };
|
|
const { queryAllByTestId } = render(TatortListPage, { props: { data: testData } });
|
|
const items = queryAllByTestId('test-list-item');
|
|
|
|
items.forEach((item, i) => {
|
|
const link = within(item).getByRole('link');
|
|
const expectedHref = `/view/${testData.vorgang.vorgangToken}/${testData.crimesList[i].name}?pin=${testData.vorgang.vorgangPIN}`;
|
|
|
|
expect(link).toBeInTheDocument();
|
|
expect(link).toHaveAttribute('href', expectedHref);
|
|
expect(link).toHaveAttribute('title', testData.crimesList[i].name);
|
|
});
|
|
});
|
|
|
|
|
|
test.todo('testet zuletzt angezeigt, wenn item.lastModified');
|
|
test.todo('zeigt Dateigröße, wenn item.size vorhanden ist');
|
|
});
|
|
|
|
describe('Szenario: Admin + Liste gefüllt', () => {
|
|
it('zeigt PIN und Share-Link disabeld, wenn Liste leer', () => { });
|
|
it('zeigt PIN und Share-Link disabeld=false', () => { });
|
|
it('zeigt Listeneinträge mit Edit/Delete', () => { });
|
|
it('gibt Edit/Delete-Events korrekt weiter', () => { });
|
|
});
|
|
describe('Szenario: Viewer + Liste gefüllt', () => {
|
|
it('zeigt Listeneinträge ohne Edit/Delete', () => { });
|
|
it('zeigt Link und Änderungsdatum', () => { });
|
|
it('zeigt keinen Share-Link oder PIN', () => { });
|
|
});
|
|
|
|
test.todo('Modal testen, wenn open')
|
|
});
|
|
|