Files
RpgRoller/RpgRoller.Tests/Services/ServiceCampaignTests.cs

101 lines
4.8 KiB
C#

namespace RpgRoller.Tests;
public sealed class ServiceCampaignTests
{
[Fact]
public void CampaignAndCharacterOperations_CheckUnauthorizedAndNotFoundCases()
{
using var harness = ServiceTestSupport.CreateHarness();
var service = harness.Service;
var unauthorizedCampaign = service.CreateCampaign("missing", "Name", "d6");
Assert.False(unauthorizedCampaign.Succeeded);
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, "Name 2", "unknown");
Assert.False(invalidRuleset.Succeeded);
var noCampaignCharacter = service.CreateCharacter(gmSession, "Hero", Guid.NewGuid());
Assert.False(noCampaignCharacter.Succeeded);
var character = ServiceTestSupport.GetValue(service.CreateCharacter(gmSession, "Hero", campaign.Id));
var missingCharacterActivate = service.ActivateCharacter(gmSession, Guid.NewGuid());
Assert.False(missingCharacterActivate.Succeeded);
var activateSuccess = service.ActivateCharacter(gmSession, character.Id);
Assert.True(activateSuccess.Succeeded);
var currentCharacters = service.GetCurrentCampaignCharacters(gmSession);
Assert.True(currentCharacters.Succeeded);
Assert.Single(ServiceTestSupport.GetValue(currentCharacters));
var missingCampaignGet = service.GetCampaign(gmSession, Guid.NewGuid());
Assert.False(missingCampaignGet.Succeeded);
}
[Fact]
public void CurrentCampaignCharacters_ReturnsNoActiveCharacterWhenUnset()
{
using var harness = ServiceTestSupport.CreateHarness();
var service = harness.Service;
service.Register("user", "Password123", "User");
var sessionToken = ServiceTestSupport.GetValue(service.Login("user", "Password123")).SessionToken;
var result = service.GetCurrentCampaignCharacters(sessionToken);
Assert.False(result.Succeeded);
}
[Fact]
public void GetCampaigns_ReturnsOwnedAndParticipatingCampaigns()
{
using var harness = ServiceTestSupport.CreateHarness();
var service = harness.Service;
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, "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);
var campaigns = ServiceTestSupport.GetValue(playerCampaigns);
Assert.Single(campaigns);
Assert.Equal(gmCampaign.Id, campaigns[0].Id);
}
[Fact]
public void GetCampaign_ForNonGm_ReturnsOnlyOwnedCharactersAndSkills()
{
using var harness = ServiceTestSupport.CreateHarness();
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 Character", campaign.Id));
var otherCharacter = ServiceTestSupport.GetValue(service.CreateCharacter(otherSession, "Other Character", campaign.Id));
var ownerSkill = ServiceTestSupport.GetValue(service.CreateSkill(ownerSession, ownerCharacter.Id, "Stealth", "2D+1", 1, true));
_ = ServiceTestSupport.GetValue(service.CreateSkill(otherSession, otherCharacter.Id, "Perception", "1D+2", 1, true));
var ownerView = ServiceTestSupport.GetValue(service.GetCampaign(ownerSession, campaign.Id));
Assert.Single(ownerView.Characters);
Assert.Equal(ownerCharacter.Id, ownerView.Characters[0].Id);
Assert.Single(ownerView.Skills);
Assert.Equal(ownerSkill.Id, ownerView.Skills[0].Id);
}
}