Files
fotospiel-app/tests/Feature/Tenant/LiveShowLinkControllerTest.php
Codex Agent b14435df8b
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled
Fix share assets, shared photo UI, and live show expiry
2026-02-06 07:30:30 +01:00

66 lines
2.4 KiB
PHP

<?php
namespace Tests\Feature\Tenant;
use App\Models\Event;
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");
$response->assertOk();
$data = $response->json('data');
$this->assertIsArray($data);
$this->assertArrayHasKey('token', $data);
$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
{
$event = Event::factory()
->for($this->tenant)
->create([
'name' => ['de' => 'Live-Show Rotation', 'en' => 'Live Show Rotation'],
'slug' => 'live-show-rotate-test',
]);
$first = $this->authenticatedRequest('GET', "/api/v1/tenant/events/{$event->slug}/live-show/link");
$first->assertOk();
$firstToken = $first->json('data.token');
$rotated = $this->authenticatedRequest('POST', "/api/v1/tenant/events/{$event->slug}/live-show/link/rotate");
$rotated->assertOk();
$rotatedToken = $rotated->json('data.token');
$this->assertIsString($rotatedToken);
$this->assertNotSame($firstToken, $rotatedToken);
}
}