public void given_an_unexpected_exception_thrown_when_GetProcessData_controller_method_is_called_then_controller_returns_correct_error_message()
        {
            //arrange
            string expectedErrorMessage = "An error has occured while processing the request - ";

            var randomExpectedError = ErrorThrowerHelper.GenerateError();

            try // throw random error
            {
                throw randomExpectedError;
            }
            catch (Exception ex) //catch the expected error message
            {
                expectedErrorMessage += (ex.Message + " " + ex.InnerException);
            }

            _mockUsecase.Setup(x => x.ExecuteGet(It.IsAny <GetProcessDataRequest>())).Throws(randomExpectedError);

            _mockValidatorGet.Setup(x => x.Validate(It.IsAny <GetProcessDataRequest>())).Returns(new FV.ValidationResult());

            //act
            var controllerResponse = _processDataController.GetProcessData(new GetProcessDataRequest());
            var result             = controllerResponse as ObjectResult;
            var resultContent      = result.Value as string;

            //assert
            Assert.NotNull(controllerResponse);
            Assert.NotNull(result);
            Assert.NotNull(resultContent);
            Assert.AreEqual(expectedErrorMessage, result.Value);
        }
        public void given_an_unexpected_error_would_be_thrown_when_GetProcessImage_controller_method_is_called_then_it_returns_a_correctly_formatted_error_message_that_is_based_of_exception()
        {
            //arrange
            string expectedErrorMessage = "An error has occured while processing the request - ";

            var randomExpectedError = ErrorThrowerHelper.GenerateError();

            try // throw random error
            {
                throw randomExpectedError;
            }
            catch (Exception ex) //catch the expected error message
            {
                expectedErrorMessage += (ex.Message + " " + ex.InnerException);
            }

            _mockUsecase.Setup(x => x.ExecuteGet(It.IsAny <GetProcessImageRequest>())).Throws(randomExpectedError);

            _mockGetValidator.Setup(x => x.Validate(It.IsAny <GetProcessImageRequest>())).Returns(new FV.ValidationResult()); //validation successful

            //act
            var controllerResponse = _processImageController.GetProcessImage(new GetProcessImageRequest());
            var result             = controllerResponse as ObjectResult;
            var resultContent      = result.Value as string; //unwrap the error message from controller response.

            //assert
            Assert.NotNull(controllerResponse);
            Assert.NotNull(result);
            Assert.NotNull(resultContent);
            Assert.AreEqual(expectedErrorMessage, result.Value); //assert if the error message matches what controller wrapped up
        }
        public void Given_an_unexpected_exception_is_thrown_in_the_GetByPropRefValidator__When_GetAractionsByPropRef_ArrearsActionController_method_is_called__Then_controller_returns_500_status_code_response()
        {
            //Arrange
            var random_expected_exception = ErrorThrowerHelper.Generate_Error();

            _mockGetByPropRefValidator.Setup(v => v.Validate(It.IsAny <GetAractionsByPropRefRequest>())).Throws(random_expected_exception);

            //Act
            var response        = _controllerUnderTest.GetAractionsByPropRef(null);
            var response_result = (ObjectResult)response;

            //Assert
            Assert.NotNull(response);
            Assert.NotNull(response_result);
            Assert.AreEqual(500, response_result.StatusCode);
        }
        public void given_an_unexpected_error_would_be_thrown_when_GetProcessImage_controller_method_is_called_then_it_returns_500_status_code()
        {
            //arrange
            var expectedStatusCode  = 500;
            var randomExpectedError = ErrorThrowerHelper.GenerateError();

            _mockUsecase.Setup(x => x.ExecuteGet(It.IsAny <GetProcessImageRequest>())).Throws(randomExpectedError);           // throw random test error (triangulation)

            _mockGetValidator.Setup(x => x.Validate(It.IsAny <GetProcessImageRequest>())).Returns(new FV.ValidationResult()); //validation successful

            //act
            var controllerResponse = _processImageController.GetProcessImage(new GetProcessImageRequest());
            var result             = controllerResponse as ObjectResult;

            //assert
            Assert.NotNull(controllerResponse);
            Assert.NotNull(result);
            Assert.AreEqual(expectedStatusCode, result.StatusCode);
        }
        public void Given_an_unexpected_exception_is_thrown__When_GetAractionsByPropRef_ArrearsActionController_method_is_called__Then_controller_returns_an_Error_response()
        {
            //arrange
            TestHelper.SetUp_MockValidatorSuccessResponse(_mockGetByPropRefValidator);

            var random_expected_exception = ErrorThrowerHelper.Generate_Error();

            _mockUsecase.Setup(u => u.GetByPropRef(It.IsAny <GetAractionsByPropRefRequest>())).Throws(random_expected_exception);

            //act
            var response         = _controllerUnderTest.GetAractionsByPropRef(null);
            var response_result  = response as ObjectResult;
            var response_content = response_result.Value;

            //assert
            Assert.NotNull(response);
            Assert.NotNull(response_result);
            Assert.IsInstanceOf <ErrorResponse>(response_content);
            Assert.NotNull(response_content);
        }
        public void given_an_unexpected_exception_thrown_when_GetProcessData_controller_method_is_called_then_controller_returns_500_status_code_response()
        {
            //Arrange
            GetProcessDataRequest request = new GetProcessDataRequest()
            {
                processRef = faker.Random.Guid().ToString()
            };

            var randomExpectedError = ErrorThrowerHelper.GenerateError();

            _mockUsecase.Setup(x => x.ExecuteGet(It.IsAny <GetProcessDataRequest>())).Throws(randomExpectedError);

            _mockValidatorGet.Setup(x => x.Validate(It.IsAny <GetProcessDataRequest>())).Returns(new FV.ValidationResult());

            //Act
            var actualResult = _processDataController.GetProcessData(request);
            var result       = (ObjectResult)actualResult;

            //Assert
            Assert.NotNull(actualResult);
            Assert.NotNull(result);
            Assert.AreEqual(500, result.StatusCode);
        }
        public void Given_a_NotFoundException_exception_is_thrown_within_deeper_flow__When_GetAractionsByPropRef_ArrearsActionController_method_is_called__Then_controller_returns_corresponding_error_message()
        {
            //arrange
            TestHelper.SetUp_MockValidatorSuccessResponse(_mockGetByPropRefValidator);
            var random_expected_error_message = ErrorThrowerHelper.Generate_Error().Message;
            var not_found_exception           = new NotFoundException(random_expected_error_message);

            _mockUsecase.Setup(u => u.GetByPropRef(It.IsAny <GetAractionsByPropRefRequest>())).Throws(not_found_exception);

            //act
            var response = _controllerUnderTest.GetAractionsByPropRef(null);

            var response_result  = response as ObjectResult;
            var response_content = response_result.Value as ErrorResponse;

            //assert

            Assert.NotNull(response_content);

            var actual_error_message = response_content.Errors.FirstOrDefault();

            Assert.AreEqual(random_expected_error_message, actual_error_message);
        }
        public void Given_a_nested_unexpected_exception_is_thrown__When_GetAractionsByPropRef_ArrearsActionController_method_is_called__Then_controller_returns_corresponding_error_message__And_inner_error_message()
        {
            //arrange
            TestHelper.SetUp_MockValidatorSuccessResponse(_mockGetByPropRefValidator);

            (Exception random_expected_exception, List <string> expected_error_messages) = ErrorThrowerHelper
                                                                                           .Generate_ExceptionAndCorrespondinErrorMessages(ErrorThrowerHelper.ErrorThrowerOptions.InnerErrors);

            _mockUsecase.Setup(u => u.GetByPropRef(It.IsAny <GetAractionsByPropRefRequest>())).Throws(random_expected_exception);

            var expected_error_message       = expected_error_messages[0];
            var expected_inner_error_message = expected_error_messages[1];

            //act
            var response = _controllerUnderTest.GetAractionsByPropRef(null);

            var response_result  = response as ObjectResult;
            var response_content = response_result.Value as ErrorResponse;

            //assert

            Assert.NotNull(response_content);
            Assert.AreEqual(expected_error_messages.Count, response_content.Errors.Count);
            Assert.AreEqual(2, response_content.Errors.Count);

            var actual_error_message       = response_content.Errors[0];
            var actual_inner_error_message = response_content.Errors[1];

            Assert.AreEqual(expected_error_message, actual_error_message);
            Assert.AreEqual(expected_inner_error_message, actual_inner_error_message);
        }