Refactor backend to remove service command models

This commit is contained in:
2026-02-25 11:11:35 +01:00
parent 50f56fdab7
commit 80938e8f25
16 changed files with 146 additions and 203 deletions

View File

@@ -8,11 +8,11 @@ public sealed class ServiceAuthTests
using var harness = ServiceTestSupport.CreateHarness();
var service = harness.Service;
var invalidUsername = service.Register(new RegisterCommand("", "Password123", "Display"));
var invalidDisplay = service.Register(new RegisterCommand("user", "Password123", ""));
var invalidPassword = service.Register(new RegisterCommand("user", "short", "Display"));
var valid = service.Register(new RegisterCommand("user", "Password123", "Display"));
var duplicate = service.Register(new RegisterCommand("user", "Password123", "Display 2"));
var invalidUsername = service.Register("", "Password123", "Display");
var invalidDisplay = service.Register("user", "Password123", "");
var invalidPassword = service.Register("user", "short", "Display");
var valid = service.Register("user", "Password123", "Display");
var duplicate = service.Register("user", "Password123", "Display 2");
Assert.False(invalidUsername.Succeeded);
Assert.False(invalidDisplay.Succeeded);
@@ -26,11 +26,11 @@ public sealed class ServiceAuthTests
{
using var harness = ServiceTestSupport.CreateHarness();
var service = harness.Service;
service.Register(new RegisterCommand("user", "Password123", "Display"));
service.Register("user", "Password123", "Display");
var invalidUser = service.Login(new LoginCommand("missing", "Password123"));
var invalidPassword = service.Login(new LoginCommand("user", "bad-password"));
var valid = service.Login(new LoginCommand("user", "Password123"));
var invalidUser = service.Login("missing", "Password123");
var invalidPassword = service.Login("user", "bad-password");
var valid = service.Login("user", "Password123");
Assert.False(invalidUser.Succeeded);
Assert.False(invalidPassword.Succeeded);
@@ -50,8 +50,8 @@ public sealed class ServiceAuthTests
using var harness = ServiceTestSupport.CreateHarness(hasher);
var service = harness.Service;
service.Register(new RegisterCommand("user", "Password123", "Display"));
var login = service.Login(new LoginCommand("user", "Password123"));
service.Register("user", "Password123", "Display");
var login = service.Login("user", "Password123");
Assert.True(login.Succeeded);
Assert.Equal(2, hasher.HashCalls);

View File

@@ -8,20 +8,20 @@ public sealed class ServiceCampaignTests
using var harness = ServiceTestSupport.CreateHarness();
var service = harness.Service;
var unauthorizedCampaign = service.CreateCampaign("missing", new CreateCampaignCommand("Name", "d6"));
var unauthorizedCampaign = service.CreateCampaign("missing", "Name", "d6");
Assert.False(unauthorizedCampaign.Succeeded);
service.Register(new RegisterCommand("gm", "Password123", "GM"));
var gmSession = ServiceTestSupport.GetValue(service.Login(new LoginCommand("gm", "Password123"))).SessionToken;
var campaign = ServiceTestSupport.GetValue(service.CreateCampaign(gmSession, new CreateCampaignCommand("Name", "d6")));
service.Register("gm", "Password123", "GM");
var gmSession = ServiceTestSupport.GetValue(service.Login("gm", "Password123")).SessionToken;
var campaign = ServiceTestSupport.GetValue(service.CreateCampaign(gmSession, "Name", "d6"));
var invalidRuleset = service.CreateCampaign(gmSession, new CreateCampaignCommand("Name 2", "unknown"));
var invalidRuleset = service.CreateCampaign(gmSession, "Name 2", "unknown");
Assert.False(invalidRuleset.Succeeded);
var noCampaignCharacter = service.CreateCharacter(gmSession, new CreateCharacterCommand("Hero", Guid.NewGuid()));
var noCampaignCharacter = service.CreateCharacter(gmSession, "Hero", Guid.NewGuid());
Assert.False(noCampaignCharacter.Succeeded);
var character = ServiceTestSupport.GetValue(service.CreateCharacter(gmSession, new CreateCharacterCommand("Hero", campaign.Id)));
var character = ServiceTestSupport.GetValue(service.CreateCharacter(gmSession, "Hero", campaign.Id));
var missingCharacterActivate = service.ActivateCharacter(gmSession, Guid.NewGuid());
Assert.False(missingCharacterActivate.Succeeded);
@@ -42,8 +42,8 @@ public sealed class ServiceCampaignTests
{
using var harness = ServiceTestSupport.CreateHarness();
var service = harness.Service;
service.Register(new RegisterCommand("user", "Password123", "User"));
var sessionToken = ServiceTestSupport.GetValue(service.Login(new LoginCommand("user", "Password123"))).SessionToken;
service.Register("user", "Password123", "User");
var sessionToken = ServiceTestSupport.GetValue(service.Login("user", "Password123")).SessionToken;
var result = service.GetCurrentCampaignCharacters(sessionToken);
Assert.False(result.Succeeded);
@@ -54,14 +54,14 @@ public sealed class ServiceCampaignTests
{
using var harness = ServiceTestSupport.CreateHarness();
var service = harness.Service;
service.Register(new RegisterCommand("gm", "Password123", "GM"));
service.Register(new RegisterCommand("player", "Password123", "Player"));
var gmSession = ServiceTestSupport.GetValue(service.Login(new LoginCommand("gm", "Password123"))).SessionToken;
var playerSession = ServiceTestSupport.GetValue(service.Login(new LoginCommand("player", "Password123"))).SessionToken;
service.Register("gm", "Password123", "GM");
service.Register("player", "Password123", "Player");
var gmSession = ServiceTestSupport.GetValue(service.Login("gm", "Password123")).SessionToken;
var playerSession = ServiceTestSupport.GetValue(service.Login("player", "Password123")).SessionToken;
var gmCampaign = ServiceTestSupport.GetValue(service.CreateCampaign(gmSession, new CreateCampaignCommand("Owned", "d6")));
_ = ServiceTestSupport.GetValue(service.CreateCampaign(gmSession, new CreateCampaignCommand("Owned 2", "d6")));
_ = service.CreateCharacter(playerSession, new CreateCharacterCommand("Joiner", gmCampaign.Id));
var gmCampaign = ServiceTestSupport.GetValue(service.CreateCampaign(gmSession, "Owned", "d6"));
_ = ServiceTestSupport.GetValue(service.CreateCampaign(gmSession, "Owned 2", "d6"));
_ = service.CreateCharacter(playerSession, "Joiner", gmCampaign.Id);
var playerCampaigns = service.GetCampaigns(playerSession);
Assert.True(playerCampaigns.Succeeded);
@@ -76,20 +76,20 @@ public sealed class ServiceCampaignTests
using var harness = ServiceTestSupport.CreateHarness();
var service = harness.Service;
service.Register(new RegisterCommand("gm", "Password123", "GM"));
service.Register(new RegisterCommand("owner", "Password123", "Owner"));
service.Register(new RegisterCommand("other", "Password123", "Other"));
service.Register("gm", "Password123", "GM");
service.Register("owner", "Password123", "Owner");
service.Register("other", "Password123", "Other");
var gmSession = ServiceTestSupport.GetValue(service.Login(new LoginCommand("gm", "Password123"))).SessionToken;
var ownerSession = ServiceTestSupport.GetValue(service.Login(new LoginCommand("owner", "Password123"))).SessionToken;
var otherSession = ServiceTestSupport.GetValue(service.Login(new LoginCommand("other", "Password123"))).SessionToken;
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, new CreateCampaignCommand("Main", "d6")));
var ownerCharacter = ServiceTestSupport.GetValue(service.CreateCharacter(ownerSession, new CreateCharacterCommand("Owner Character", campaign.Id)));
var otherCharacter = ServiceTestSupport.GetValue(service.CreateCharacter(otherSession, new CreateCharacterCommand("Other Character", campaign.Id)));
var campaign = ServiceTestSupport.GetValue(service.CreateCampaign(gmSession, "Main", "d6"));
var ownerCharacter = ServiceTestSupport.GetValue(service.CreateCharacter(ownerSession, "Owner Character", campaign.Id));
var otherCharacter = ServiceTestSupport.GetValue(service.CreateCharacter(otherSession, "Other Character", campaign.Id));
var ownerSkill = ServiceTestSupport.GetValue(service.CreateSkill(ownerSession, ownerCharacter.Id, new CreateSkillCommand("Stealth", "2D+1")));
_ = ServiceTestSupport.GetValue(service.CreateSkill(otherSession, otherCharacter.Id, new CreateSkillCommand("Perception", "1D+2")));
var ownerSkill = ServiceTestSupport.GetValue(service.CreateSkill(ownerSession, ownerCharacter.Id, "Stealth", "2D+1"));
_ = ServiceTestSupport.GetValue(service.CreateSkill(otherSession, otherCharacter.Id, "Perception", "1D+2"));
var ownerView = ServiceTestSupport.GetValue(service.GetCampaign(ownerSession, campaign.Id));
Assert.Single(ownerView.Characters);

View File

@@ -8,35 +8,35 @@ public sealed class ServicePersistenceTests
using var harness = ServiceTestSupport.CreateHarness(2, 3, 4);
var service = harness.Service;
var invalidCredentials = service.Login(new LoginCommand("", ""));
var invalidCredentials = service.Login("", "");
Assert.False(invalidCredentials.Succeeded);
service.Logout("missing-session");
service.Register(new RegisterCommand("gm", "Password123", "GM"));
service.Register(new RegisterCommand("owner", "Password123", "Owner"));
service.Register(new RegisterCommand("other", "Password123", "Other"));
service.Register("gm", "Password123", "GM");
service.Register("owner", "Password123", "Owner");
service.Register("other", "Password123", "Other");
var gmSession = ServiceTestSupport.GetValue(service.Login(new LoginCommand("gm", "Password123"))).SessionToken;
var ownerSession = ServiceTestSupport.GetValue(service.Login(new LoginCommand("owner", "Password123"))).SessionToken;
var otherSession = ServiceTestSupport.GetValue(service.Login(new LoginCommand("other", "Password123"))).SessionToken;
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, new CreateCampaignCommand("Main", "d6")));
var ownerCharacter = ServiceTestSupport.GetValue(service.CreateCharacter(ownerSession, new CreateCharacterCommand("Owner Character", campaign.Id)));
var campaign = ServiceTestSupport.GetValue(service.CreateCampaign(gmSession, "Main", "d6"));
var ownerCharacter = ServiceTestSupport.GetValue(service.CreateCharacter(ownerSession, "Owner Character", campaign.Id));
Assert.False(service.GetMe(string.Empty).Succeeded);
Assert.False(service.CreateCampaign(gmSession, new CreateCampaignCommand("", "d6")).Succeeded);
Assert.False(service.CreateCampaign(gmSession, "", "d6").Succeeded);
Assert.False(service.GetCampaigns(string.Empty).Succeeded);
Assert.False(service.CreateCharacter(ownerSession, new CreateCharacterCommand("", campaign.Id)).Succeeded);
Assert.False(service.CreateCharacter(string.Empty, new CreateCharacterCommand("Name", campaign.Id)).Succeeded);
Assert.False(service.UpdateCharacter(string.Empty, ownerCharacter.Id, new UpdateCharacterCommand("Renamed", campaign.Id)).Succeeded);
Assert.False(service.UpdateCharacter(ownerSession, Guid.NewGuid(), new UpdateCharacterCommand("Renamed", campaign.Id)).Succeeded);
Assert.False(service.CreateCharacter(ownerSession, "", campaign.Id).Succeeded);
Assert.False(service.CreateCharacter(string.Empty, "Name", campaign.Id).Succeeded);
Assert.False(service.UpdateCharacter(string.Empty, ownerCharacter.Id, "Renamed", campaign.Id).Succeeded);
Assert.False(service.UpdateCharacter(ownerSession, Guid.NewGuid(), "Renamed", campaign.Id).Succeeded);
Assert.False(service.ActivateCharacter(string.Empty, ownerCharacter.Id).Succeeded);
Assert.False(service.ActivateCharacter(gmSession, ownerCharacter.Id).Succeeded);
Assert.False(service.GetCurrentCampaignCharacters(string.Empty).Succeeded);
Assert.False(service.CreateSkill(string.Empty, ownerCharacter.Id, new CreateSkillCommand("Stealth", "2D+1")).Succeeded);
Assert.False(service.CreateSkill(ownerSession, Guid.NewGuid(), new CreateSkillCommand("Stealth", "2D+1")).Succeeded);
Assert.False(service.CreateSkill(otherSession, ownerCharacter.Id, new CreateSkillCommand("Stealth", "2D+1")).Succeeded);
Assert.False(service.CreateSkill(string.Empty, ownerCharacter.Id, "Stealth", "2D+1").Succeeded);
Assert.False(service.CreateSkill(ownerSession, Guid.NewGuid(), "Stealth", "2D+1").Succeeded);
Assert.False(service.CreateSkill(otherSession, ownerCharacter.Id, "Stealth", "2D+1").Succeeded);
using (var db = harness.CreateDbContext())
{
@@ -74,11 +74,11 @@ public sealed class ServicePersistenceTests
Assert.Null(db.Users.Single(u => u.UsernameNormalized == "OWNER").ActiveCharacterId);
}
var skill = ServiceTestSupport.GetValue(service.CreateSkill(ownerSession, ownerCharacter.Id, new CreateSkillCommand("Stealth", "2D+1")));
Assert.False(service.UpdateSkill(ownerSession, skill.Id, new UpdateSkillCommand("", "2D+1")).Succeeded);
Assert.False(service.UpdateSkill(string.Empty, skill.Id, new UpdateSkillCommand("Stealth", "2D+1")).Succeeded);
Assert.False(service.UpdateSkill(ownerSession, skill.Id, new UpdateSkillCommand("Stealth", "bad")).Succeeded);
Assert.False(service.RollSkill(string.Empty, skill.Id, new RollSkillCommand("public")).Succeeded);
var skill = ServiceTestSupport.GetValue(service.CreateSkill(ownerSession, ownerCharacter.Id, "Stealth", "2D+1"));
Assert.False(service.UpdateSkill(ownerSession, skill.Id, "", "2D+1").Succeeded);
Assert.False(service.UpdateSkill(string.Empty, skill.Id, "Stealth", "2D+1").Succeeded);
Assert.False(service.UpdateSkill(ownerSession, skill.Id, "Stealth", "bad").Succeeded);
Assert.False(service.RollSkill(string.Empty, skill.Id, "public").Succeeded);
using (var db = harness.CreateDbContext())
{
@@ -88,7 +88,7 @@ public sealed class ServicePersistenceTests
}
using var invalidExpressionHarness = ServiceTestSupport.CreateHarnessFromPath(harness.DbPath, 2, 3, 4);
Assert.False(invalidExpressionHarness.Service.RollSkill(ownerSession, skill.Id, new RollSkillCommand("public")).Succeeded);
Assert.False(invalidExpressionHarness.Service.RollSkill(ownerSession, skill.Id, "public").Succeeded);
Assert.False(service.GetCampaignLog(string.Empty, campaign.Id).Succeeded);
}
}

