allow anyone controll room option

This commit is contained in:
2026-08-27 15:41:21 +02:00
parent b2c1d67283
commit 72152e2d45
16 changed files with 328 additions and 11 deletions
+82 -2
View File
@@ -102,16 +102,96 @@ test('other votes stay hidden until the moderator reveals the round', function (
->where('room.players.1.vote', '8'));
});
test('only the moderator may reveal cards', function () {
test('round controls remain moderator-only by default', function () {
[$room, , $player] = createVotingRoom();
$session = ["room_players.{$room->id}" => $player->id];
$this->withSession(["room_players.{$room->id}" => $player->id])
$this->withSession($session)
->post(route('room.reveal', $room))
->assertForbidden();
$this->withSession($session)
->post(route('room.next-round', $room))
->assertForbidden();
$this->withSession($session)
->post(route('room.reset', $room))
->assertForbidden();
expect($room->fresh()->revealed_at)->toBeNull();
});
test('the moderator can allow every participant to control the round', function () {
[$room, $moderator, $player] = createVotingRoom();
$room->refresh();
$initialStateVersion = $room->state_version;
$this->withSession(["room_players.{$room->id}" => $moderator->id])
->patch(route('room.permissions.update', $room), [
'allow_participant_controls' => true,
])
->assertNoContent();
$room->refresh();
expect($room->allow_participant_controls)->toBeTrue()
->and($room->state_version)->toBe($initialStateVersion + 1);
$session = ["room_players.{$room->id}" => $player->id];
$this->withSession($session)
->get(route('room.show', $room))
->assertInertia(fn (Assert $page) => $page
->where('room.allow_participant_controls', true));
$this->withSession($session)
->post(route('room.reveal', $room))
->assertNoContent();
$this->withSession($session)
->post(route('room.next-round', $room))
->assertNoContent();
$this->withSession($session)
->post(route('room.vote.store', $room), ['value' => '5'])
->assertNoContent();
$this->withSession($session)
->post(route('room.reset', $room))
->assertNoContent();
expect($room->fresh()->current_round)->toBe(2);
$this->assertDatabaseMissing('votes', [
'room_id' => $room->id,
'round' => 2,
]);
});
test('participants cannot change room permissions', function () {
[$room, , $player] = createVotingRoom();
$this->withSession(["room_players.{$room->id}" => $player->id])
->patch(route('room.permissions.update', $room), [
'allow_participant_controls' => true,
])
->assertForbidden();
expect($room->fresh()->allow_participant_controls)->toBeFalse();
});
test('room permissions require a strict boolean value', function () {
[$room, $moderator] = createVotingRoom();
$this->withSession(["room_players.{$room->id}" => $moderator->id])
->patchJson(route('room.permissions.update', $room), [
'allow_participant_controls' => 'true',
])
->assertJsonValidationErrors('allow_participant_controls');
expect($room->fresh()->allow_participant_controls)->toBeFalse();
});
test('starting the next round clears the revealed state', function () {
[$room, $moderator] = createVotingRoom();