public async Task <ClarificationOutcomeReviewViewModel> GetClarificationOutcomeReviewViewModel(ReviewClarificationOutcomeRequest request)
        {
            var viewModel = new ClarificationOutcomeReviewViewModel
            {
                Status        = request.Status,
                ReviewComment = request.ReviewComment,
                ApplicationId = request.ApplicationId
            };

            var application = await _applicationApiClient.GetApplication(request.ApplicationId);

            var contact = await _applicationApiClient.GetContactForApplication(request.ApplicationId);

            if (application is null || contact is null)
            {
                return(null);
            }

            viewModel.ApplicantEmailAddress = contact.Email;

            if (application.ApplyData?.ApplyDetails != null)
            {
                viewModel.ApplicationRoute = application.ApplyData.ApplyDetails.ProviderRouteName;
                viewModel.Ukprn            = application.ApplyData.ApplyDetails.UKPRN;
                viewModel.ApplyLegalName   = application.ApplyData.ApplyDetails.OrganisationName;
                viewModel.SubmittedDate    = application.ApplyData.ApplyDetails.ApplicationSubmittedOn;
            }

            return(viewModel);
        }
        public async Task ReviewOutcome_goes_to_are_you_sure_when_no_error()
        {
            var command = new SubmitClarificationOutcomeCommand();
            _mockValidator.Setup(x => x.Validate(command))
                .ReturnsAsync(new ValidationResponse
                {
                    Errors = new List<ValidationErrorDetail>()
                }
                );

            var outcomeReviewViewModel = new ClarificationOutcomeReviewViewModel();
            _mockOrchestrator
                .Setup(x => x.GetClarificationOutcomeReviewViewModel(It.IsAny<ReviewClarificationOutcomeRequest>()))
                .ReturnsAsync(outcomeReviewViewModel);
            var result = await _controller.SubmitClarificationOutcome(_applicationId, command) as ViewResult;
            Assert.That(result.Model, Is.SameAs(outcomeReviewViewModel));
            _mockOrchestrator.Verify(x => x.GetClarificationOutcomeReviewViewModel(It.IsAny<ReviewClarificationOutcomeRequest>()), Times.Once);
        }
        public async Task Outcome_confirmation_directs_to_saved_page_when_save_is_successful()
        {
            var command = new SubmitClarificationOutcomeConfirmationCommand(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(true);

            var outcomeReviewViewModel = new ClarificationOutcomeReviewViewModel();
            _mockOrchestrator.Setup(x => x.GetClarificationOutcomeReviewViewModel(It.IsAny<ReviewClarificationOutcomeRequest>()))
                .ReturnsAsync(outcomeReviewViewModel);

            var result = await _controller.SubmitClarificationOutcomeConfirmation(_applicationId, string.Empty, command) as ViewResult;
            Assert.That(result.Model, Is.SameAs(outcomeReviewViewModel));
            _mockOrchestrator.Verify(x => x.GetClarificationOutcomeReviewViewModel(It.IsAny<ReviewClarificationOutcomeRequest>()), Times.Once);
        }