예제 #1
0
        public async Task <ValidationResponse> Validate(SubmitModeratorOutcomeConfirmationCommand command)
        {
            var validationResponse = new ValidationResponse
            {
                Errors = new List <ValidationErrorDetail>()
            };

            if (!string.IsNullOrEmpty(command.ConfirmStatus))
            {
                return(await Task.FromResult(validationResponse));
            }

            switch (command.Status)
            {
            case ModerationConfirmationStatus.Pass:
                validationResponse.Errors.Add(new ValidationErrorDetail(nameof(command.ConfirmStatus), EnterAPassConfirmation));
                break;

            case ModerationConfirmationStatus.Fail:
                validationResponse.Errors.Add(new ValidationErrorDetail(nameof(command.ConfirmStatus), EnterAFailConfirmation));
                break;

            case ModerationConfirmationStatus.AskForClarification:
                validationResponse.Errors.Add(new ValidationErrorDetail(nameof(command.ConfirmStatus), EnterAnAskForClarificationConfirmation));
                break;

            default:
                validationResponse.Errors.Add(new ValidationErrorDetail(nameof(command.ConfirmStatus), "Pick a choice"));
                break;
            }

            return(await Task.FromResult(validationResponse));
        }
        public async Task Outcome_confirmation_redirect_back_to_application_when_status_is_ask_for_clarification_and_confirm_status_is_No()
        {
            var command = new SubmitModeratorOutcomeConfirmationCommand(ModerationConfirmationStatus.AskForClarification, "No");

            _mockValidator.Setup(x => x.Validate(command))
            .ReturnsAsync(new ValidationResponse()
                          );

            var reviewComment = "comment goes here";
            var result        = await _controller.SubmitModeratorOutcomeConfirmation(_applicationId, reviewComment, command) as ViewResult;

            _outcomeViewModel.OptionAskForClarificationText = reviewComment;
            Assert.That(result.Model, Is.SameAs(_outcomeViewModel));
            _mockOrchestrator.Verify(x => x.GetInModerationOutcomeViewModel(It.IsAny <GetModeratorOutcomeRequest>()), Times.Once);
        }
        public async Task Outcome_confirmation_redirect_back_to_application_when_save_is_unsuccessful()
        {
            var command = new SubmitModeratorOutcomeConfirmationCommand(string.Empty, "Yes");

            _mockValidator.Setup(x => x.Validate(command))
            .ReturnsAsync(new ValidationResponse()
                          );


            _mockModerationApiClient.Setup(x => x.SubmitModerationOutcome(_applicationId, It.IsAny <string>(),
                                                                          It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()))
            .ReturnsAsync(false);

            var result = await _controller.SubmitModeratorOutcomeConfirmation(_applicationId, string.Empty, command) as ViewResult;

            Assert.That(result.Model, Is.SameAs(_outcomeViewModel));
            _mockOrchestrator.Verify(x => x.GetInModerationOutcomeViewModel(It.IsAny <GetModeratorOutcomeRequest>()), Times.Once);
        }
        public async Task Outcome_confirmation_redirect_back_to_outcome_when_error()
        {
            var command = new SubmitModeratorOutcomeConfirmationCommand("", "");

            _mockValidator.Setup(x => x.Validate(command))
            .ReturnsAsync(new ValidationResponse
            {
                Errors = new List <ValidationErrorDetail>
                {
                    new ValidationErrorDetail {
                        Field = "Status", ErrorMessage = "error"
                    }
                }
            }
                          );

            var result = await _controller.SubmitModeratorOutcomeConfirmation(_applicationId, string.Empty, command) as ViewResult;

            Assert.That(result.Model, Is.SameAs(_outcomeViewModel));
            _mockOrchestrator.Verify(x => x.GetInModerationOutcomeViewModel(It.IsAny <GetModeratorOutcomeRequest>()), Times.Once);
        }
예제 #5
0
 public void SetUp()
 {
     _validator = new ModeratorOutcomeValidator();
     _submitModeratorOutcomeCommand = new SubmitModeratorOutcomeCommand();
     _outcomeConfirmationCommand    = new SubmitModeratorOutcomeConfirmationCommand();
 }
예제 #6
0
        public async Task <IActionResult> SubmitModeratorOutcomeConfirmation(Guid applicationId, string reviewComment, SubmitModeratorOutcomeConfirmationCommand command)
        {
            var validationResponse = await _validator.Validate(command);

            if (validationResponse.Errors.Any())
            {
                foreach (var error in validationResponse.Errors)
                {
                    ModelState.AddModelError(error.Field, error.ErrorMessage);
                }
            }

            var userId = HttpContext.User.UserId();

            if (!ModelState.IsValid)
            {
                return(await GoToErrorView(applicationId, reviewComment, command.Status, userId));
            }

            if (command.ConfirmStatus == "No")
            {
                var viewModel = await _outcomeOrchestrator.GetInModerationOutcomeViewModel(new GetModeratorOutcomeRequest(applicationId, userId));

                viewModel.Status = command.Status;
                switch (command.Status)
                {
                case ModerationConfirmationStatus.Pass:
                    viewModel.OptionPassText = reviewComment;
                    break;

                case ModerationConfirmationStatus.Fail:
                    viewModel.OptionFailText = reviewComment;
                    break;

                case ModerationConfirmationStatus.AskForClarification:
                    viewModel.OptionAskForClarificationText = reviewComment;
                    break;
                }

                return(View("~/Views/ModeratorOutcome/Application.cshtml", viewModel));
            }

            var userName = HttpContext.User.UserDisplayName();

            var submittedStatus = ModerationStatus.InProgress;

            switch (command.Status)
            {
            case ModerationConfirmationStatus.Pass:
                submittedStatus = ModerationStatus.Pass;
                break;

            case ModerationConfirmationStatus.Fail:
                submittedStatus = ModerationStatus.Fail;
                break;

            case ModerationConfirmationStatus.AskForClarification:
                submittedStatus = ModerationStatus.ClarificationSent;
                break;
            }

            var submitSuccessful = await _moderationApiClient.SubmitModerationOutcome(applicationId, userId, userName, submittedStatus, reviewComment);

            if (!submitSuccessful)
            {
                _logger.LogError($"Unable to save moderation outcome for applicationId: [{applicationId}]");
                ModelState.AddModelError(string.Empty, "Unable to save moderation outcome as this time");
                return(await GoToErrorView(applicationId, reviewComment, command.Status, userId));
            }

            var viewModelModerationOutcomeSaved = await _outcomeOrchestrator.GetInModerationOutcomeReviewViewModel(
                new ReviewModeratorOutcomeRequest(applicationId, userId, command.Status, reviewComment));

            return(View("~/Views/ModeratorOutcome/ModerationCompleted.cshtml", viewModelModerationOutcomeSaved));
        }