thats-me/backend/tests/Feature/Settings/DeleteUserMediaCleanupTest.php
Kevin Adametz b262a6771f Backend: Medien-Typen, Sprachnotizen, Event-Felder und Sync-Härtung
- Event-Medien tragen Typ (image/video/audio), Dauer und Notiz; Videos
  bekommen ein Poster, Audio wird per ffmpeg nach AAC (audio/mp4)
  gewandelt, Originale werden mit Range-Unterstützung gestreamt.
- Upload nimmt eine Notiz (caption) direkt mit, PATCH ändert sie später.
- Neue Event-Felder: Zeitraum (end_date), Kategorie, Personen, Meilenstein.
  Regeln zentral in EventFields, damit CRUD und Sync gleich prüfen.
- Titel darf leer sein: ein Event entsteht mit dem ersten Eintrag.
- Artisan-Befehl media:transcode-voice-notes wandelt alte WebM/Ogg-Notizen,
  die Safari nicht abspielen kann.
- Login-Throttling, Settings-Validierung, Sync-Fehlercodes ohne Rohtext.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 07:00:35 +00:00

42 lines
1.4 KiB
PHP

<?php
use App\Models\Event;
use App\Models\EventMedia;
use App\Models\User;
use Illuminate\Support\Facades\Storage;
use Livewire\Volt\Volt;
test('deleting a user removes their media files and settings background', function () {
Storage::fake('local');
$user = User::factory()->create(['password' => 'password']);
$event = Event::factory()->create(['user_id' => $user->id]);
$media = EventMedia::factory()->create([
'user_id' => $user->id,
'event_id' => $event->id,
'path' => "event-media/{$user->id}/original.jpg",
'preview_path' => "event-media/{$user->id}/preview.jpg",
'thumbnail_path' => "event-media/{$user->id}/thumb.jpg",
]);
$background = "settings-media/{$user->id}/background.jpg";
Storage::disk('local')->put($media->path, 'original');
Storage::disk('local')->put($media->preview_path, 'preview');
Storage::disk('local')->put($media->thumbnail_path, 'thumb');
Storage::disk('local')->put($background, 'background');
$this->actingAs($user);
Volt::test('settings.delete-user-form')
->set('password', 'password')
->call('deleteUser')
->assertHasNoErrors();
Storage::disk('local')->assertMissing($media->path);
Storage::disk('local')->assertMissing($media->preview_path);
Storage::disk('local')->assertMissing($media->thumbnail_path);
Storage::disk('local')->assertMissing($background);
expect($user->fresh())->toBeNull();
});