public void WithActionTargetCalculator_NullArgument_Throws()
        {
            // Arrange
            var builder = new BuffActionBuilder();

            // Act and Assert
            Assert.Throws <ArgumentNullException>(() => _ = builder.WithActionTargetCalculator(null));
        }
        public void Build_MissingActionTargetCalculator_Throws()
        {
            // Arrange
            var builder = new BuffActionBuilder()
                          .WithRaiseDefence(0.1);

            // Act and Assert
            Assert.Throws <InvalidOperationException>(() => _ = builder.Build());
        }
        public void Build_CallsPresent_Succeeds()
        {
            // Arrange
            var builder = new BuffActionBuilder()
                          .TargetsUser()
                          .WithRaiseAttack(0.1);

            // Act
            var buff = builder.Build();

            // Assert
            Assert.That(buff, Is.Not.Null);
        }
        private static BuffAction CreateBuffAction(
            IActionTargetCalculator actionTargetCalculator       = null,
            IDictionary <StatCategory, double> targetMultipliers = null)
        {
            var builder = new BuffActionBuilder()
                          .WithActionTargetCalculator(actionTargetCalculator ?? Mock.Of <IActionTargetCalculator>());

            if (targetMultipliers is not null)
            {
                foreach (var multiplier in targetMultipliers)
                {
                    builder = builder.WithTargetMultiplier(multiplier.Key, multiplier.Value);
                }
            }

            return(builder.Build());
        }
 /// <summary>
 /// Sets the built buff to target a single enemy chosen by the user.
 /// </summary>
 /// <param name="builder">The buff builder.</param>
 /// <param name="userInput">The user input.</param>
 public static BuffActionBuilder UserSelectsSingleEnemy(this BuffActionBuilder builder, IUserInput userInput)
 {
     return(builder.WithActionTargetCalculator(new SingleEnemyActionTargetCalculator(userInput)));
 }