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_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_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);
        }