public void CalculateMerchantFee_ForNonCircleKTransaction_ShouldNotApplyDiscount(
            string merchantName, decimal fee, decimal expected)
        {
            // Arrange
            var transaction = new Transaction {
                MerchantName = merchantName, Fee = fee
            };
            var transactionFeeService = new TestTransactionFeeService();
            var sut = new CircleKPercentageDiscountDecorator(transactionFeeService);

            // Act
            sut.CalculateTransactionFee(transaction);
            var actual = transaction.Fee;

            // Assert
            actual.Should().Be(expected);
        }
        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();
        }