Beispiel #1
0
        public void given_a_valid_request_validator_should_return_no_errors()
        {
            var updateData = new MatUpdateProcessData();
            var processRef = randomGuid;

            updateData.DateCompleted = _faker.Date.Recent();
            var request = new UpdateProcessDataRequest()
            {
                processRef = processRef, processDataToUpdate = updateData
            };

            _updateProcessDocValidator.ShouldNotHaveValidationErrorFor(r => r.processDataToUpdate, request.processDataToUpdate);
        }
        public void update_process_data_gateway_call_returns_updateprocsesdataresponse_object()
        {
            //arrange
            var updateData = new MatUpdateProcessData();
            var request    = new UpdateProcessDataRequest()
            {
                processDataToUpdate = updateData
            };

            //act
            mockMatGateway.Setup(x => x.UpdateProcessData(It.IsAny <UpdateDefinition <BsonDocument> >(), It.IsAny <string>())).Returns(new MatProcessData());
            var result = processDataUseCase.ExecuteUpdate(request);

            //assert
            Assert.IsInstanceOf <MatProcessData>(result.UpdatedProcessData);
            Assert.IsInstanceOf <UpdateProcessDataResponse>(result);
        }
        public void update_process_controller_end_to_end_testing_for_bad_request_given_invalid_request()
        {
            //arrange
            var dataToUpdate = new MatUpdateProcessData();
            var processRef   = _faker.Random.Word();

            var request = new UpdateProcessDataRequest()
            {
                processRef = processRef, processDataToUpdate = dataToUpdate
            };
            //act
            var response = _processDataController.UpdateExistingProcessDocument(request);
            var okResult = (ObjectResult)response;

            //assert
            Assert.AreEqual(400, okResult.StatusCode); //check if it was a bad request
        }
        public void update_process_data_returns_updateprocessdataresponse_object()
        {
            //arrange
            var processRef = faker.Random.Guid().ToString();
            var request    = new UpdateProcessDataRequest {
                processDataToUpdate = new MatUpdateProcessData()
            };
            var response = new MatProcessData();

            //act
            mockMatGateway.Setup(x => x.UpdateProcessData(It.IsAny <UpdateDefinition <BsonDocument> >(), It.IsAny <string>())).Returns(response);
            var result = processDataUseCase.ExecuteUpdate(request);

            //assert
            Assert.IsInstanceOf <UpdateProcessDataResponse>(result);
            Assert.IsInstanceOf <UpdateProcessDataRequest>(result.Request);
            Assert.IsInstanceOf <MatProcessData>(result.UpdatedProcessData);
            Assert.AreEqual(JsonConvert.SerializeObject(new MatProcessData()), JsonConvert.SerializeObject(result.UpdatedProcessData));
            Assert.NotNull(result.GeneratedAt);
            Assert.IsInstanceOf <DateTime>(result.GeneratedAt);
        }
        public void given_an_invalid_request_object_controller_should_return_bad_request()
        {
            var requestObject = new MatProcessData();
            var request       = new UpdateProcessDataRequest()
            {
                processDataToUpdate = new MatUpdateProcessData()
            };
            var validationErrorList = new List <ValidationFailure>();

            validationErrorList.Add(new ValidationFailure(faker.Random.Word(), faker.Random.Word()));
            var fakeValidationResult = new FV.ValidationResult(validationErrorList); //Need to create ValidationResult so that I could setup Validator mock to return it upon '.Validate()' call. Also this is the only place where it's possible to manipulate the validation result - You can only make the validation result invalid by inserting a list of validation errors as a parameter through a constructor. The boolean '.IsValid' comes from expression 'IsValid => Errors.Count == 0;', so it can't be set manually.

            _mockValidatorUpdate.Setup(x => x.Validate(request)).Returns(fakeValidationResult);
            var response      = _processDataController.UpdateExistingProcessDocument(request);
            var okResult      = (ObjectResult)response;
            var resultContent = okResult.Value;

            Assert.NotNull(response);
            Assert.NotNull(okResult);
            Assert.NotNull(resultContent);
            Assert.AreEqual(400, okResult.StatusCode);
        }
        public void when_updateexistingprocessdocument_method_is_called_then_it_returns_a_success_response()
        {
            //arrange
            int expectedStatusCode = 200;
            var request            = new UpdateProcessDataRequest()
            {
                processDataToUpdate = new MatUpdateProcessData()
            };
            var response = new UpdateProcessDataResponse(request, new MatProcessData(), DateTime.Now);

            _mockValidatorUpdate.Setup(x => x.Validate(request)).Returns(new FV.ValidationResult());
            _mockUsecase.Setup(x => x.ExecuteUpdate(request)).Returns(response);
            //act
            var controllerResponse = _processDataController.UpdateExistingProcessDocument(request);
            var okResult           = (OkObjectResult)controllerResponse;
            var actualStatusCode   = okResult.StatusCode;

            //assert
            Assert.NotNull(controllerResponse);
            Assert.NotNull(okResult);
            Assert.AreEqual(expectedStatusCode, actualStatusCode);
        }
        public void ensure_update_controller_calls_use_case_with_request_object()
        {
            //arrange
            var matProcessData = new MatUpdateProcessData();

            //add fields to be updated
            matProcessData.ProcessData = new
            {
                firstField = faker.Random.Word()
            };
            //set up Guid to filder by
            var processRef = faker.Random.Guid().ToString();
            var request    = new UpdateProcessDataRequest()
            {
                processRef = processRef, processDataToUpdate = matProcessData
            };

            _mockValidatorUpdate.Setup(x => x.Validate(request)).Returns(new FV.ValidationResult());
            var actualResponse = _processDataController.UpdateExistingProcessDocument(request);

            //verify usecase is called with an update process request object
            _mockUsecase.Verify(x => x.ExecuteUpdate((It.Is <UpdateProcessDataRequest>(i => i == request))));
        }
        public void given_an_update_object_when_update_process_data_method_is_called_the_controller_returns_correct_json_response()
        {
            //arange
            var matProcessData = new MatUpdateProcessData();

            //add fields to be updated
            matProcessData.ProcessData = new
            {
                firstField  = faker.Random.Word(),
                anyField    = faker.Random.Words(),
                numberField = faker.Random.Number()
            };
            //set up Guid to filder by
            var processRef = faker.Random.Guid().ToString();

            var request = new UpdateProcessDataRequest()
            {
                processRef = processRef, processDataToUpdate = matProcessData
            };
            var response = new UpdateProcessDataResponse(request, new MatProcessData(), DateTime.Now);

            _mockValidatorUpdate.Setup(x => x.Validate(request)).Returns(new FV.ValidationResult());
            _mockUsecase.Setup(x => x.ExecuteUpdate(request)).Returns(response);
            //act
            var actualResponse = _processDataController.UpdateExistingProcessDocument(request);
            var okResult       = (OkObjectResult)actualResponse;
            var resultContent  = (UpdateProcessDataResponse)okResult.Value;

            //assert
            Assert.NotNull(actualResponse);
            Assert.NotNull(okResult);
            Assert.IsInstanceOf <UpdateProcessDataResponse>(resultContent);
            Assert.NotNull(resultContent);
            Assert.AreEqual(JsonConvert.SerializeObject(response), JsonConvert.SerializeObject(resultContent));
            Assert.AreEqual(200, okResult.StatusCode);
        }
        public IActionResult UpdateExistingProcessDocument([FromBody] UpdateProcessDataRequest updateRequest)
        {
            var isRequestValid = _updateValidator.Validate(updateRequest);

            if (isRequestValid.IsValid)
            {
                try
                {
                    _logger.LogInformation($"Update ProcessData request for process ID {updateRequest.processRef}");
                    var result = _processDataUsecase.ExecuteUpdate(updateRequest);
                    return(Ok(result));
                }
                catch (DocumentNotFound ex)
                {
                    return(StatusCode(200, $"Document with reference {updateRequest.processRef} was not found in the database." +
                                      $" An update is not possible on non-existent documents."));
                }
                catch (Exception ex)
                {
                    return(StatusCode(500, "An error has occured while processing the request - " + ex.Message + " " + ex.InnerException));
                }
            }
            return(BadRequest(isRequestValid.Errors));
        }