50 Unit-Tests mit Vitest fuer die Stellen, an denen ein Fehler teuer waere: Besitzstatus, Mehrfachauswahl inklusive Ueberspringen von Dubletten und bereits besessenen Sets, Token-Erzeugung und -Vergleich, Cent-Umrechnung und Slugs. Der Playwright-Smoke-Test laeuft den ganzen Weg: Registrierung des ersten Nutzers, Hersteller anlegen, Set anlegen, auf eine neue Wunschliste setzen, Link holen und als Besucher ohne Konto reservieren. Er nutzt ein eigenes Datenverzeichnis (./data-e2e), das vor jedem Lauf geleert wird. Dabei aufgefallen und behoben: eine spontan aus dem Katalog angelegte Wunschliste war nicht teilbar, weil das Feld isPublic ohne Formular auf false fiel. Ausserdem ist das Sternchen an Pflichtfeldern jetzt aria-hidden, damit der zugaengliche Name des Feldes sauber bleibt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { slugify, uniqueSlug } from '@/lib/slug';
|
|
|
|
describe('Slugs', () => {
|
|
it('schreibt deutsche Umlaute aus', () => {
|
|
expect(slugify('Grüne Kiste')).toBe('gruene-kiste');
|
|
expect(slugify('Öl')).toBe('oel');
|
|
expect(slugify('Straße')).toBe('strasse');
|
|
});
|
|
|
|
it('entfernt uebrige Akzente', () => {
|
|
expect(slugify('Café Déjà vu')).toBe('cafe-deja-vu');
|
|
});
|
|
|
|
it('macht aus Sonderzeichen einzelne Trennstriche', () => {
|
|
expect(slugify('Lego City --- Feuerwehr!')).toBe('lego-city-feuerwehr');
|
|
});
|
|
|
|
it('laesst keine Trennstriche am Rand stehen', () => {
|
|
expect(slugify(' -Playmobil- ')).toBe('playmobil');
|
|
});
|
|
|
|
it('kuerzt sehr lange Namen', () => {
|
|
expect(slugify('a'.repeat(200))).toHaveLength(60);
|
|
});
|
|
});
|
|
|
|
describe('Eindeutige Slugs', () => {
|
|
it('nimmt den Slug direkt, wenn er frei ist', () => {
|
|
expect(uniqueSlug('Lego', [])).toBe('lego');
|
|
});
|
|
|
|
it('haengt einen Zaehler an, bis der Slug frei ist', () => {
|
|
expect(uniqueSlug('Lego', ['lego'])).toBe('lego-2');
|
|
expect(uniqueSlug('Lego', ['lego', 'lego-2'])).toBe('lego-3');
|
|
});
|
|
|
|
it('faellt bei Namen ohne verwertbare Zeichen auf "eintrag" zurueck', () => {
|
|
expect(uniqueSlug('###', [])).toBe('eintrag');
|
|
expect(uniqueSlug('###', ['eintrag'])).toBe('eintrag-2');
|
|
});
|
|
});
|