mirror of
https://github.com/ericasch6/scrum-poker-internal.git
synced 2026-10-13 16:32:09 +00:00
Keep guest rooms moderated and restore owner moderation
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
use App\Enums\RoomStateChange;
|
||||
use App\Events\RoomStateChanged;
|
||||
use App\Jobs\RemoveAbsentPlayers;
|
||||
use App\Models\Room;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
@@ -37,7 +38,7 @@ test('a guest automatically joins the embedded room', function () {
|
||||
$player = $room->players()->sole();
|
||||
|
||||
expect($player->user_id)->toBeNull()
|
||||
->and($player->is_moderator)->toBeFalse();
|
||||
->and($player->is_moderator)->toBeTrue();
|
||||
|
||||
$response->assertSessionHas("room_players.{$room->id}", $player->id);
|
||||
});
|
||||
@@ -80,10 +81,64 @@ test('an authenticated user automatically joins the embedded room', function ()
|
||||
'room_id' => $room->id,
|
||||
'user_id' => $user->id,
|
||||
'name' => 'Nico',
|
||||
'is_moderator' => false,
|
||||
'is_moderator' => true,
|
||||
]);
|
||||
});
|
||||
|
||||
test('a persistent room owner regains moderation through the embedded room', function () {
|
||||
$owner = User::factory()->create();
|
||||
$room = createEmbeddedRoom([
|
||||
'owner_id' => $owner->id,
|
||||
'is_persistent' => true,
|
||||
]);
|
||||
$oldModerator = $room->players()->create([
|
||||
'user_id' => $owner->id,
|
||||
'name' => 'Nico',
|
||||
'is_moderator' => true,
|
||||
'last_seen_at' => now()->subHour(),
|
||||
]);
|
||||
|
||||
app()->call([new RemoveAbsentPlayers, 'handle']);
|
||||
|
||||
$this->actingAs($owner)
|
||||
->withSession(["room_players.{$room->id}" => $oldModerator->id])
|
||||
->get(route('embedded.room', [
|
||||
'join_code' => $room->join_code,
|
||||
'player_name' => 'Nico',
|
||||
]))
|
||||
->assertOk()
|
||||
->assertInertia(fn (Assert $page) => $page
|
||||
->where('currentPlayer.is_moderator', true));
|
||||
|
||||
expect($room->players()->where('user_id', $owner->id)->sole()->id)->not->toBe($oldModerator->id);
|
||||
});
|
||||
|
||||
test('a persistent room owner does not take over another account session when becoming moderator', function () {
|
||||
$owner = User::factory()->create();
|
||||
$otherUser = User::factory()->create();
|
||||
$room = createEmbeddedRoom([
|
||||
'owner_id' => $owner->id,
|
||||
'is_persistent' => true,
|
||||
]);
|
||||
$otherPlayer = $room->players()->create([
|
||||
'user_id' => $otherUser->id,
|
||||
'name' => 'Anna',
|
||||
]);
|
||||
|
||||
$this->actingAs($owner)
|
||||
->withSession(["room_players.{$room->id}" => $otherPlayer->id])
|
||||
->get(route('embedded.room', [
|
||||
'join_code' => $room->join_code,
|
||||
'player_name' => 'Nico',
|
||||
]))
|
||||
->assertOk()
|
||||
->assertInertia(fn (Assert $page) => $page
|
||||
->where('currentPlayer.is_moderator', true));
|
||||
|
||||
expect($otherPlayer->fresh()->is_moderator)->toBeFalse()
|
||||
->and($room->players()->where('user_id', $owner->id)->sole()->is_moderator)->toBeTrue();
|
||||
});
|
||||
|
||||
test('embedded access reuses the user player and applies a changed display name', function () {
|
||||
$user = User::factory()->create();
|
||||
$room = createEmbeddedRoom();
|
||||
|
||||
Reference in New Issue
Block a user