- Lange Namen werden am Ende gekürzt (vorher substr(-33): "Bildschirmfoto…" wurde zu "ldschirmfoto…", der Namensanfang fiel weg) - Whitespace inkl. geschütztem Leerzeichen (macOS-Screenshots) wird zu "-", damit der Dateiname ohne Encoding in URLs funktioniert - Fallback "datei", wenn nach der Bereinigung nichts Verwertbares übrig bleibt - 5 Unit-Tests für Kürzung, Whitespace, Sonderzeichen und Fallback Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
34 lines
1.4 KiB
PHP
34 lines
1.4 KiB
PHP
<?php
|
|
|
|
use App\Services\Slim;
|
|
|
|
it('kuerzt lange Dateinamen hinten und behaelt die Endung', function (): void {
|
|
// Frueher lieferte substr($str, -33) hier "ldschirmfoto-2026-08-17-um-11.png"
|
|
// - der Anfang des Namens fiel weg.
|
|
$name = Slim::sanitizeFileName('Bildschirmfoto 2026-08-17 um 11.png');
|
|
|
|
expect($name)->toStartWith('Bildschirmfoto')
|
|
->and($name)->toEndWith('.png')
|
|
->and(strlen($name))->toBeLessThanOrEqual(33);
|
|
});
|
|
|
|
it('ersetzt Leerzeichen, damit der Name ohne Encoding in eine URL passt', function (): void {
|
|
expect(Slim::sanitizeFileName('Bild Kersrin.jpeg'))->toBe('Bild-Kersrin.jpeg')
|
|
// Geschuetztes Leerzeichen (macOS-Screenshots) zaehlt ebenfalls als Whitespace
|
|
->and(Slim::sanitizeFileName("Foto\u{00A0}Neu.png"))->toBe('Foto-Neu.png');
|
|
});
|
|
|
|
it('laesst kurze, saubere Namen unveraendert', function (): void {
|
|
expect(Slim::sanitizeFileName('IMG_6524.jpeg'))->toBe('IMG_6524.jpeg')
|
|
->and(Slim::sanitizeFileName('ruth-thomas.jpg'))->toBe('ruth-thomas.jpg');
|
|
});
|
|
|
|
it('entfernt unerlaubte Zeichen und Punktfolgen', function (): void {
|
|
expect(Slim::sanitizeFileName('re/port*?.png'))->toBe('report.png')
|
|
->and(Slim::sanitizeFileName('archiv..tar.gz'))->toBe('archivtar.gz');
|
|
});
|
|
|
|
it('liefert auch ohne verwertbaren Namen etwas Brauchbares', function (): void {
|
|
expect(Slim::sanitizeFileName('***.png'))->toBe('datei.png')
|
|
->and(Slim::sanitizeFileName('bild'))->toBe('bild');
|
|
});
|