namespace RpgRoller.Tests; public sealed class ServiceRolemasterRollTests { [Fact] public void RollSkill_RolemasterStandardMultiDie_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, "Healing", "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 | rolemaster", Assert.Single(logPage.Entries).SummaryText); Assert.Collection( roll.Dice, die => { Assert.Equal(7, die.Roll); Assert.Equal(1, die.Sequence); Assert.Equal(RollDieKinds.RolemasterStandard, die.Kind); Assert.Equal(7, die.SignedContribution); }, die => { Assert.Equal(10, die.Roll); Assert.Equal(2, die.Sequence); Assert.Equal(RollDieKinds.RolemasterStandard, die.Kind); Assert.Equal(10, die.SignedContribution); }); } [Fact] public void RollSkill_RolemasterStandardSingleDie_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 | rolemaster", Assert.Single(logPage.Entries).SummaryText); var die = Assert.Single(roll.Dice); Assert.Equal(73, die.Roll); Assert.Equal(1, die.Sequence); Assert.Equal(RollDieKinds.RolemasterStandard, 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(-124, roll.Result); Assert.Equal("(05) -97 -100 -12 +85 = -124", roll.Breakdown); Assert.Equal("(05) -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.Null(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); }); } }