80 lines
4.4 KiB
C#
80 lines
4.4 KiB
C#
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);
|
|
}
|
|
}
|