public void AddFee_WhenAmountIsNotPositiveNumber_ShouldReturnNull() { // Arrange var fee = new Fee("Free", DateTime.Now, 100M); var feeType = new DiscountedFee(_merchantDiscounts); // Act var result = feeType.AddFee(fee); // Assert Assert.Null(result); }
public void AddFee_WhenMerchantIsEligibleDiscount_ShouldApplyDiscount(string merchantName, float expectedAmount) { // Arrange var fee = new Fee(merchantName, DateTime.Now, 1M); var feeType = new DiscountedFee(_merchantDiscounts); // Act var result = feeType.AddFee(fee); // Assert Assert.NotNull(result); Assert.Equal((decimal)expectedAmount, result.Amount); }
public void AddFee__WhenMerchantIsNotEligibleDiscount_ShouldNotChangeFeeAmount() { // Arrange var expectedAmount = 100M; var fee = new Fee("XYZ", DateTime.Now, expectedAmount); var feeType = new DiscountedFee(_merchantDiscounts); // Act var result = feeType.AddFee(fee); // Assert Assert.NotNull(result); Assert.Equal(expectedAmount, result.Amount); }
private static FeeCalculationCommand BuildFeeCalculationCommand(MpConfig config, params object[] dependencies) { var defaultFee = new PercentageFee( config.Fees.PercentageFee, config.Fees.MinAllowedFeeAmount); var feeDiscount = new DiscountedFee( config.Fees.DiscountedFees, config.Fees.MinAllowedFeeAmount); var fixedFee = new InvoiceFixedFee( config.Fees.InvoiceFixedFee, config.Fees.MinAllowedFeeAmount); var extraFees = new IExtraFee[] { feeDiscount, fixedFee }; ITransactionRepository transactionRepository = dependencies .OfType <ITransactionRepository>() .FirstOrDefault() ?? new TransactionRepository( config.Input.TransactionsFilePath, new FileReader(), new TransactionParser( config.Input.Separator, config.Input.DateFormat)); IFeeCalculationService feeCalculationService = dependencies .OfType <IFeeCalculationService>() .FirstOrDefault() ?? new FeeCalculationService( new BaseFeeCalculator(defaultFee, new Dictionary <string, ITransactionFee>()), extraFees, new Mapper()); IOutputWriter outputWriter = dependencies .OfType <IOutputWriter>() .FirstOrDefault() ?? new OutputWriter( config.Output.DateFormat, config.Output.AmountFormat, config.Output.MerchantNameMinimalWidth); var command = new FeeCalculationCommand( transactionRepository, feeCalculationService, outputWriter); return(command); }