Implement d6 wild dice/fumble skills and die-state rolls
This commit is contained in:
80
RpgRoller.Tests/Services/ServiceD6RollTests.cs
Normal file
80
RpgRoller.Tests/Services/ServiceD6RollTests.cs
Normal file
@@ -0,0 +1,80 @@
|
||||
namespace RpgRoller.Tests;
|
||||
|
||||
public sealed class ServiceD6RollTests
|
||||
{
|
||||
[Fact]
|
||||
public void RollSkill_D6WildCritical_AddsExtraDieAndTracksFlags()
|
||||
{
|
||||
using var harness = ServiceTestSupport.CreateHarness(6, 4, 2);
|
||||
var service = harness.Service;
|
||||
|
||||
service.Register("gm", "Password123", "GM");
|
||||
var session = ServiceTestSupport.GetValue(service.Login("gm", "Password123")).SessionToken;
|
||||
var campaign = ServiceTestSupport.GetValue(service.CreateCampaign(session, "Main", "d6"));
|
||||
var character = ServiceTestSupport.GetValue(service.CreateCharacter(session, "Hero", campaign.Id));
|
||||
var skill = ServiceTestSupport.GetValue(service.CreateSkill(session, character.Id, "Blaster", "2D+1", 1, true));
|
||||
|
||||
var roll = ServiceTestSupport.GetValue(service.RollSkill(session, skill.Id, "public"));
|
||||
|
||||
Assert.Equal(13, roll.Result);
|
||||
Assert.Equal("6+4+2+1=13", roll.Breakdown);
|
||||
Assert.Equal(3, roll.Dice.Count);
|
||||
Assert.True(roll.Dice[0].Wild);
|
||||
Assert.True(roll.Dice[0].Crit);
|
||||
Assert.True(roll.Dice[2].Added);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RollSkill_D6Fumble_RemovesHighestDieAndPreservesFumbleDie()
|
||||
{
|
||||
using var harness = ServiceTestSupport.CreateHarness(1, 3, 6, 1);
|
||||
var service = harness.Service;
|
||||
|
||||
service.Register("gm", "Password123", "GM");
|
||||
var session = ServiceTestSupport.GetValue(service.Login("gm", "Password123")).SessionToken;
|
||||
var campaign = ServiceTestSupport.GetValue(service.CreateCampaign(session, "Main", "d6"));
|
||||
var character = ServiceTestSupport.GetValue(service.CreateCharacter(session, "Hero", campaign.Id));
|
||||
var skill = ServiceTestSupport.GetValue(service.CreateSkill(session, character.Id, "Brawl", "3D", 1, true));
|
||||
|
||||
var roll = ServiceTestSupport.GetValue(service.RollSkill(session, skill.Id, "public"));
|
||||
|
||||
Assert.Equal(4, roll.Result);
|
||||
Assert.Equal("1+3=4", roll.Breakdown);
|
||||
Assert.Equal(3, roll.Dice.Count);
|
||||
Assert.True(roll.Dice[0].Fumble);
|
||||
Assert.True(roll.Dice[0].Wild);
|
||||
Assert.True(roll.Dice[2].Removed);
|
||||
Assert.False(roll.Dice[2].Crit);
|
||||
Assert.False(roll.Dice[2].Fumble);
|
||||
|
||||
var noFumbleSkill = ServiceTestSupport.GetValue(service.CreateSkill(session, character.Id, "Calm", "1D", 1, false));
|
||||
var noFumbleRoll = ServiceTestSupport.GetValue(service.RollSkill(session, noFumbleSkill.Id, "public"));
|
||||
Assert.False(noFumbleRoll.Dice[0].Fumble);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SkillOptions_AreValidatedForD6AndIgnoredForDnd5e()
|
||||
{
|
||||
using var harness = ServiceTestSupport.CreateHarness(2, 2);
|
||||
var service = harness.Service;
|
||||
|
||||
service.Register("gm", "Password123", "GM");
|
||||
var session = ServiceTestSupport.GetValue(service.Login("gm", "Password123")).SessionToken;
|
||||
|
||||
var d6Campaign = ServiceTestSupport.GetValue(service.CreateCampaign(session, "D6", "d6"));
|
||||
var d6Character = ServiceTestSupport.GetValue(service.CreateCharacter(session, "D6 Hero", d6Campaign.Id));
|
||||
|
||||
var missingWildDice = service.CreateSkill(session, d6Character.Id, "Broken", "2D+1", 0, true);
|
||||
Assert.False(missingWildDice.Succeeded);
|
||||
|
||||
var tooManyWildDice = service.CreateSkill(session, d6Character.Id, "Broken 2", "2D+1", 51, true);
|
||||
Assert.False(tooManyWildDice.Succeeded);
|
||||
|
||||
var dndCampaign = ServiceTestSupport.GetValue(service.CreateCampaign(session, "DND", "dnd5e"));
|
||||
var dndCharacter = ServiceTestSupport.GetValue(service.CreateCharacter(session, "Mage", dndCampaign.Id));
|
||||
var dndSkill = ServiceTestSupport.GetValue(service.CreateSkill(session, dndCharacter.Id, "Arcana", "1d20+2", 5, true));
|
||||
|
||||
Assert.Equal(0, dndSkill.WildDice);
|
||||
Assert.False(dndSkill.AllowFumble);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user