for($this->tenant)->create(); GuestNotification::factory()->count(2)->create([ 'tenant_id' => $this->tenant->id, 'event_id' => $event->id, ]); $response = $this->authenticatedRequest('GET', "/api/v1/tenant/events/{$event->slug}/guest-notifications"); $response->assertOk(); $response->assertJsonCount(2, 'data'); } public function test_admin_can_create_broadcast_notification(): void { $event = Event::factory()->for($this->tenant)->create(); $payload = [ 'title' => 'Gruppenfoto gleich', 'message' => 'Kommt bitte zur Bühne, wir starten in 5 Minuten.', 'type' => 'broadcast', 'cta' => [ 'label' => 'Route öffnen', 'url' => 'https://example.com/map', ], 'expires_in_minutes' => 120, ]; $response = $this->authenticatedRequest('POST', "/api/v1/tenant/events/{$event->slug}/guest-notifications", $payload); $response->assertCreated(); $response->assertJsonPath('data.title', 'Gruppenfoto gleich'); $this->assertDatabaseHas('guest_notifications', [ 'event_id' => $event->id, 'title' => 'Gruppenfoto gleich', ]); } public function test_admin_cannot_access_foreign_event(): void { $otherTenantEvent = Event::factory()->create([ 'slug' => 'foreign-'.Str::random(6), ]); $response = $this->authenticatedRequest('POST', "/api/v1/tenant/events/{$otherTenantEvent->slug}/guest-notifications", [ 'title' => 'Hi', 'message' => 'Nope', ]); $response->assertStatus(403); } }