public void TransactionRepository_WithNotExistingTransactionFile_ThrowFileNotFoundException()
        {
            // Arrange
            var sut = new TxtTransactionRepository("InvalidPath");

            // Act && Assert
            sut.Invoking(sut => sut.GetTransaction())
            .Should().Throw <FileNotFoundException>();
        }
        public void TransactionRepository_WithCorrectTransactions_FetchesCorrectTransactions(
            int expectedCountOfTransactions)
        {
            // Arrange
            var actualTransactionCount = 0;
            var sut = new TxtTransactionRepository("Correct.Transactions.txt");

            // Act && Assert
            while (sut.HasUnhandledTransactions())
            {
                sut.GetTransaction();
                actualTransactionCount++;
            }

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