save changes, bin aber noch nicht fertig

This commit is contained in:
2025-09-10 17:50:10 +02:00
parent 8803187ce1
commit 47ca05f2d4
4 changed files with 125 additions and 134 deletions

View File

@@ -1,7 +1,8 @@
import { fireEvent, getAllByTestId, queryAllByTestId, render, screen, within } from '@testing-library/svelte';
import { describe, expect, it, vi } from "vitest";
import { fireEvent, getByTestId, queryAllByTestId, render, screen, within } from '@testing-library/svelte';
import { describe, expect, it, test, vi } from "vitest";
import TatortListPage from "../src/routes/(token-based)/list/[vorgang]/+page.svelte";
import { baseData } from './fixtures';
import { invalidateAll } from '$app/navigation';
// Mock für invalidateAll
@@ -9,69 +10,85 @@ vi.mock('$app/navigation', () => ({
invalidateAll: vi.fn()
}));
// Minimaler fetch-Mock
global.fetch = vi.fn().mockResolvedValue({ ok: true });
describe('Seite: Vorgangsansicht', () => {
describe('Szenario: Admin + Liste gefüllt', () => {
it('ändert den Namen nach Speichern', async () => {
const testData = structuredClone(baseData);
const oldName = testData.crimesList[0].name;
test.todo('Share Link disabled wenn Liste leer');
describe('Szenario: Admin + Liste gefüllt', () => {
test.todo('Share Link Link generierung richtig');
render(TatortListPage, { props: { data: testData } });
it('ändert den Namen nach Speichern', async () => {
const testData = structuredClone(baseData);
const oldName = testData.crimesList[0].name;
const newName = 'Fall-B';
const list = testData.crimesList
const vorgangToken = testData.vorgang.vorgangToken
// Minimaler fetch-Mock
global.fetch = vi.fn().mockResolvedValue({ ok: true }) as typeof fetch;
const firstItem = screen.getAllByTestId('test-list-item')[0];
await fireEvent.click(within(firstItem).getByTestId('edit-button'));
const { getAllByTestId } = render(TatortListPage, { props: { data: testData } });
const input = within(firstItem).getByRole('textbox');
await fireEvent.input(input, { target: { value: 'Fall-B' } });
const firstItem = getAllByTestId('test-list-item')[0];
const editButton = within(firstItem).getByTestId('edit-button');
await fireEvent.click(editButton);
await fireEvent.click(within(firstItem).getByTestId('commit-button'));
const input = within(firstItem).getByTestId('test-input');
expect(input).toHaveValue(oldName)
await fireEvent.input(input, { target: { value: newName } });
// Erwartung: fetch wurde aufgerufen
expect(global.fetch).toHaveBeenCalledWith(
expect.stringContaining(`/api/list/${testData.vorgang.vorgangToken}/${oldName}`),
expect.any(Object)
);
const commitButton = within(firstItem).getByTestId('commit-button');
await fireEvent.click(commitButton);
// Erwartung: neuer Name ist sofort im DOM sichtbar
expect(within(firstItem).getByRole('textbox')).toHaveValue('Fall-B');
// const fetchMock = global.fetch as ReturnType<typeof vi.fn>;
// console.log('Fetch calls:', fetchMock.mock.calls);
});
// // Erwartung: fetch wurde aufgerufen
// expect(global.fetch).toHaveBeenCalledWith(
// expect.stringContaining(`/api/list/${vorgangToken}/${oldName}`),
// expect.objectContaining({
// method: 'PUT',
// headers: { 'Content-Type': 'application/json' },
// body: JSON.stringify({vorgangToken, oldName, newName})
// })
// );
it('entfernt das Listenelement nach Löschen', async () => {
const testData = structuredClone(baseData);
testData.url = new URL('https://example.com/vorgang-1'); // Fix für Invalid URL
const toDelete = testData.crimesList[0];
// expect(invalidateAll).toHaveBeenCalled();
// Erwartung: neuer Name ist sofort im DOM sichtbar
// expect(within(firstItem).getByRole('textbox')).toHaveValue(newName);
// const editedLink = within(firstItem).getByRole('link');
// const editedExpectedHref = `/view/${vorgangToken}/${newName}?pin=${testData.vorgang.vorgangPIN}`;
global.fetch = vi.fn().mockResolvedValue({ ok: true });
// expect(editedLink).toBeInTheDocument();
// expect(editedLink).toHaveAttribute('href', editedExpectedHref);
// expect(editedLink).toHaveAttribute('title', newName);
});
render(TatortListPage, { props: { data: testData } });
const deletedFirstItem = screen.getAllByTestId('test-list-item')[0];
// it('entfernt das Listenelement nach Löschen', async () => {
// const testData = structuredClone(baseData);
// testData.url = new URL('https://example.com/vorgang-1'); // Fix für Invalid URL
// const toDelete = testData.crimesList[0];
// global.fetch = vi.fn().mockResolvedValue({ ok: true });
const deletedLink = within(deletedFirstItem).getByRole('link');
// render(TatortListPage, { props: { data: testData } });
// const deletedFirstItem = screen.getAllByTestId('test-list-item')[0];
// const deletedLink = within(deletedFirstItem).getByRole('link');
// const deletedExpectedHref = `/view/${testData.vorgang.vorgangToken}/${toDelete.name}?pin=${testData.vorgang.vorgangPIN}`;
const deletedExpectedHref = `/view/${testData.vorgang.vorgangToken}/${toDelete.name}?pin=${testData.vorgang.vorgangPIN}`;
// expect(deletedLink).toBeInTheDocument();
// expect(deletedLink).toHaveAttribute('href', deletedExpectedHref);
// expect(deletedLink).toHaveAttribute('title', toDelete.name);
// await fireEvent.click(within(deletedFirstItem).getByTestId('delete-button'));
expect(deletedLink).toBeInTheDocument();
// // Erwartung: fetch wurde aufgerufen
// expect(global.fetch).toHaveBeenCalledWith(
// expect.stringContaining(`/api/vorgang-1/${toDelete.name}`),
// expect.any(Object)
// );
expect(deletedLink).toHaveAttribute('href', deletedExpectedHref);
expect(deletedLink).toHaveAttribute('title', toDelete.name);
await fireEvent.click(within(deletedFirstItem).getByTestId('delete-button'));
// Erwartung: fetch wurde aufgerufen
expect(global.fetch).toHaveBeenCalledWith(
expect.stringContaining(`/api/vorgang-1/${toDelete.name}`),
expect.any(Object)
);
// Erwartung: Element ist nicht mehr im DOM
expect(within(deletedFirstItem).getByRole('textbox')).toHaveValue(toDelete.name);
});
});
// // Erwartung: Element ist nicht mehr im DOM
// expect(within(deletedFirstItem).getByRole('textbox')).toHaveValue(toDelete.name);
// });
});
});

View File

@@ -9,19 +9,21 @@ describe('Seite: Vorgangsansicht', () => {
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}});
const testData = { ...baseData, crimesList: [] };
const { getByTestId } = render(TatortListPage, {props:{data: testData}});
expect(getByTestId('empty-list')).toBeInTheDocument();
expect(getByTestId('empty-list')).toBeInTheDocument();
});
it('zeigt keinen Listeneintrag', () => {
const items = screen.queryAllByTestId('test-list-item');
expect(items).toHaveLength(0);
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', () => {
it('rendert mindestens ein Listenelement bei vorhandenen crimesList-Daten', () => {
const testData = { ...baseData };
const { queryAllByTestId } = render(TatortListPage, {props:{data: testData}});
const items = queryAllByTestId('test-list-item');
@@ -65,7 +67,9 @@ describe('Seite: Vorgangsansicht', () => {
expect(items.length).toBeGreaterThan(0);
});
});
test.todo('Modal testen, wenn open')
});
describe('Szenario: Viewer + Liste gefüllt', () => {
const testData = { ...baseData, user: { ...baseData.user, admin: false }};
@@ -80,6 +84,6 @@ describe('Seite: Vorgangsansicht', () => {
});
test.todo('zeigt keinen Share-Link oder PIN')
test.todo('Modal testen, wenn open')
});
});