Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        public MOBILEPAY_5()
        {
            var calculateFeeHandler          = new CalculateFeeHandler(new Percentage(1));
            var calculateWithDiscountHandler = new CalculateFeeWithDiscountHandler(calculateFeeHandler, MerchantRepository);

            CommandHandler = new CalculateFeeWithInvoiceFeeHandler(calculateWithDiscountHandler, new Fee(29));
        }
Exemplo n.º 3
0
        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)));
        }
Exemplo n.º 4
0
        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);
        }