public void CanGetProficiencyBonus()
        {
            var proficiencyCalculator = new ProficiencyCalculator();

            //Base threshold.
            var result = proficiencyCalculator.GetProficiencyBonus(1);

            result.ShouldBeEquivalentTo(2);

            //Level 5 threshold.
            result = proficiencyCalculator.GetProficiencyBonus(5);
            result.ShouldBeEquivalentTo(3);

            //Level 10 threshold.
            result = proficiencyCalculator.GetProficiencyBonus(10);
            result.ShouldBeEquivalentTo(4);

            //Level 15 threshold.
            result = proficiencyCalculator.GetProficiencyBonus(15);
            result.ShouldBeEquivalentTo(5);

            //Level 20 threshold.
            result = proficiencyCalculator.GetProficiencyBonus(20);
            result.ShouldBeEquivalentTo(6);
        }
        public void CalculateProficiency_NormalLevelProgression_ReturnsCorrectProficiency(int level, int expectedProficiency)
        {
            // Act
            int result = ProficiencyCalculator.CalculateProficiency(level);

            // Assert
            Assert.AreEqual(expectedProficiency, result, $"Proficiency for level {level} is expected to be {expectedProficiency}, but is {result}");
        }
        public void ProficiencyArgumentsOutOfRange()
        {
            var proficiencyCalculator = new ProficiencyCalculator();

            //Test if character level is less than 1.
            proficiencyCalculator.Invoking(f => f.GetProficiencyBonus(0)).ShouldThrow <ArgumentOutOfRangeException>();

            //Test if modifier is less than 0.
            proficiencyCalculator.Invoking(f => f.GetProficiencyBonus(20, -1)).ShouldThrow <ArgumentOutOfRangeException>();
        }