public void TestProcessNextTransactionShouldReturnRightResult()
        {
            var loggerMock             = new Mock <ICalcFeesLogger>();
            var transactionsReaderMock = new Mock <ITransactionsReader>();
            var transactionsWriterMock = new Mock <ITransactionsWriter>();

            TransactionObject transactionObject = null;

            transactionsReaderMock.Setup(method => method.ReadNextTransaction()).Returns(transactionObject);

            var transactionsProcessor     = new TransactionsProcessorChild(loggerMock.Object, transactionsReaderMock.Object, transactionsWriterMock.Object);
            var processTransactionsResult = transactionsProcessor.ProcessNextTransaction();

            processTransactionsResult.ShouldBe(false);
            transactionsWriterMock.Verify(method => method.WriteNextTransaction(transactionObject), Times.Once);

            transactionObject = new TransactionObject()
            {
                TransactionDate          = DateTime.MinValue, MerchantName = "test", TransactionAmount = 10,
                TransactionPercentageFee = 0
            };
            transactionsReaderMock.Setup(method => method.ReadNextTransaction()).Returns(transactionObject);
            transactionsWriterMock.Setup(method => method.WriteNextTransaction(transactionObject)).Returns(true);
            processTransactionsResult = transactionsProcessor.ProcessNextTransaction();
            processTransactionsResult.ShouldBe(true);
            transactionsWriterMock.Verify(method => method.WriteNextTransaction(transactionObject), Times.Once);
        }
        public void TestTransactionErrorCountExceededShouldReturnRightResult()
        {
            var loggerMock             = new Mock <ICalcFeesLogger>();
            var transactionsReaderMock = new Mock <ITransactionsReader>();
            var transactionsWriterMock = new Mock <ITransactionsWriter>();

            int errorCount = 10;

            var transactionsProcessor     = new TransactionsProcessorChild(loggerMock.Object, transactionsReaderMock.Object, transactionsWriterMock.Object);
            var processTransactionsResult = transactionsProcessor.TransactionErrorCountExceeded(ref errorCount);

            processTransactionsResult.ShouldBe(false);

            transactionsReaderMock.Setup(method => method.HasError()).Returns(true);
            processTransactionsResult = transactionsProcessor.TransactionErrorCountExceeded(ref errorCount);
            processTransactionsResult.ShouldBe(true);

            transactionsReaderMock.Setup(method => method.HasError()).Returns(false);
            transactionsWriterMock.Setup(method => method.HasError()).Returns(true);
            processTransactionsResult = transactionsProcessor.TransactionErrorCountExceeded(ref errorCount);
            processTransactionsResult.ShouldBe(true);

            errorCount = 9;
            processTransactionsResult = transactionsProcessor.TransactionErrorCountExceeded(ref errorCount);
            processTransactionsResult.ShouldBe(false);
        }
        public void TestTryOpenTransactionReaderShouldReturnRightResult()
        {
            var loggerMock             = new Mock <ICalcFeesLogger>();
            var transactionsReaderMock = new Mock <ITransactionsReader>();
            var transactionsWriterMock = new Mock <ITransactionsWriter>();

            var transactionsProcessor     = new TransactionsProcessorChild(loggerMock.Object, transactionsReaderMock.Object, transactionsWriterMock.Object);
            var processTransactionsResult = transactionsProcessor.TryOpenTransactionReader();

            processTransactionsResult.ShouldBe(false);

            transactionsReaderMock.Setup(method => method.Open()).Returns(true);
            processTransactionsResult = transactionsProcessor.TryOpenTransactionReader();
            processTransactionsResult.ShouldBe(true);
        }