public void Addition_StringSeparatedBySinglDelimiterRepeated_ShouldAddStingNumbers()
        {
            //Arrange
            var mockLogger     = new Mock <ILogger>();
            var mockWebService = new Mock <IWebService>();
            var mockWriter     = new Mock <IWriter>();

            Calculator calc = new Calculator(mockLogger.Object, mockWebService.Object, mockWriter.Object);

            //Act
            double result = calc.Addition("//[***]\n1***2***3");

            //Assert
            Assert.AreEqual(6, result);
        }
        public void Addition_StringSeparatedByMultipleDelimitersIncludingSquareBracket_ShouldAddStingNumbers()
        {
            //Arrange
            var mockLogger     = new Mock <ILogger>();
            var mockWebService = new Mock <IWebService>();
            var mockWriter     = new Mock <IWriter>();

            Calculator calc = new Calculator(mockLogger.Object, mockWebService.Object, mockWriter.Object);

            //Act
            double result = calc.Addition("//[*][%][[]]\n1*2%3[]4");

            //Assert
            Assert.AreEqual(10, result);
        }
        public void Addition_WithEmptyString_ShouldReturnZero()
        {
            //Arrange
            var mockLogger     = new Mock <ILogger>();
            var mockWebService = new Mock <IWebService>();
            var mockWriter     = new Mock <IWriter>();

            Calculator calc = new Calculator(mockLogger.Object, mockWebService.Object, mockWriter.Object);

            //Act
            double result = calc.Addition("");

            //Assert
            Assert.AreEqual(0, result);
        }
        public void Addition_WaitForloggerToThrowException_NotifiesIWebServiceOfException()
        {
            //Arrange
            var mockLogger     = new Mock <ILogger>();
            var mockWebService = new Mock <IWebService>();
            var mockWriter     = new Mock <IWriter>();

            Calculator calc = new Calculator(mockLogger.Object, mockWebService.Object, mockWriter.Object);

            mockLogger.Setup(logger => logger.LogResults(It.IsAny <double>())).Throws(new Exception("An exception has been thrown"));
            mockWebService.Setup(service => service.ExceptionHandler(It.IsAny <Exception>())).Verifiable();

            //Act
            Assert.ThrowsException <Exception>(() => calc.Addition("//[*][%][[]]\n1*2%3[]4"));

            //Assert
            mockWebService.Verify();
        }
        public void Addition_VerifyTheDependency_CallsAdditionFunction()
        {
            //Arrange
            var mockLogger     = new Mock <ILogger>();                                                       //faking logger
            var mockWebService = new Mock <IWebService>();
            var mockWriter     = new Mock <IWriter>();

            Calculator calc = new Calculator(mockLogger.Object, mockWebService.Object, mockWriter.Object);   //The calculator class depends in the ILogger forka specific function

            mockLogger
            .Setup(logger => logger.LogResults(It.IsAny <double>()))
            .Verifiable();                                                                                    //Tesing to see if the add fucntion executed and used the desired fucntion in ILogger

            //Act
            calc.Addition("//[*][%][[]]\n1*2%3[]4");

            //Assert
            mockLogger.Verify();
        }
        public void Addition_DisplayAdditonResultToConsole_CheckIfWrittingToConsole()
        {
            //Arrange
            var mockLogger     = new Mock <ILogger>();
            var mockWebService = new Mock <IWebService>();
            var mockWriter     = new Mock <IWriter>();

            var calc = new Calculator(mockLogger.Object, mockWebService.Object, mockWriter.Object);

            mockWriter.Setup(writer => writer.WriteResults(It.IsAny <double>()))
            .Callback(delegate(double result)
            {
                Console.Write(result);
            }).Verifiable();

            //Act
            calc.Addition("//[*][%][[]]\n1*2%3[]4");

            //Assert
            mockWriter.Verify();
        }
        public void Addition_CompareNewResultTheLoggedResult_CallsAdditionFunctionAndReturnsResult()
        {
            //Arrange
            var mockLogger     = new Mock <ILogger>();
            var mockWebService = new Mock <IWebService>();
            var mockWriter     = new Mock <IWriter>();

            Calculator calc = new Calculator(mockLogger.Object, mockWebService.Object, mockWriter.Object);

            mockLogger.Setup(logger => logger.LogResults(It.IsAny <double>()))
            .Callback(delegate(double result)
            {
                mockLogger.Setup(l => l.LastResult).Returns(result);
            });

            //Act
            double newResult = calc.Addition("//[*][%][[]]\n1*2%3[]4");

            //Assert
            Assert.AreEqual(mockLogger.Object.LastResult, newResult);
        }