Ejemplo 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);
            }
        }
        public void Handle_OriginalFeeZero_DoesntAddInvoiceFee()
        {
            //arrange
            var calculateFeeHandler = new Mock <ICommandHandler <CalculateFee, Fee> >();

            calculateFeeHandler.Setup(x => x.Handle(It.IsAny <CalculateFee>())).Returns(new Fee(0));
            var calculateFeeWithInvoiceHandler = new CalculateFeeWithInvoiceFeeHandler(
                calculateFeeHandler.Object, new Fee(10));
            var transaction = new Transaction(new Date(DateTime.Now), new Name("STEAM"), new Amount(100));

            //act
            var feeWithInvoice = calculateFeeWithInvoiceHandler.Handle(new CalculateFee(Guid.NewGuid(), transaction));

            //assert
            Assert.Equal(0, feeWithInvoice.Value);
        }
        public void Handle_TwoTransactionsSameMonth_OnlyAddsFeeToFirstOne()
        {
            //arrange
            var transactionFee      = new Fee(10);
            var calculateFeeHandler = new Mock <ICommandHandler <CalculateFee, Fee> >();

            calculateFeeHandler.Setup(x => x.Handle(It.IsAny <CalculateFee>())).Returns(transactionFee);
            var fixedInvoiceFee = new Fee(29);
            var calculateFeeWithInvoiceHandler = new CalculateFeeWithInvoiceFeeHandler(
                calculateFeeHandler.Object, fixedInvoiceFee);
            var transaction1 = new Transaction(
                new Date(DateTime.Parse("1989-11-26")), new Name("STEAM"), new Amount(100));
            var transaction2 = new Transaction(
                new Date(DateTime.Parse("1989-11-27")), new Name("STEAM"), new Amount(100));

            //act
            var feeWithInvoice    = calculateFeeWithInvoiceHandler.Handle(new CalculateFee(Guid.NewGuid(), transaction1));
            var feeWithoutInvoice = calculateFeeWithInvoiceHandler.Handle(new CalculateFee(Guid.NewGuid(), transaction2));

            //assert
            Assert.Equal(fixedInvoiceFee.Value + transactionFee.Value, feeWithInvoice.Value);
            Assert.Equal(transactionFee.Value, feeWithoutInvoice.Value);
        }