add conditional route and crimeList View refactoring + tests

This commit is contained in:
2025-09-26 10:04:24 +02:00
parent ca88a541c8
commit 59abf0880d
3 changed files with 23 additions and 2 deletions

View File

@@ -12,6 +12,7 @@
import { invalidateAll } from '$app/navigation'; import { invalidateAll } from '$app/navigation';
import NameItemEditor from '$lib/components/NameItemEditor.svelte'; import NameItemEditor from '$lib/components/NameItemEditor.svelte';
import EmptyList from '$lib/components/EmptyList.svelte'; import EmptyList from '$lib/components/EmptyList.svelte';
import { ROUTE_NAMES } from '../../../index.js';
//Seite für die Tatort-Liste //Seite für die Tatort-Liste
let { data } = $props(); let { data } = $props();
@@ -144,7 +145,7 @@ Mit freundlichen Grüßen,
<div class=" flex gap-x-4"> <div class=" flex gap-x-4">
<a <a
data-testid="crime-link" data-testid="crime-link"
href="/view/{vorgangToken}/{item.name}?pin={vorgangPIN}" href="{ROUTE_NAMES.CRIME(vorgangToken, item.name, vorgangPIN)}"
class=" flex justify-between gap-x-6 py-5" class=" flex justify-between gap-x-6 py-5"
aria-label="/view/{vorgangToken}/{item.name}?pin={vorgangPIN}" aria-label="/view/{vorgangToken}/{item.name}?pin={vorgangPIN}"
title={item.name} title={item.name}

View File

@@ -7,10 +7,14 @@ export const ROUTE_NAMES = {
USERMGMT: '/user-management', USERMGMT: '/user-management',
// (token-based) // (token-based)
// `pin` param is optional
VORGANG: (vorgangToken: string, vorgangPIN: string) => VORGANG: (vorgangToken: string, vorgangPIN: string) =>
vorgangPIN ? `/list/${vorgangToken}?pin=${vorgangPIN}` : `/list/${vorgangToken}`, vorgangPIN ? `/list/${vorgangToken}?pin=${vorgangPIN}` : `/list/${vorgangToken}`,
CRIME: (vorgangToken: string, tatort: string) => `/view/${vorgangToken}/${tatort}`, CRIME: (vorgangToken: string, tatort: string, vorgangPIN: string) =>
vorgangPIN
? `/view/${vorgangToken}/${tatort}?pin=${vorgangPIN}`
: `/view/${vorgangToken}/${tatort}`,
// Anmeldung: actions // Anmeldung: actions
ANMELDUNG_LOGIN: '/anmeldung?/login', ANMELDUNG_LOGIN: '/anmeldung?/login',

View File

@@ -2,6 +2,7 @@ import { render, screen, within } from '@testing-library/svelte';
import { describe, expect, it, test } from 'vitest'; import { describe, expect, it, test } from 'vitest';
import TatortListPage from '../src/routes/(token-based)/list/[vorgang]/+page.svelte'; import TatortListPage from '../src/routes/(token-based)/list/[vorgang]/+page.svelte';
import { baseData } from './fixtures'; import { baseData } from './fixtures';
import { ROUTE_NAMES } from '../src/routes';
describe('Seite: Vorgangsansicht', () => { describe('Seite: Vorgangsansicht', () => {
test.todo('zeigt PIN und Share-Link, wenn Admin'); test.todo('zeigt PIN und Share-Link, wenn Admin');
@@ -84,4 +85,19 @@ describe('Seite: Vorgangsansicht', () => {
test.todo('zeigt keinen Share-Link oder PIN'); test.todo('zeigt keinen Share-Link oder PIN');
}); });
describe('Teste Links auf Korrektheit', () => {
it('Überprüfe Links', () => {
const crimesListOneItem = baseData.crimesList.slice(0, 1);
const crimeObj = crimesListOneItem[0];
const vorgObj = baseData.vorgangList[0]
const expectedURL = ROUTE_NAMES.CRIME(vorgObj.vorgangToken, crimeObj.name, vorgObj.vorgangPIN)
render(TatortListPage, { props: { data: { ...baseData, crimesList: crimesListOneItem } } });
const listItem = screen.getByTestId("test-list-item");
const linkElement = within(listItem).getByRole('link');
expect(linkElement).toBeInTheDocument();
expect(linkElement).toHaveAttribute('href', expectedURL);
});
});
}); });