mirror of
https://github.com/ericasch6/scrum-poker-internal.git
synced 2026-10-13 16:32:09 +00:00
130 lines
4.1 KiB
PHP
130 lines
4.1 KiB
PHP
<?php
|
|
|
|
use App\Models\Room;
|
|
use App\Models\User;
|
|
use Inertia\Testing\AssertableInertia as Assert;
|
|
|
|
function createEmbeddedRoom(array $attributes = []): Room
|
|
{
|
|
return Room::create([
|
|
'title' => '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();
|
|
});
|