private async Task SetPageReviewOutcome(GetReviewAnswersRequest request, ModeratorReviewAnswersViewModel viewModel)
        {
            // TODO: To think about... could we move this into Apply Service? It's really part of getting the moderator page back from the service
            var pageReviewOutcome = await _moderationApiClient.GetModeratorPageReviewOutcome(request.ApplicationId, request.SequenceNumber, request.SectionNumber, viewModel.PageId, request.UserId);

            if (pageReviewOutcome != null)
            {
                viewModel.Status = pageReviewOutcome.Status;
                switch (pageReviewOutcome.Status)
                {
                case ModeratorPageReviewStatus.Pass:
                    viewModel.OptionPassText = pageReviewOutcome.Comment;
                    break;

                case ModeratorPageReviewStatus.Fail:
                    viewModel.OptionFailText = pageReviewOutcome.Comment;
                    break;

                case ModeratorPageReviewStatus.InProgress:
                    viewModel.OptionInProgressText = pageReviewOutcome.Comment;
                    break;

                default:
                    break;
                }
            }
        }
        public async Task GetReviewAnswersViewModel_returns_ViewModel()
        {
            _request = new GetReviewAnswersRequest(_applicationId, _userId, _sequenceNumber, _sectionNumber, _pageId, null);
            var result = await _orchestrator.GetReviewAnswersViewModel(_request);

            Assert.That(result, Is.Not.Null);
            Assert.That(result.ApplicationId, Is.EqualTo(_clarificationPage.ApplicationId));
            Assert.That(result.SequenceNumber, Is.EqualTo(_clarificationPage.SequenceNumber));
            Assert.That(result.SectionNumber, Is.EqualTo(_clarificationPage.SectionNumber));
            Assert.That(result.PageId, Is.EqualTo(_clarificationPage.PageId));
            Assert.That(result.Status, Is.EqualTo(_pageReviewOutcome.Status));
            Assert.That(result.ClarificationResponse, Is.EqualTo(_pageReviewOutcome.ClarificationResponse));
            Assert.That(result.ClarificationFile, Is.EqualTo(_pageReviewOutcome.ClarificationFile));
            Assert.That(result.ModerationOutcome.ModeratorUserId, Is.EqualTo(_pageReviewOutcome.ModeratorUserId));
            Assert.That(result.ModerationOutcome.ModeratorUserName, Is.EqualTo(_pageReviewOutcome.ModeratorUserName));
            Assert.That(result.ModerationOutcome.ModeratorReviewStatus, Is.EqualTo(_pageReviewOutcome.ModeratorReviewStatus));
            Assert.That(result.ModerationOutcome.ModeratorReviewComment, Is.EqualTo(_pageReviewOutcome.ModeratorReviewComment));
            Assert.That(result.BlindAssessmentOutcome.Assessor1Name, Is.EqualTo(_blindAssessmentOutcome.Assessor1Name));
            Assert.That(result.BlindAssessmentOutcome.Assessor1UserId, Is.EqualTo(_blindAssessmentOutcome.Assessor1UserId));
            Assert.That(result.BlindAssessmentOutcome.Assessor1ReviewStatus, Is.EqualTo(_blindAssessmentOutcome.Assessor1ReviewStatus));
            Assert.That(result.BlindAssessmentOutcome.Assessor1ReviewComment, Is.EqualTo(_blindAssessmentOutcome.Assessor1ReviewComment));
            Assert.That(result.BlindAssessmentOutcome.Assessor2Name, Is.EqualTo(_blindAssessmentOutcome.Assessor2Name));
            Assert.That(result.BlindAssessmentOutcome.Assessor2UserId, Is.EqualTo(_blindAssessmentOutcome.Assessor2UserId));
            Assert.That(result.BlindAssessmentOutcome.Assessor2ReviewStatus, Is.EqualTo(_blindAssessmentOutcome.Assessor2ReviewStatus));
            Assert.That(result.BlindAssessmentOutcome.Assessor2ReviewComment, Is.EqualTo(_blindAssessmentOutcome.Assessor2ReviewComment));
            CollectionAssert.IsNotEmpty(result.Questions);
            CollectionAssert.IsNotEmpty(result.Answers);
        }
        private async Task SetPageReviewOutcome(GetReviewAnswersRequest request, OutcomeReviewAnswersViewModel viewModel)
        {
            // TODO: To think about... could we move this into Apply Service? It's really part of getting the page back from the service
            var pageReviewOutcome = await _clarificationApiClient.GetClarificationPageReviewOutcome(request.ApplicationId, request.SequenceNumber, request.SectionNumber, viewModel.PageId, request.UserId);

            if (pageReviewOutcome != null)
            {
                viewModel.Status = pageReviewOutcome.Status;
                switch (pageReviewOutcome.Status)
                {
                case ClarificationPageReviewStatus.Pass:
                    viewModel.OptionPassText = pageReviewOutcome.Comment;
                    break;

                case ClarificationPageReviewStatus.Fail:
                    viewModel.OptionFailText = pageReviewOutcome.Comment;
                    break;

                case ClarificationPageReviewStatus.InProgress:
                    viewModel.OptionInProgressText = pageReviewOutcome.Comment;
                    break;

                default:
                    break;
                }

                viewModel.ModerationOutcome = new ModerationOutcome
                {
                    ApplicationId          = pageReviewOutcome.ApplicationId,
                    SequenceNumber         = pageReviewOutcome.SequenceNumber,
                    SectionNumber          = pageReviewOutcome.SectionNumber,
                    PageId                 = pageReviewOutcome.PageId,
                    ModeratorUserId        = pageReviewOutcome.ModeratorUserId,
                    ModeratorUserName      = pageReviewOutcome.ModeratorUserName,
                    ModeratorReviewStatus  = pageReviewOutcome.ModeratorReviewStatus,
                    ModeratorReviewComment = pageReviewOutcome.ModeratorReviewComment
                };

                viewModel.ClarificationOutcome = new ApplyTypes.Outcome.ClarificationOutcome
                {
                    ApplicationId              = pageReviewOutcome.ApplicationId,
                    SequenceNumber             = pageReviewOutcome.SequenceNumber,
                    SectionNumber              = pageReviewOutcome.SectionNumber,
                    PageId                     = pageReviewOutcome.PageId,
                    ClarifierUserId            = pageReviewOutcome.UserId,
                    ClarifierUserName          = pageReviewOutcome.UserName,
                    ClarificationReviewStatus  = pageReviewOutcome.Status,
                    ClarificationReviewComment = pageReviewOutcome.Comment,
                    ClarificationResponse      = pageReviewOutcome.ClarificationResponse,
                    ClarificationFiles         = string.IsNullOrEmpty(pageReviewOutcome.ClarificationFile) ? null : new List <string> {
                        pageReviewOutcome.ClarificationFile
                    }
                };

                viewModel.ClarificationResponse = pageReviewOutcome.ClarificationResponse;
                viewModel.ClarificationFile     = pageReviewOutcome.ClarificationFile;
            }
        }
        public async Task GetReviewAnswersViewModel_returns_ViewModel()
        {
            _request = new GetReviewAnswersRequest(_applicationId, _userId, _sequenceNumber, _sectionNumber, _pageId, null);
            var result = await _orchestrator.GetReviewAnswersViewModel(_request);

            Assert.That(result, Is.Not.Null);
            Assert.That(result.ApplicationId, Is.EqualTo(_assessorPage.ApplicationId));
            Assert.That(result.SequenceNumber, Is.EqualTo(_assessorPage.SequenceNumber));
            Assert.That(result.SectionNumber, Is.EqualTo(_assessorPage.SectionNumber));
            Assert.That(result.PageId, Is.EqualTo(_assessorPage.PageId));
            Assert.That(result.Status, Is.EqualTo(_pageReviewOutcome.Status));
            CollectionAssert.IsNotEmpty(result.Questions);
            CollectionAssert.IsNotEmpty(result.Answers);
        }
        public async Task <OutcomeReviewAnswersViewModel> GetReviewAnswersViewModel(GetReviewAnswersRequest request)
        {
            var application = await _applicationApiClient.GetApplication(request.ApplicationId);

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

            var clarificationPage = await _clarificationApiClient.GetClarificationPage(request.ApplicationId, request.SequenceNumber, request.SectionNumber, request.PageId);

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

            var viewModel = new OutcomeReviewAnswersViewModel
            {
                ApplicationId = application.ApplicationId,

                Ukprn                 = application.ApplyData.ApplyDetails.UKPRN,
                ApplyLegalName        = application.ApplyData.ApplyDetails.OrganisationName,
                ApplicationRoute      = application.ApplyData.ApplyDetails.ProviderRouteName,
                SubmittedDate         = application.ApplyData.ApplyDetails.ApplicationSubmittedOn,
                ApplicantEmailAddress = contact.Email,

                SequenceNumber = clarificationPage.SequenceNumber,
                SectionNumber  = clarificationPage.SectionNumber,
                PageId         = clarificationPage.PageId,
                NextPageId     = clarificationPage.NextPageId,

                Caption = clarificationPage.Caption,
                Heading = clarificationPage.Heading,

                GuidanceInformation = clarificationPage.GuidanceInformation != null ? new List <string>(clarificationPage.GuidanceInformation) : new List <string>(),

                Questions   = clarificationPage.Questions != null ? new List <Question>(clarificationPage.Questions) : new List <Question>(),
                Answers     = clarificationPage.Answers != null ? new List <Answer>(clarificationPage.Answers) : new List <Answer>(),
                TabularData = GetTabularDataFromQuestionsAndAnswers(clarificationPage.Questions, clarificationPage.Answers),
                SupplementaryInformation = await _supplementaryInformationService.GetSupplementaryInformation(application.ApplicationId, clarificationPage.PageId),

                BlindAssessmentOutcome = await _moderationApiClient.GetBlindAssessmentOutcome(application.ApplicationId, clarificationPage.SequenceNumber, clarificationPage.SectionNumber, clarificationPage.PageId)
            };

            await SetPageReviewOutcome(request, viewModel);

            return(viewModel);
        }