Support character unlinking and global campaign options

This commit is contained in:
2026-02-26 17:50:08 +01:00
parent 6f94b1ba95
commit ac5acd77f0
12 changed files with 176 additions and 31 deletions

View File

@@ -159,4 +159,33 @@ public sealed class CampaignApiTests : ApiTestBase
Assert.DoesNotContain(usersAfterDelete, user => user.Id == player.Id);
Assert.Contains(usersAfterDelete, user => user.Id == gm.Id);
}
[Fact]
public async Task CampaignOptionsEndpoint_ReturnsCampaignsBeyondVisibleCampaignList()
{
using var factory = CreateFactory(6, 5, 4);
using var gmClient = factory.CreateClient(new() { AllowAutoRedirect = false });
using var otherGmClient = factory.CreateClient(new() { AllowAutoRedirect = false });
using var playerClient = factory.CreateClient(new() { AllowAutoRedirect = false });
await RegisterAsync(gmClient, "gm-options-1", "Password123", "GM One");
await LoginAsync(gmClient, "gm-options-1", "Password123");
await RegisterAsync(otherGmClient, "gm-options-2", "Password123", "GM Two");
await LoginAsync(otherGmClient, "gm-options-2", "Password123");
await RegisterAsync(playerClient, "player-options", "Password123", "Player");
await LoginAsync(playerClient, "player-options", "Password123");
var firstCampaign = await PostAsync<CreateCampaignRequest, CampaignDetails>(gmClient, "/api/campaigns", new("Alpha Visible", "d6"));
var secondCampaign = await PostAsync<CreateCampaignRequest, CampaignDetails>(otherGmClient, "/api/campaigns", new("Beta Available", "d6"));
var playerVisibleCampaigns = await GetAsync<IReadOnlyList<CampaignDetails>>(playerClient, "/api/campaigns");
Assert.Empty(playerVisibleCampaigns);
var playerCampaignOptions = await GetAsync<IReadOnlyList<CampaignOption>>(playerClient, "/api/campaigns/options");
Assert.Equal(2, playerCampaignOptions.Count);
Assert.Contains(playerCampaignOptions, option => option.Id == firstCampaign.Id);
Assert.Contains(playerCampaignOptions, option => option.Id == secondCampaign.Id);
}
}