public void CalculateMerchantFee_ForMoreThenOneMonthlyTransactions_ShouldNotIncludeInvoiceFee() { // Arrange var transaction1 = new Transaction { Date = new DateTime(2018, 09, 02), MerchantName = "7-ELEVEN", Fee = 1 }; var transaction2 = new Transaction { Date = new DateTime(2018, 09, 05), MerchantName = "NETTO", Fee = 1 }; var transaction3 = new Transaction { Date = new DateTime(2018, 10, 22), MerchantName = "7-ELEVEN", Fee = 1 }; var transaction4 = new Transaction { Date = new DateTime(2018, 10, 29), MerchantName = "7-ELEVEN", Fee = 1 }; var expected1 = transaction1.Fee + TestInvoiceFeeService.StandardInvoiceFixedFee; var expected2 = transaction2.Fee + TestInvoiceFeeService.StandardInvoiceFixedFee; var expected3 = transaction3.Fee + TestInvoiceFeeService.StandardInvoiceFixedFee; var expected4 = transaction4.Fee; var invoiceFeeService = new TestInvoiceFeeService(); var sut = new FirstMonthlyInvoiceFeeRuleDecorator(invoiceFeeService); // Act sut.CalculateInvoiceFee(transaction1); var actual1 = transaction1.Fee; sut.CalculateInvoiceFee(transaction2); var actual2 = transaction2.Fee; sut.CalculateInvoiceFee(transaction3); var actual3 = transaction3.Fee; sut.CalculateInvoiceFee(transaction4); var actual4 = transaction4.Fee; // Assert actual1.Should().Be(expected1); actual2.Should().Be(expected2); actual3.Should().Be(expected3); actual4.Should().Be(expected4); }
public void CalculateFees() { var transactionRepository = new TxtTransactionRepository(); BaseTransactionFeeService transactionFeeService = new TransactionPercentageFeeService(); transactionFeeService = new TeliaPercentageDiscountDecorator(transactionFeeService); transactionFeeService = new CircleKPercentageDiscountDecorator(transactionFeeService); BaseInvoiceFeeService invoiceFeeService = new InvoiceFixedFeeService(); invoiceFeeService = new FirstMonthlyInvoiceFeeRuleDecorator(invoiceFeeService); invoiceFeeService = new FreeInvoiceFeeRuleDecorator(invoiceFeeService); var merchantFeeCalculatorService = new MerchantFeeCalculatorService(transactionRepository, transactionFeeService, invoiceFeeService); merchantFeeCalculatorService.CalculateFees(); }