Fix share assets, shared photo UI, and live show expiry
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled

This commit is contained in:
Codex Agent
2026-02-06 07:30:30 +01:00
parent 18b4f36fcf
commit b14435df8b
12 changed files with 352 additions and 85 deletions

View File

@@ -10,6 +10,7 @@ use App\Models\Tenant;
use App\Services\EventJoinTokenService;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Storage;
use Tests\TestCase;
class PhotoShareLinkTest extends TestCase
@@ -64,13 +65,18 @@ class PhotoShareLinkTest extends TestCase
public function test_share_payload_exposes_public_photo_data(): void
{
Config::set('filesystems.default', 'public');
Storage::fake('public');
$tenant = Tenant::factory()->create();
$event = Event::factory()->for($tenant)->create(['status' => 'published']);
$task = Task::factory()->for($tenant)->create();
$photo = Photo::factory()->for($event)->create([
'status' => 'approved',
'task_id' => $task->id,
'file_path' => 'photos/share-test.jpg',
'thumbnail_path' => 'photos/thumbnails/share-test.jpg',
]);
Storage::disk('public')->put('photos/share-test.jpg', 'photo');
$share = PhotoShareLink::factory()->for($photo)->create([
'expires_at' => now()->addDay(),
@@ -95,5 +101,16 @@ class PhotoShareLinkTest extends TestCase
'buttons',
],
]);
$assetUrl = $response->json('photo.image_urls.full');
$this->assertIsString($assetUrl);
$this->assertNotNull(parse_url($assetUrl, PHP_URL_SCHEME));
$parsed = parse_url($assetUrl);
$path = (string) ($parsed['path'] ?? '');
$query = $parsed['query'] ?? null;
$assetResponse = $this->get($path.($query ? "?{$query}" : ''));
$assetResponse->assertOk();
}
}

View File

@@ -15,7 +15,8 @@ class LiveShowDataModelTest extends TestCase
public function test_event_can_ensure_and_rotate_live_show_token(): void
{
$event = Event::factory()->create();
$eventDate = now()->addDays(1)->startOfDay();
$event = Event::factory()->create(['date' => $eventDate]);
$token = $event->ensureLiveShowToken();
@@ -23,6 +24,7 @@ class LiveShowDataModelTest extends TestCase
$this->assertSame(64, strlen($token));
$this->assertSame($token, $event->refresh()->live_show_token);
$this->assertNotNull($event->live_show_token_rotated_at);
$this->assertSame($eventDate->copy()->addDay()->endOfDay()->toIso8601String(), $event->live_show_token_expires_at?->toIso8601String());
$rotated = $event->rotateLiveShowToken();
@@ -30,6 +32,24 @@ class LiveShowDataModelTest extends TestCase
$this->assertSame(64, strlen($rotated));
$this->assertNotSame($token, $rotated);
$this->assertSame($rotated, $event->refresh()->live_show_token);
$this->assertSame($eventDate->copy()->addDay()->endOfDay()->toIso8601String(), $event->live_show_token_expires_at?->toIso8601String());
}
public function test_live_show_token_expiry_updates_when_event_date_changes(): void
{
$eventDate = now()->addDays(3)->startOfDay();
$event = Event::factory()->create(['date' => $eventDate]);
$event->ensureLiveShowToken();
$event->refresh();
$this->assertSame($eventDate->copy()->addDay()->endOfDay()->toIso8601String(), $event->live_show_token_expires_at?->toIso8601String());
$newDate = now()->addDays(7)->startOfDay();
$event->update(['date' => $newDate]);
$event->refresh();
$this->assertSame($newDate->copy()->addDay()->endOfDay()->toIso8601String(), $event->live_show_token_expires_at?->toIso8601String());
}
public function test_photo_live_status_is_cast_and_defaults_to_none(): void

View File

@@ -8,11 +8,13 @@ class LiveShowLinkControllerTest extends TenantTestCase
{
public function test_live_show_link_response_includes_qr_code_and_url(): void
{
$eventDate = now()->addDays(2)->startOfDay();
$event = Event::factory()
->for($this->tenant)
->create([
'name' => ['de' => 'Live-Show Test', 'en' => 'Live Show Test'],
'slug' => 'live-show-link-test',
'date' => $eventDate,
]);
$response = $this->authenticatedRequest('GET', "/api/v1/tenant/events/{$event->slug}/live-show/link");
@@ -26,15 +28,18 @@ class LiveShowLinkControllerTest extends TenantTestCase
$this->assertArrayHasKey('url', $data);
$this->assertArrayHasKey('qr_code_data_url', $data);
$this->assertArrayHasKey('rotated_at', $data);
$this->assertArrayHasKey('expires_at', $data);
$this->assertIsString($data['token']);
$this->assertIsString($data['url']);
$this->assertIsString($data['qr_code_data_url']);
$this->assertStringStartsWith('data:image/png;base64,', $data['qr_code_data_url']);
$this->assertNotNull($data['rotated_at']);
$this->assertNotNull($data['expires_at']);
$expectedBase = rtrim((string) config('app.url'), '/');
$this->assertSame("{$expectedBase}/show/{$data['token']}", $data['url']);
$this->assertSame($eventDate->copy()->addDay()->endOfDay()->toIso8601String(), $data['expires_at']);
}
public function test_rotate_live_show_link_changes_token(): void