78 lines
2.5 KiB
TypeScript
78 lines
2.5 KiB
TypeScript
import { fireEvent, getAllByTestId, queryAllByTestId, render, screen, within } from '@testing-library/svelte';
|
|
import { describe, expect, it, vi } from "vitest";
|
|
import TatortListPage from "../src/routes/(token-based)/list/[vorgang]/+page.svelte";
|
|
import { baseData } from './fixtures';
|
|
|
|
|
|
// Mock für invalidateAll
|
|
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;
|
|
|
|
render(TatortListPage, { props: { data: testData } });
|
|
|
|
const firstItem = screen.getAllByTestId('test-list-item')[0];
|
|
await fireEvent.click(within(firstItem).getByTestId('edit-button'));
|
|
|
|
const input = within(firstItem).getByRole('textbox');
|
|
await fireEvent.input(input, { target: { value: 'Fall-B' } });
|
|
|
|
await fireEvent.click(within(firstItem).getByTestId('commit-button'));
|
|
|
|
// Erwartung: fetch wurde aufgerufen
|
|
expect(global.fetch).toHaveBeenCalledWith(
|
|
expect.stringContaining(`/api/list/${testData.vorgang.vorgangToken}/${oldName}`),
|
|
expect.any(Object)
|
|
);
|
|
|
|
// Erwartung: neuer Name ist sofort im DOM sichtbar
|
|
expect(within(firstItem).getByRole('textbox')).toHaveValue('Fall-B');
|
|
|
|
});
|
|
|
|
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 });
|
|
|
|
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}`;
|
|
|
|
expect(deletedLink).toBeInTheDocument();
|
|
|
|
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);
|
|
});
|
|
});
|
|
});
|
|
|
|
|