Implement Rolemaster roll execution
This commit is contained in:
164
RpgRoller.Tests/Services/ServiceRolemasterRollTests.cs
Normal file
164
RpgRoller.Tests/Services/ServiceRolemasterRollTests.cs
Normal file
@@ -0,0 +1,164 @@
|
||||
namespace RpgRoller.Tests;
|
||||
|
||||
public sealed class ServiceRolemasterRollTests
|
||||
{
|
||||
[Fact]
|
||||
public void RollSkill_RolemasterInitiative_ComputesTotalAndTagsDice()
|
||||
{
|
||||
using var harness = ServiceTestSupport.CreateHarness(7, 10);
|
||||
var service = harness.Service;
|
||||
|
||||
service.Register("gm-init", "Password123", "GM");
|
||||
var session = ServiceTestSupport.GetValue(service.Login("gm-init", "Password123")).SessionToken;
|
||||
var campaign = ServiceTestSupport.GetValue(service.CreateCampaign(session, "Rolemaster", "rolemaster"));
|
||||
var character = ServiceTestSupport.GetValue(service.CreateCharacter(session, "Hero", campaign.Id));
|
||||
var skill = ServiceTestSupport.GetValue(service.CreateSkill(session, character.Id, "Initiative", "2d10+48", 0, false));
|
||||
|
||||
var roll = ServiceTestSupport.GetValue(service.RollSkill(session, skill.Id, "public"));
|
||||
var logPage = ServiceTestSupport.GetValue(service.GetCampaignLogPage(session, campaign.Id, limit: 5));
|
||||
|
||||
Assert.Equal(65, roll.Result);
|
||||
Assert.Equal("7+10+48=65", roll.Breakdown);
|
||||
Assert.Equal("7 + 10 | initiative", Assert.Single(logPage.Entries).SummaryText);
|
||||
Assert.Collection(
|
||||
roll.Dice,
|
||||
die =>
|
||||
{
|
||||
Assert.Equal(7, die.Roll);
|
||||
Assert.Equal(1, die.Sequence);
|
||||
Assert.Equal(RollDieKinds.RolemasterInitiative, die.Kind);
|
||||
Assert.Equal(7, die.SignedContribution);
|
||||
},
|
||||
die =>
|
||||
{
|
||||
Assert.Equal(10, die.Roll);
|
||||
Assert.Equal(2, die.Sequence);
|
||||
Assert.Equal(RollDieKinds.RolemasterInitiative, die.Kind);
|
||||
Assert.Equal(10, die.SignedContribution);
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RollSkill_RolemasterPercentile_ComputesTotalAndTagsDice()
|
||||
{
|
||||
using var harness = ServiceTestSupport.CreateHarness(73);
|
||||
var service = harness.Service;
|
||||
|
||||
service.Register("gm-percentile", "Password123", "GM");
|
||||
var session = ServiceTestSupport.GetValue(service.Login("gm-percentile", "Password123")).SessionToken;
|
||||
var campaign = ServiceTestSupport.GetValue(service.CreateCampaign(session, "Rolemaster", "rolemaster"));
|
||||
var character = ServiceTestSupport.GetValue(service.CreateCharacter(session, "Hero", campaign.Id));
|
||||
var skill = ServiceTestSupport.GetValue(service.CreateSkill(session, character.Id, "Perception", "d100-15", 0, false));
|
||||
|
||||
var roll = ServiceTestSupport.GetValue(service.RollSkill(session, skill.Id, "public"));
|
||||
var logPage = ServiceTestSupport.GetValue(service.GetCampaignLogPage(session, campaign.Id, limit: 5));
|
||||
|
||||
Assert.Equal(58, roll.Result);
|
||||
Assert.Equal("73-15=58", roll.Breakdown);
|
||||
Assert.Equal("73 | percentile", Assert.Single(logPage.Entries).SummaryText);
|
||||
|
||||
var die = Assert.Single(roll.Dice);
|
||||
Assert.Equal(73, die.Roll);
|
||||
Assert.Equal(1, die.Sequence);
|
||||
Assert.Equal(RollDieKinds.RolemasterPercentile, die.Kind);
|
||||
Assert.Equal(73, die.SignedContribution);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RollSkill_RolemasterOpenEndedHigh_RecursesAndBuildsReadableLogSummary()
|
||||
{
|
||||
using var harness = ServiceTestSupport.CreateHarness(97, 96, 45);
|
||||
var service = harness.Service;
|
||||
|
||||
service.Register("gm-open-high", "Password123", "GM");
|
||||
var session = ServiceTestSupport.GetValue(service.Login("gm-open-high", "Password123")).SessionToken;
|
||||
var campaign = ServiceTestSupport.GetValue(service.CreateCampaign(session, "Rolemaster", "rolemaster"));
|
||||
var character = ServiceTestSupport.GetValue(service.CreateCharacter(session, "Hero", campaign.Id));
|
||||
var skill = ServiceTestSupport.GetValue(service.CreateSkill(session, character.Id, "Awareness", "d100!+85", 0, false, null, 5));
|
||||
|
||||
var roll = ServiceTestSupport.GetValue(service.RollSkill(session, skill.Id, "public"));
|
||||
var detail = ServiceTestSupport.GetValue(service.GetRollDetail(session, roll.RollId));
|
||||
var logPage = ServiceTestSupport.GetValue(service.GetCampaignLogPage(session, campaign.Id, limit: 5));
|
||||
|
||||
Assert.Equal(323, roll.Result);
|
||||
Assert.Equal("97+96+45+85=323", roll.Breakdown);
|
||||
Assert.Equal("97 + 96 + 45 | open-ended high", Assert.Single(logPage.Entries).SummaryText);
|
||||
Assert.Equal(roll.Breakdown, detail.Breakdown);
|
||||
Assert.Collection(
|
||||
detail.Dice,
|
||||
die =>
|
||||
{
|
||||
Assert.Equal(97, die.Roll);
|
||||
Assert.Equal(1, die.Sequence);
|
||||
Assert.Equal(RollDieKinds.RolemasterOpenEndedInitial, die.Kind);
|
||||
Assert.Equal(97, die.SignedContribution);
|
||||
Assert.False(die.Added);
|
||||
},
|
||||
die =>
|
||||
{
|
||||
Assert.Equal(96, die.Roll);
|
||||
Assert.Equal(2, die.Sequence);
|
||||
Assert.Equal(RollDieKinds.RolemasterOpenEndedHigh, die.Kind);
|
||||
Assert.Equal(96, die.SignedContribution);
|
||||
Assert.True(die.Added);
|
||||
},
|
||||
die =>
|
||||
{
|
||||
Assert.Equal(45, die.Roll);
|
||||
Assert.Equal(3, die.Sequence);
|
||||
Assert.Equal(RollDieKinds.RolemasterOpenEndedHigh, die.Kind);
|
||||
Assert.Equal(45, die.SignedContribution);
|
||||
Assert.True(die.Added);
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RollSkill_RolemasterOpenEndedLow_SubtractsRecursiveHighChain()
|
||||
{
|
||||
using var harness = ServiceTestSupport.CreateHarness(5, 97, 100, 12);
|
||||
var service = harness.Service;
|
||||
|
||||
service.Register("gm-open-low", "Password123", "GM");
|
||||
var session = ServiceTestSupport.GetValue(service.Login("gm-open-low", "Password123")).SessionToken;
|
||||
var campaign = ServiceTestSupport.GetValue(service.CreateCampaign(session, "Rolemaster", "rolemaster"));
|
||||
var character = ServiceTestSupport.GetValue(service.CreateCharacter(session, "Hero", campaign.Id));
|
||||
var skill = ServiceTestSupport.GetValue(service.CreateSkill(session, character.Id, "Awareness", "d100!+85", 0, false, null, 5));
|
||||
|
||||
var roll = ServiceTestSupport.GetValue(service.RollSkill(session, skill.Id, "public"));
|
||||
var logPage = ServiceTestSupport.GetValue(service.GetCampaignLogPage(session, campaign.Id, limit: 5));
|
||||
|
||||
Assert.Equal(-119, roll.Result);
|
||||
Assert.Equal("5-(97+100+12)+85=-119", roll.Breakdown);
|
||||
Assert.Equal("5 - (97 + 100 + 12) | open-ended low", Assert.Single(logPage.Entries).SummaryText);
|
||||
Assert.Collection(
|
||||
roll.Dice,
|
||||
die =>
|
||||
{
|
||||
Assert.Equal(5, die.Roll);
|
||||
Assert.Equal(1, die.Sequence);
|
||||
Assert.Equal(RollDieKinds.RolemasterOpenEndedInitial, die.Kind);
|
||||
Assert.Equal(5, die.SignedContribution);
|
||||
},
|
||||
die =>
|
||||
{
|
||||
Assert.Equal(97, die.Roll);
|
||||
Assert.Equal(2, die.Sequence);
|
||||
Assert.Equal(RollDieKinds.RolemasterOpenEndedLowSubtract, die.Kind);
|
||||
Assert.Equal(-97, die.SignedContribution);
|
||||
},
|
||||
die =>
|
||||
{
|
||||
Assert.Equal(100, die.Roll);
|
||||
Assert.Equal(3, die.Sequence);
|
||||
Assert.Equal(RollDieKinds.RolemasterOpenEndedLowSubtract, die.Kind);
|
||||
Assert.Equal(-100, die.SignedContribution);
|
||||
},
|
||||
die =>
|
||||
{
|
||||
Assert.Equal(12, die.Roll);
|
||||
Assert.Equal(4, die.Sequence);
|
||||
Assert.Equal(RollDieKinds.RolemasterOpenEndedLowSubtract, die.Kind);
|
||||
Assert.Equal(-12, die.SignedContribution);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user