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>
This commit is contained in:
parent
f79dcb9928
commit
b262a6771f
59 changed files with 11879 additions and 197 deletions
|
|
@ -0,0 +1,42 @@
|
|||
<?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();
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue