'Fillibri Planning', 'deck_config' => [ 'name' => 'Fibonacci', 'cards' => [ ['key' => '3', 'label' => '3'], ['key' => '5', 'label' => '5'], ], ], ...$attributes, ]); } test('embedded room access sends guests through login and remembers the intended room', function () { $room = createEmbeddedRoom(); $url = route('embedded.room', [ 'join_code' => $room->join_code, 'player_name' => 'Nico', ]); $this->get($url) ->assertRedirect(route('login')) ->assertSessionHas('embedded_login', true) ->assertSessionHas('url.intended', $url); $this->get(route('login')) ->assertInertia(fn (Assert $page) => $page ->component('auth/Login') ->where('rememberByDefault', true)); }); test('an authenticated user automatically joins the embedded room', function () { $user = User::factory()->create(); $room = createEmbeddedRoom(['allow_participants_to_manage_rounds' => true]); $this->actingAs($user) ->get(route('embedded.room', [ 'join_code' => strtolower($room->join_code), 'player_name' => ' Nico ', ])) ->assertOk() ->assertInertia(fn (Assert $page) => $page ->component('embedded/Room') ->where('room.id', $room->id) ->where('room.allow_participants_to_manage_rounds', true) ->where('currentPlayer.name', 'Nico')) ->assertSessionHas("room_players.{$room->id}"); $this->assertDatabaseHas('players', [ 'room_id' => $room->id, 'user_id' => $user->id, 'name' => 'Nico', 'is_moderator' => false, ]); }); test('embedded access reuses the user player and applies a changed display name', function () { $user = User::factory()->create(); $room = createEmbeddedRoom(); $player = $room->players()->create([ 'user_id' => $user->id, 'name' => 'Old name', 'inactive_at' => now(), ]); $this->actingAs($user) ->get(route('embedded.room', [ 'join_code' => $room->join_code, 'player_name' => 'New name', ])) ->assertOk(); expect($room->players()->count())->toBe(1) ->and($player->fresh()->name)->toBe('New name') ->and($player->fresh()->inactive_at)->toBeNull(); }); test('embedded access shows a dedicated error when the display name is taken', function () { $user = User::factory()->create(); $room = createEmbeddedRoom(); $room->players()->create(['name' => 'Nico']); $this->actingAs($user) ->get(route('embedded.room', [ 'join_code' => $room->join_code, 'player_name' => 'Nico', ])) ->assertUnprocessable() ->assertInertia(fn (Assert $page) => $page ->component('embedded/Error') ->where('message', 'Dieser Anzeigename ist in dem Raum bereits vorhanden.')); }); test('embedded access shows a dedicated error for an unknown room code', function () { $this->actingAs(User::factory()->create()) ->get(route('embedded.room', [ 'join_code' => 'ABC234', 'player_name' => 'Nico', ])) ->assertUnprocessable() ->assertInertia(fn (Assert $page) => $page ->component('embedded/Error') ->where('message', 'Dieser Raumcode existiert nicht.')); }); test('embedded logout returns to the same configured room and signs the user out', function () { $user = User::factory()->create(); $room = createEmbeddedRoom(); $this->actingAs($user) ->post(route('embedded.logout', [ 'join_code' => $room->join_code, 'player_name' => 'Nico', ])) ->assertRedirect(route('embedded.room', [ 'join_code' => $room->join_code, 'player_name' => 'Nico', ])); $this->assertGuest(); });