Reorganize tests by API and service concerns
This commit is contained in:
94
RpgRoller.Tests/Services/ServicePersistenceTests.cs
Normal file
94
RpgRoller.Tests/Services/ServicePersistenceTests.cs
Normal file
@@ -0,0 +1,94 @@
|
||||
namespace RpgRoller.Tests;
|
||||
|
||||
public sealed class ServicePersistenceTests
|
||||
{
|
||||
[Fact]
|
||||
public void ServiceGuardAndPersistenceBranches_AreHandled()
|
||||
{
|
||||
using var harness = ServiceTestSupport.CreateHarness(2, 3, 4);
|
||||
var service = harness.Service;
|
||||
|
||||
var invalidCredentials = service.Login(new LoginCommand("", ""));
|
||||
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"));
|
||||
|
||||
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 campaign = ServiceTestSupport.GetValue(service.CreateCampaign(gmSession, new CreateCampaignCommand("Main", "d6")));
|
||||
var ownerCharacter = ServiceTestSupport.GetValue(service.CreateCharacter(ownerSession, new CreateCharacterCommand("Owner Character", campaign.Id)));
|
||||
|
||||
Assert.False(service.GetMe(string.Empty).Succeeded);
|
||||
Assert.False(service.CreateCampaign(gmSession, new CreateCampaignCommand("", "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.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);
|
||||
|
||||
using (var db = harness.CreateDbContext())
|
||||
{
|
||||
var ownerUser = db.Users.Single(u => u.UsernameNormalized == "OWNER");
|
||||
ownerUser.ActiveCharacterId = Guid.NewGuid();
|
||||
db.SaveChanges();
|
||||
}
|
||||
|
||||
using var staleMeHarness = ServiceTestSupport.CreateHarnessFromPath(harness.DbPath, 2, 3, 4);
|
||||
var staleMeService = staleMeHarness.Service;
|
||||
|
||||
var staleMe = ServiceTestSupport.GetValue(staleMeService.GetMe(ownerSession));
|
||||
Assert.Null(staleMe.ActiveCharacterId);
|
||||
Assert.Null(staleMe.CurrentCampaignId);
|
||||
|
||||
Assert.True(staleMeService.ActivateCharacter(ownerSession, ownerCharacter.Id).Succeeded);
|
||||
var activeMe = ServiceTestSupport.GetValue(staleMeService.GetMe(ownerSession));
|
||||
Assert.Equal(ownerCharacter.Id, activeMe.ActiveCharacterId);
|
||||
Assert.Equal(campaign.Id, activeMe.CurrentCampaignId);
|
||||
|
||||
using (var db = harness.CreateDbContext())
|
||||
{
|
||||
var staleOwner = db.Users.Single(u => u.UsernameNormalized == "OWNER");
|
||||
staleOwner.ActiveCharacterId = Guid.NewGuid();
|
||||
db.SaveChanges();
|
||||
}
|
||||
|
||||
using var staleCurrentHarness = ServiceTestSupport.CreateHarnessFromPath(harness.DbPath, 2, 3, 4);
|
||||
var staleCurrentService = staleCurrentHarness.Service;
|
||||
|
||||
var staleCurrentCampaign = staleCurrentService.GetCurrentCampaignCharacters(ownerSession);
|
||||
Assert.False(staleCurrentCampaign.Succeeded);
|
||||
using (var db = harness.CreateDbContext())
|
||||
{
|
||||
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);
|
||||
|
||||
using (var db = harness.CreateDbContext())
|
||||
{
|
||||
var mutableSkill = db.Skills.Single(s => s.Id == skill.Id);
|
||||
mutableSkill.DiceRollDefinition = "bad";
|
||||
db.SaveChanges();
|
||||
}
|
||||
|
||||
using var invalidExpressionHarness = ServiceTestSupport.CreateHarnessFromPath(harness.DbPath, 2, 3, 4);
|
||||
Assert.False(invalidExpressionHarness.Service.RollSkill(ownerSession, skill.Id, new RollSkillCommand("public")).Succeeded);
|
||||
Assert.False(service.GetCampaignLog(string.Empty, campaign.Id).Succeeded);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user