77 lines
3.8 KiB
C#
77 lines
3.8 KiB
C#
namespace RpgRoller.Tests;
|
|
|
|
public sealed class ServiceSkillRollTests
|
|
{
|
|
[Fact]
|
|
public void CharacterSkillAndRollOperations_CheckAuthorizationAndValidationBranches()
|
|
{
|
|
using var harness = ServiceTestSupport.CreateHarness(3, 4, 5, 6);
|
|
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", "dnd5e"));
|
|
var character = ServiceTestSupport.GetValue(service.CreateCharacter(ownerSession, "Owner Char", campaign.Id));
|
|
|
|
var noPermissionUpdate = service.UpdateCharacter(otherSession, character.Id, "Renamed", campaign.Id);
|
|
Assert.False(noPermissionUpdate.Succeeded);
|
|
|
|
var invalidCharacterName = service.UpdateCharacter(ownerSession, character.Id, "", campaign.Id);
|
|
Assert.False(invalidCharacterName.Succeeded);
|
|
|
|
var missingTargetCampaign = service.UpdateCharacter(ownerSession, character.Id, "Renamed", Guid.NewGuid());
|
|
Assert.False(missingTargetCampaign.Succeeded);
|
|
|
|
var noSkillName = service.CreateSkill(ownerSession, character.Id, "", "1d20", 0, false);
|
|
Assert.False(noSkillName.Succeeded);
|
|
|
|
var invalidExpression = service.CreateSkill(ownerSession, character.Id, "Skill", "5D+4", 0, false);
|
|
Assert.False(invalidExpression.Succeeded);
|
|
|
|
var skill = ServiceTestSupport.GetValue(service.CreateSkill(ownerSession, character.Id, "Skill", "1d20+2", 0, false));
|
|
|
|
var missingSkillUpdate = service.UpdateSkill(ownerSession, Guid.NewGuid(), "X", "1d20", 0, false);
|
|
Assert.False(missingSkillUpdate.Succeeded);
|
|
|
|
var forbiddenSkillUpdate = service.UpdateSkill(otherSession, skill.Id, "X", "1d20", 0, false);
|
|
Assert.False(forbiddenSkillUpdate.Succeeded);
|
|
|
|
var gmSkillUpdate = service.UpdateSkill(gmSession, skill.Id, "GM Edit", "2d6+1", 0, false);
|
|
Assert.True(gmSkillUpdate.Succeeded);
|
|
|
|
var missingRoll = service.RollSkill(ownerSession, Guid.NewGuid(), "public");
|
|
Assert.False(missingRoll.Succeeded);
|
|
|
|
var invalidVisibility = service.RollSkill(ownerSession, skill.Id, "hidden");
|
|
Assert.False(invalidVisibility.Succeeded);
|
|
|
|
var forbiddenRoll = service.RollSkill(otherSession, skill.Id, "public");
|
|
Assert.False(forbiddenRoll.Succeeded);
|
|
|
|
var privateRoll = service.RollSkill(ownerSession, skill.Id, "private");
|
|
var publicRoll = service.RollSkill(ownerSession, skill.Id, "public");
|
|
Assert.True(privateRoll.Succeeded);
|
|
Assert.True(publicRoll.Succeeded);
|
|
|
|
var ownerLog = service.GetCampaignLog(ownerSession, campaign.Id);
|
|
var gmLog = service.GetCampaignLog(gmSession, campaign.Id);
|
|
var outsiderLog = service.GetCampaignLog(otherSession, campaign.Id);
|
|
|
|
Assert.Equal(2, ServiceTestSupport.GetValue(ownerLog).Count);
|
|
Assert.Equal(2, ServiceTestSupport.GetValue(gmLog).Count);
|
|
Assert.False(outsiderLog.Succeeded);
|
|
Assert.All(ServiceTestSupport.GetValue(ownerLog), entry => Assert.NotEmpty(entry.Dice));
|
|
Assert.All(ServiceTestSupport.GetValue(gmLog), entry => Assert.NotEmpty(entry.Dice));
|
|
|
|
var version = service.GetCampaignVersion(ownerSession, campaign.Id);
|
|
var missingVersion = service.GetCampaignVersion(ownerSession, Guid.NewGuid());
|
|
Assert.True(version.Succeeded);
|
|
Assert.False(missingVersion.Succeeded);
|
|
}
|
|
}
|