Implement admin back-pass flow and guarded admin actions
This commit is contained in:
@@ -224,6 +224,32 @@ public class StateTests
|
||||
Assert.Equal(nameof(Phase.Suggest), me.GetProperty("currentPhase").GetString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Phase_prev_with_granted_joker_moves_player_back_once_and_consumes_it()
|
||||
{
|
||||
await using var factory = new TestWebApplicationFactory();
|
||||
var admin = factory.CreateClientWithCookies();
|
||||
await admin.RegisterAsync("admin", admin: true);
|
||||
|
||||
var player = factory.CreateClientWithCookies();
|
||||
await player.RegisterAsync("jokerback");
|
||||
await player.AdvanceToVoteAsync("Joker back seed");
|
||||
|
||||
var grant = await admin.PostAsJsonAsync("/api/admin/joker", new { playerId = await player.GetProfileIdAsync() });
|
||||
grant.EnsureSuccessStatusCode();
|
||||
|
||||
var back = await player.PostAsJsonAsync("/api/me/phase/prev", new { });
|
||||
back.EnsureSuccessStatusCode();
|
||||
|
||||
var meAfterBack = await player.GetFromJsonAsync<JsonElement>("/api/me");
|
||||
Assert.Equal(nameof(Phase.Suggest), meAfterBack.GetProperty("currentPhase").GetString());
|
||||
Assert.False(meAfterBack.GetProperty("hasJoker").GetBoolean());
|
||||
|
||||
await player.PostAsJsonAsync("/api/me/phase/next", new { });
|
||||
var denied = await player.PostAsJsonAsync("/api/me/phase/prev", new { });
|
||||
Assert.Equal(HttpStatusCode.BadRequest, denied.StatusCode);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task State_endpoint_requires_auth_and_counts()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user