['de', 'en']]); $event = Event::factory()->create([ 'default_locale' => 'de', 'status' => 'published', ]); $token = app(EventJoinTokenService::class)->createToken($event, ['label' => 'test']); $plainToken = $token->plain_token; $emotion = Emotion::factory()->create([ 'name' => ['de' => 'Freude', 'en' => 'Joy'], ]); $task = Task::factory()->create([ 'tenant_id' => $event->tenant_id, 'title' => ['de' => 'Kussmoment', 'en' => 'Kiss Moment'], 'description' => ['de' => 'DE Beschreibung', 'en' => 'EN Description'], 'example_text' => ['de' => 'DE Anleitung', 'en' => 'EN Instructions'], 'emotion_id' => $emotion->id, ]); $collection = TaskCollection::factory()->create([ 'tenant_id' => $event->tenant_id, ]); $collection->tasks()->attach($task->id, ['sort_order' => 1]); $collection->events()->attach($event->id, ['sort_order' => 1]); $response = $this->getJson("/api/v1/events/{$plainToken}/tasks?locale=en"); $response->assertOk(); $response->assertHeader('X-Content-Locale', 'en'); $response->assertJsonCount(1); $response->assertJson([[ 'id' => $task->id, 'title' => 'Kiss Moment', 'description' => 'EN Description', 'instructions' => 'EN Instructions', 'duration' => 3, 'is_completed' => false, ]]); $this->assertSame('emotion-'.$emotion->id, $response->json('0.emotion.slug')); } public function test_it_falls_back_to_event_locale_when_locale_invalid(): void { config(['app.supported_locales' => ['de', 'en']]); $event = Event::factory()->create([ 'default_locale' => 'de', 'status' => 'published', ]); $token = app(EventJoinTokenService::class)->createToken($event, ['label' => 'fallback']); $plainToken = $token->plain_token; $task = Task::factory()->create([ 'tenant_id' => $event->tenant_id, 'title' => ['de' => 'Aufgabe', 'en' => 'Task'], 'description' => ['de' => 'Beschreibung', 'en' => 'Description'], 'example_text' => ['de' => 'Beispiel', 'en' => 'Example'], ]); $collection = TaskCollection::factory()->create([ 'tenant_id' => $event->tenant_id, ]); $collection->tasks()->attach($task->id, ['sort_order' => 1]); $collection->events()->attach($event->id, ['sort_order' => 1]); $response = $this->withHeaders(['Accept-Language' => 'zz-ZZ']) ->getJson("/api/v1/events/{$plainToken}/tasks?locale=it"); $response->assertOk(); $response->assertHeader('X-Content-Locale', 'de'); $response->assertJson([[ 'title' => 'Aufgabe', ]]); } }