View File

@@ -7,54 +7,54 @@ public sealed class ServiceSkillRollTests
{
using var harness = ServiceTestSupport.CreateHarness(3, 4, 5, 6);
var service = harness.Service;
service.Register(new RegisterCommand("gm", "Password123", "GM"));
service.Register(new RegisterCommand("owner", "Password123", "Owner"));
service.Register(new RegisterCommand("other", "Password123", "Other"));
service.Register("gm", "Password123", "GM");
service.Register("owner", "Password123", "Owner");
service.Register("other", "Password123", "Other");
var gmSession = ServiceTestSupport.GetValue(service.Login(new LoginCommand("gm", "Password123"))).SessionToken;
var ownerSession = ServiceTestSupport.GetValue(service.Login(new LoginCommand("owner", "Password123"))).SessionToken;
var otherSession = ServiceTestSupport.GetValue(service.Login(new LoginCommand("other", "Password123"))).SessionToken;
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, new CreateCampaignCommand("Main", "dnd5e")));
var character = ServiceTestSupport.GetValue(service.CreateCharacter(ownerSession, new CreateCharacterCommand("Owner Char", campaign.Id)));
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, new UpdateCharacterCommand("Renamed", campaign.Id));
var noPermissionUpdate = service.UpdateCharacter(otherSession, character.Id, "Renamed", campaign.Id);
Assert.False(noPermissionUpdate.Succeeded);
var invalidCharacterName = service.UpdateCharacter(ownerSession, character.Id, new UpdateCharacterCommand("", campaign.Id));
var invalidCharacterName = service.UpdateCharacter(ownerSession, character.Id, "", campaign.Id);
Assert.False(invalidCharacterName.Succeeded);
var missingTargetCampaign = service.UpdateCharacter(ownerSession, character.Id, new UpdateCharacterCommand("Renamed", Guid.NewGuid()));
var missingTargetCampaign = service.UpdateCharacter(ownerSession, character.Id, "Renamed", Guid.NewGuid());
Assert.False(missingTargetCampaign.Succeeded);
var noSkillName = service.CreateSkill(ownerSession, character.Id, new CreateSkillCommand("", "1d20"));
var noSkillName = service.CreateSkill(ownerSession, character.Id, "", "1d20");
Assert.False(noSkillName.Succeeded);
var invalidExpression = service.CreateSkill(ownerSession, character.Id, new CreateSkillCommand("Skill", "5D+4"));
var invalidExpression = service.CreateSkill(ownerSession, character.Id, "Skill", "5D+4");
Assert.False(invalidExpression.Succeeded);
var skill = ServiceTestSupport.GetValue(service.CreateSkill(ownerSession, character.Id, new CreateSkillCommand("Skill", "1d20+2")));
var skill = ServiceTestSupport.GetValue(service.CreateSkill(ownerSession, character.Id, "Skill", "1d20+2"));
var missingSkillUpdate = service.UpdateSkill(ownerSession, Guid.NewGuid(), new UpdateSkillCommand("X", "1d20"));
var missingSkillUpdate = service.UpdateSkill(ownerSession, Guid.NewGuid(), "X", "1d20");
Assert.False(missingSkillUpdate.Succeeded);
var forbiddenSkillUpdate = service.UpdateSkill(otherSession, skill.Id, new UpdateSkillCommand("X", "1d20"));
var forbiddenSkillUpdate = service.UpdateSkill(otherSession, skill.Id, "X", "1d20");
Assert.False(forbiddenSkillUpdate.Succeeded);
var gmSkillUpdate = service.UpdateSkill(gmSession, skill.Id, new UpdateSkillCommand("GM Edit", "2d6+1"));
var gmSkillUpdate = service.UpdateSkill(gmSession, skill.Id, "GM Edit", "2d6+1");
Assert.True(gmSkillUpdate.Succeeded);
var missingRoll = service.RollSkill(ownerSession, Guid.NewGuid(), new RollSkillCommand("public"));
var missingRoll = service.RollSkill(ownerSession, Guid.NewGuid(), "public");
Assert.False(missingRoll.Succeeded);
var invalidVisibility = service.RollSkill(ownerSession, skill.Id, new RollSkillCommand("hidden"));
var invalidVisibility = service.RollSkill(ownerSession, skill.Id, "hidden");
Assert.False(invalidVisibility.Succeeded);
var forbiddenRoll = service.RollSkill(otherSession, skill.Id, new RollSkillCommand("public"));
var forbiddenRoll = service.RollSkill(otherSession, skill.Id, "public");
Assert.False(forbiddenRoll.Succeeded);
var privateRoll = service.RollSkill(ownerSession, skill.Id, new RollSkillCommand("private"));
var publicRoll = service.RollSkill(ownerSession, skill.Id, new RollSkillCommand("public"));
var privateRoll = service.RollSkill(ownerSession, skill.Id, "private");
var publicRoll = service.RollSkill(ownerSession, skill.Id, "public");
Assert.True(privateRoll.Succeeded);
Assert.True(publicRoll.Succeeded);

View File

@@ -1,3 +0,0 @@
namespace RpgRoller.Tests;
// Integration API tests were split by concern under RpgRoller.Tests/Api.