static void Main(string[] args) { try { var merchantRepository = new InMemoryMerchantRepository(); merchantRepository.Add(new Merchant(new Name("7-ELEVEN"), new Percentage(0))); merchantRepository.Add(new Merchant(new Name("NETTO"), new Percentage(0))); merchantRepository.Add(new Merchant(new Name("TELIA"), new Percentage(10))); merchantRepository.Add(new Merchant(new Name("CIRCLE_K"), new Percentage(20))); var calculateFeeHandler = new CalculateFeeHandler(new Percentage(TransactionPercentageFee)); var calculateFeeWithDiscountHandler = new CalculateFeeWithDiscountHandler(calculateFeeHandler, merchantRepository); var calculateWithInvoiceFeeHandler = new CalculateFeeWithInvoiceFeeHandler(calculateFeeWithDiscountHandler, new Fee(InvoiceFixedFee)); var outputSettings = new OutputSettings(); var transactionFeeCalculator = new FeeCalculationApp(calculateWithInvoiceFeeHandler, OutputSettings); transactionFeeCalculator.CalculateTransactionFees(InputFilePath); } catch (Exception e) { Console.WriteLine(e); } }
public MOBILEPAY_5() { var calculateFeeHandler = new CalculateFeeHandler(new Percentage(1)); var calculateWithDiscountHandler = new CalculateFeeWithDiscountHandler(calculateFeeHandler, MerchantRepository); CommandHandler = new CalculateFeeWithInvoiceFeeHandler(calculateWithDiscountHandler, new Fee(29)); }
public void Handle_NonExistentMerchant_ThrowsException() { //arrange var calculateFeeHandler = new Mock <ICommandHandler <CalculateFee, Fee> >(); var merchantRepository = new Mock <IMerchantRepository>(); merchantRepository.Setup(x => x.Get(It.IsAny <Name>())).Returns((Merchant)null); var calculateFeeWithDiscountHandler = new CalculateFeeWithDiscountHandler(calculateFeeHandler.Object, merchantRepository.Object); var transaction = new Transaction(new Date(DateTime.Now), new Name("STEAM"), new Amount(100)); //act && assert Assert.Throws <DomainObjectNotFoundException>( () => calculateFeeWithDiscountHandler.Handle(new CalculateFee(Guid.NewGuid(), transaction))); }
public void Handle_AppliesMerchantDiscount(double originalFee, double merchantDiscount, double expectedFee) { //arrange var calculateFeeHandler = new Mock <ICommandHandler <CalculateFee, Fee> >(); calculateFeeHandler.Setup(x => x.Handle(It.IsAny <CalculateFee>())).Returns(new Fee(originalFee)); var merchantRepository = new Mock <IMerchantRepository>(); merchantRepository.Setup(x => x.Get(It.IsAny <Name>())). Returns(new Merchant(new Name("STEAM"), new Percentage(merchantDiscount))); var calculateFeeWithDiscountHandler = new CalculateFeeWithDiscountHandler(calculateFeeHandler.Object, merchantRepository.Object); var transaction = new Transaction(new Date(DateTime.Now), new Name("STEAM"), new Amount(100)); //act var feeWithDiscount = calculateFeeWithDiscountHandler.Handle(new CalculateFee(Guid.NewGuid(), transaction)); //assert calculateFeeHandler.Verify(x => x.Handle(It.IsAny <CalculateFee>()), Times.Once); Assert.Equal(expectedFee, feeWithDiscount.Value); }