Add skill groups and GM character owner transfer across stack
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
namespace RpgRoller.Tests;
|
||||
|
||||
public sealed class ServiceSkillGroupAndOwnershipTests
|
||||
{
|
||||
[Fact]
|
||||
public void SkillGroups_CanBeManagedAndAssignedWithinCharacterScope()
|
||||
{
|
||||
using var harness = ServiceTestSupport.CreateHarness(4, 3, 2);
|
||||
var service = harness.Service;
|
||||
|
||||
service.Register("gm", "Password123", "GM");
|
||||
service.Register("owner", "Password123", "Owner");
|
||||
service.Register("other", "Password123", "Other");
|
||||
|
||||
var gmSession = ServiceTestSupport.GetValue(service.Login("gm", "Password123")).SessionToken;
|
||||
var ownerSession = ServiceTestSupport.GetValue(service.Login("owner", "Password123")).SessionToken;
|
||||
var otherSession = ServiceTestSupport.GetValue(service.Login("other", "Password123")).SessionToken;
|
||||
|
||||
var campaign = ServiceTestSupport.GetValue(service.CreateCampaign(gmSession, "Main", "d6"));
|
||||
var ownerCharacter = ServiceTestSupport.GetValue(service.CreateCharacter(ownerSession, "Owner Char", campaign.Id));
|
||||
var otherCharacter = ServiceTestSupport.GetValue(service.CreateCharacter(otherSession, "Other Char", campaign.Id));
|
||||
|
||||
var ownerGroup = ServiceTestSupport.GetValue(service.CreateSkillGroup(ownerSession, ownerCharacter.Id, "Combat"));
|
||||
Assert.False(service.CreateSkillGroup(ownerSession, otherCharacter.Id, "Not Allowed").Succeeded);
|
||||
|
||||
Assert.False(service.UpdateSkillGroup(otherSession, ownerGroup.Id, "Renamed by Other").Succeeded);
|
||||
var renamedGroup = ServiceTestSupport.GetValue(service.UpdateSkillGroup(gmSession, ownerGroup.Id, "Battle"));
|
||||
Assert.Equal("Battle", renamedGroup.Name);
|
||||
|
||||
var skill = ServiceTestSupport.GetValue(service.CreateSkill(ownerSession, ownerCharacter.Id, "Strike", "2D+1", 1, true, renamedGroup.Id));
|
||||
Assert.Equal(renamedGroup.Id, skill.SkillGroupId);
|
||||
|
||||
var otherGroup = ServiceTestSupport.GetValue(service.CreateSkillGroup(otherSession, otherCharacter.Id, "Other Group"));
|
||||
Assert.False(service.UpdateSkill(ownerSession, skill.Id, "Strike", "2D+1", 1, true, otherGroup.Id).Succeeded);
|
||||
|
||||
var ungroupedSkill = ServiceTestSupport.GetValue(service.UpdateSkill(ownerSession, skill.Id, "Strike", "2D+1", 1, true, null));
|
||||
Assert.Null(ungroupedSkill.SkillGroupId);
|
||||
|
||||
var ownerView = ServiceTestSupport.GetValue(service.GetCampaign(ownerSession, campaign.Id));
|
||||
Assert.Single(ownerView.SkillGroups);
|
||||
Assert.Equal(ownerCharacter.Id, ownerView.SkillGroups[0].CharacterId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CharacterOwnerTransfer_RequiresGmPrivileges()
|
||||
{
|
||||
using var harness = ServiceTestSupport.CreateHarness();
|
||||
var service = harness.Service;
|
||||
|
||||
service.Register("gm", "Password123", "GM");
|
||||
service.Register("owner", "Password123", "Owner");
|
||||
service.Register("receiver", "Password123", "Receiver");
|
||||
|
||||
var gmSession = ServiceTestSupport.GetValue(service.Login("gm", "Password123")).SessionToken;
|
||||
var ownerSession = ServiceTestSupport.GetValue(service.Login("owner", "Password123")).SessionToken;
|
||||
var receiverSession = ServiceTestSupport.GetValue(service.Login("receiver", "Password123")).SessionToken;
|
||||
|
||||
var campaign = ServiceTestSupport.GetValue(service.CreateCampaign(gmSession, "Main", "d6"));
|
||||
var character = ServiceTestSupport.GetValue(service.CreateCharacter(ownerSession, "Transfer Me", campaign.Id));
|
||||
Assert.True(service.ActivateCharacter(ownerSession, character.Id).Succeeded);
|
||||
|
||||
var ownerTransferAttempt = service.UpdateCharacter(ownerSession, character.Id, "Transfer Me", campaign.Id, "receiver");
|
||||
Assert.False(ownerTransferAttempt.Succeeded);
|
||||
|
||||
var missingOwnerAttempt = service.UpdateCharacter(gmSession, character.Id, "Transfer Me", campaign.Id, "missing-user");
|
||||
Assert.False(missingOwnerAttempt.Succeeded);
|
||||
|
||||
var gmTransfer = ServiceTestSupport.GetValue(service.UpdateCharacter(gmSession, character.Id, "Transferred", campaign.Id, "receiver"));
|
||||
var receiver = service.GetUserBySession(receiverSession);
|
||||
Assert.NotNull(receiver);
|
||||
Assert.Equal(receiver!.Id, gmTransfer.OwnerUserId);
|
||||
|
||||
var previousOwnerMe = ServiceTestSupport.GetValue(service.GetMe(ownerSession));
|
||||
Assert.Null(previousOwnerMe.ActiveCharacterId);
|
||||
|
||||
Assert.False(service.ActivateCharacter(ownerSession, character.Id).Succeeded);
|
||||
Assert.True(service.ActivateCharacter(receiverSession, character.Id).Succeeded);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user