Add skill groups and GM character owner transfer across stack

This commit is contained in:
2026-02-26 13:54:17 +01:00
parent bf3a6fa645
commit 04bc8095e6
31 changed files with 995 additions and 1180 deletions

View File

@@ -52,4 +52,47 @@ public sealed class CampaignApiTests : ApiTestBase
Assert.Equal("Arin Updated", updatedCharacter.Name);
Assert.Equal(otherCampaign.Id, updatedCharacter.CampaignId);
}
}
[Fact]
public async Task SkillGroupsAndOwnerTransfer_WorkThroughApi()
{
using var factory = CreateFactory(6, 4, 5, 3);
using var gmClient = factory.CreateClient(new() { AllowAutoRedirect = false });
using var ownerClient = factory.CreateClient(new() { AllowAutoRedirect = false });
using var receiverClient = factory.CreateClient(new() { AllowAutoRedirect = false });
await RegisterAsync(gmClient, "gm2", "Password123", "GM");
await LoginAsync(gmClient, "gm2", "Password123");
await RegisterAsync(ownerClient, "owner2", "Password123", "Owner");
await LoginAsync(ownerClient, "owner2", "Password123");
await RegisterAsync(receiverClient, "receiver2", "Password123", "Receiver");
await LoginAsync(receiverClient, "receiver2", "Password123");
var campaign = await PostAsync<CreateCampaignRequest, CampaignSummary>(gmClient, "/api/campaigns", new("Grouped Campaign", "d6"));
var character = await PostAsync<CreateCharacterRequest, CharacterSummary>(ownerClient, "/api/characters", new("Grouped Hero", campaign.Id));
var createdGroup = await PostAsync<CreateSkillGroupRequest, SkillGroupSummary>(ownerClient, $"/api/characters/{character.Id}/skill-groups", new("Combat"));
var renamedGroup = await PutAsync<UpdateSkillGroupRequest, SkillGroupSummary>(gmClient, $"/api/skill-groups/{createdGroup.Id}", new("Battle"));
Assert.Equal("Battle", renamedGroup.Name);
var groupedSkill = await PostAsync<CreateSkillRequest, SkillSummary>(ownerClient, $"/api/characters/{character.Id}/skills", new("Strike", "2D+1", 1, true, renamedGroup.Id));
Assert.Equal(renamedGroup.Id, groupedSkill.SkillGroupId);
var ungroupedSkill = await PutAsync<UpdateSkillRequest, SkillSummary>(ownerClient, $"/api/skills/{groupedSkill.Id}", new("Strike", "2D+1", 1, true, null));
Assert.Null(ungroupedSkill.SkillGroupId);
var transferResult = await PutAsync<UpdateCharacterRequest, CharacterSummary>(gmClient, $"/api/characters/{character.Id}", new("Grouped Hero", campaign.Id, "receiver2"));
Assert.Equal("Grouped Hero", transferResult.Name);
var ownerActivate = await ownerClient.PostAsync($"/api/characters/{character.Id}/activate", null);
Assert.Equal(HttpStatusCode.BadRequest, ownerActivate.StatusCode);
var receiverActivate = await receiverClient.PostAsync($"/api/characters/{character.Id}/activate", null);
Assert.Equal(HttpStatusCode.OK, receiverActivate.StatusCode);
var details = await GetAsync<CampaignDetails>(gmClient, $"/api/campaigns/{campaign.Id}");
Assert.Contains(details.SkillGroups, group => group.Id == renamedGroup.Id);
}
}