using RpgRoller.Services; namespace RpgRoller.Tests; public sealed class DiceRulesTests { [Fact] public void DiceRules_CoversParsingAndMappingBranches() { Assert.Equal(RulesetKind.D6, DiceRules.TryParseRulesetId("d6")); Assert.Equal(RulesetKind.Dnd5e, DiceRules.TryParseRulesetId("dnd5e")); Assert.Null(DiceRules.TryParseRulesetId("unknown")); var d6 = DiceRules.ParseExpression(RulesetKind.D6, "5D+4"); var dnd = DiceRules.ParseExpression(RulesetKind.Dnd5e, "2d12+2"); var emptyExpression = DiceRules.ParseExpression(RulesetKind.Dnd5e, ""); var badFormat = DiceRules.ParseExpression(RulesetKind.Dnd5e, "abc"); var tooManyDice = DiceRules.ParseExpression(RulesetKind.D6, "51D+1"); var tooManySides = DiceRules.ParseExpression(RulesetKind.Dnd5e, "1d1001"); var tooLargeModifier = DiceRules.ParseExpression(RulesetKind.Dnd5e, "1d20+1001"); var unknownRulesetExpression = DiceRules.ParseExpression((RulesetKind)99, "1d20+1"); Assert.True(d6.Succeeded); Assert.True(dnd.Succeeded); Assert.False(emptyExpression.Succeeded); Assert.False(badFormat.Succeeded); Assert.False(tooManyDice.Succeeded); Assert.False(tooManySides.Succeeded); Assert.False(tooLargeModifier.Succeeded); Assert.False(unknownRulesetExpression.Succeeded); Assert.Equal("d6", DiceRules.ToRulesetId(RulesetKind.D6)); Assert.Equal("dnd5e", DiceRules.ToRulesetId(RulesetKind.Dnd5e)); Assert.Throws(() => DiceRules.ToRulesetId((RulesetKind)99)); } }