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();
        }
        public void CalculateFeesTest_WithTransactionsFile_ShouldWriteExpectedConsoleOutput()
        {
            // Arrange
            using StreamReader expectedOutput = new StreamReader("Expected.Result.txt");
            var expected = expectedOutput.ReadToEnd();

            using StringWriter actualOutput = new StringWriter();
            Console.SetOut(actualOutput);

            var transactionRepository = GetMockedTransactionRepository();

            BaseTransactionFeeService transactionFeeService = new TestTransactionFeeService();
            BaseInvoiceFeeService     invoiceFeeService     = new TestInvoiceFeeService();

            var sut =
                new MerchantFeeCalculatorService(transactionRepository, transactionFeeService, invoiceFeeService);

            // Act
            sut.CalculateFees();
            var actual = actualOutput.ToString();

            // Assert
            expected.Should().Be(actual);
        }