示例#1
0
        public async Task AppealSubmitted_shows_Submitted_page_if_appeal_submitted()
        {
            var model = new AppealSubmittedViewModel
            {
                ApplicationId                = _applicationId,
                AppealSubmittedDate          = DateTime.UtcNow,
                HowFailedOnEvidenceSubmitted = "valid input",
                HowFailedOnPolicyOrProcesses = "valid input",
                AppealFiles = new List <AppealFile>()
            };

            var appeal = new GetAppealResponse
            {
                Status                       = AppealStatus.Submitted,
                ApplicationId                = model.ApplicationId,
                AppealSubmittedDate          = model.AppealSubmittedDate,
                HowFailedOnEvidenceSubmitted = model.HowFailedOnEvidenceSubmitted,
                HowFailedOnPolicyOrProcesses = model.HowFailedOnPolicyOrProcesses,
                AppealFiles                  = model.AppealFiles
            };

            _appealsApiClient.Setup(x => x.GetAppeal(_applicationId)).ReturnsAsync(appeal);

            var result = await _controller.AppealSubmitted(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain("AppealSubmitted.cshtml");
            viewResult.Model.Should().BeEquivalentTo(model);
        }
示例#2
0
        public async Task AppealSubmitted_shows_Successful_Gateway_Fail_page_if_appeal_deemed_Successful_and_Gateway_Fail(string appealStatus)
        {
            var model = new AppealSuccessfulViewModel
            {
                ApplicationId = _applicationId,
            };

            var appeal = new GetAppealResponse
            {
                Status        = appealStatus,
                ApplicationId = model.ApplicationId,
            };

            _appealsApiClient.Setup(x => x.GetAppeal(_applicationId)).ReturnsAsync(appeal);

            var application = new Apply
            {
                GatewayReviewStatus = GatewayReviewStatus.Fail,
                ApplicationStatus   = ApplicationStatus.AppealSuccessful
            };

            _applicationApiClient.Setup(x => x.GetApplication(_applicationId)).ReturnsAsync(application);
            var result = await _controller.AppealSuccessful(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain("~/Views/Appeals/AppealSuccessfulGatewayFail.cshtml");
            viewResult.Model.Should().BeEquivalentTo(model);
        }
示例#3
0
        public async Task AppealSubmitted_shows_Unsuccessful_page_if_appeal_deemed_unsuccessful()
        {
            var model = new AppealUnsuccessfulViewModel
            {
                ApplicationId               = _applicationId,
                AppealSubmittedDate         = DateTime.UtcNow.AddDays(-1),
                AppealDeterminedDate        = DateTime.UtcNow,
                AppealedOnEvidenceSubmitted = true,
                AppealedOnPolicyOrProcesses = true,
                ExternalComments            = "You were unsuccessful"
            };

            var appeal = new GetAppealResponse
            {
                Status                       = AppealStatus.Unsuccessful,
                ApplicationId                = model.ApplicationId,
                AppealSubmittedDate          = model.AppealSubmittedDate,
                AppealDeterminedDate         = model.AppealDeterminedDate,
                HowFailedOnEvidenceSubmitted = "valid input",
                HowFailedOnPolicyOrProcesses = "valid input",
                ExternalComments             = model.ExternalComments
            };

            _appealsApiClient.Setup(x => x.GetAppeal(_applicationId)).ReturnsAsync(appeal);

            var result = await _controller.AppealUnsuccessful(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain("AppealUnsuccessful.cshtml");
            viewResult.Model.Should().BeEquivalentTo(model);
        }
        public async Task <OutcomeViewModel> GetOversightDetailsViewModel(Guid applicationId, Guid?outcomeKey)
        {
            var applicationDetailsTask = _applyApiClient.GetApplicationDetails(applicationId);
            var oversightReviewTask    = _applyApiClient.GetOversightReview(applicationId);
            await Task.WhenAll(applicationDetailsTask, oversightReviewTask);

            var applicationDetails = _applyApiClient.GetApplicationDetails(applicationId).Result;
            var oversightReview    = _applyApiClient.GetOversightReview(applicationId).Result;

            GetAppealResponse appealResponse = null;

            if (oversightReview != null)
            {
                appealResponse = await _applyApiClient.GetAppeal(applicationId, oversightReview.Id);
            }

            var viewModel = new OutcomeViewModel
            {
                IsNew = oversightReview == null,
                ApplicationSummary     = CreateApplicationSummaryViewModel(applicationDetails),
                GatewayOutcome         = CreateGatewayOutcomeViewModel(applicationDetails, oversightReview),
                FinancialHealthOutcome = CreateFinancialHealthOutcomeViewModel(applicationDetails),
                ModerationOutcome      = CreateModerationOutcomeViewModel(applicationDetails, oversightReview),
                InProgressDetails      = CreateInProgressDetailsViewModel(oversightReview),
                OverallOutcome         = CreateOverallOutcomeViewModel(oversightReview),
                AppealViewModel        = appealResponse == null ? null : CreateAppealViewModel(applicationDetails, appealResponse),
                ShowAppealLink         = oversightReview != null && oversightReview.Status == OversightReviewStatus.Unsuccessful && appealResponse == null,
                ShowInProgressDetails  = oversightReview?.InProgressDate != null,
                OversightStatus        = oversightReview?.Status ?? OversightReviewStatus.None,
                ApproveGateway         = GetStringValueForApprovalStatusBoolean(oversightReview?.GatewayApproved),
                ApproveModeration      = GetStringValueForApprovalStatusBoolean(oversightReview?.ModerationApproved),
                IsGatewayRemoved       = applicationDetails.ApplicationStatus == ApplicationStatus.Removed,
                IsGatewayFail          = applicationDetails.GatewayReviewStatus == GatewayReviewStatus.Fail,
                HasFinalOutcome        = oversightReview != null && oversightReview.Status != OversightReviewStatus.None && oversightReview.Status != OversightReviewStatus.InProgress
            };

            if (oversightReview == null || oversightReview.Status == OversightReviewStatus.InProgress)
            {
                var cachedItem = await _cacheStorageService.RetrieveFromCache <OutcomePostRequest>(outcomeKey.ToString());

                if (cachedItem == null)
                {
                    return(viewModel);
                }

                viewModel.OversightStatus                 = cachedItem.OversightStatus;
                viewModel.ApproveGateway                  = cachedItem.ApproveGateway;
                viewModel.ApproveModeration               = cachedItem.ApproveModeration;
                viewModel.SuccessfulText                  = cachedItem.SuccessfulText;
                viewModel.SuccessfulAlreadyActiveText     = cachedItem.SuccessfulAlreadyActiveText;
                viewModel.SuccessfulFitnessForFundingText = cachedItem.SuccessfulFitnessForFundingText;
                viewModel.UnsuccessfulText                = cachedItem.UnsuccessfulText;
                viewModel.UnsuccessfulExternalText        = cachedItem.UnsuccessfulExternalText;
                viewModel.InProgressInternalText          = cachedItem.InProgressInternalText;
                viewModel.InProgressExternalText          = cachedItem.InProgressExternalText;
            }

            return(viewModel);
        }
        public async Task AppealNotYetSubmittedRequirement_Does_Not_Succeed_If_User_Has_Submitted_Appeal()
        {
            var appeal = new GetAppealResponse {
                ApplicationId = _applicationId, AppealSubmittedDate = DateTime.Now
            };

            _appealsApiClient.Setup(x => x.GetAppeal(_applicationId)).ReturnsAsync(appeal);

            var handlerContext = CreateHandlerContext(new AppealNotYetSubmittedRequirement());
            await _handler.HandleAsync(handlerContext);

            Assert.IsFalse(handlerContext.HasSucceeded);
        }
示例#6
0
        public async Task AppealSubmitted_shows_Successful_page_if_appeal_deemed_Successful(string appealStatus, bool isSupporting, string expectedPage)
        {
            var model = new AppealSuccessfulViewModel
            {
                ApplicationId               = _applicationId,
                AppealSubmittedDate         = DateTime.UtcNow.AddDays(-1),
                AppealDeterminedDate        = DateTime.UtcNow,
                AppealedOnEvidenceSubmitted = true,
                AppealedOnPolicyOrProcesses = true,
                ExternalComments            = "You were successful"
            };

            var appeal = new GetAppealResponse
            {
                Status                       = appealStatus,
                ApplicationId                = model.ApplicationId,
                AppealSubmittedDate          = model.AppealSubmittedDate,
                AppealDeterminedDate         = model.AppealDeterminedDate,
                HowFailedOnEvidenceSubmitted = "valid input",
                HowFailedOnPolicyOrProcesses = "valid input",
                ExternalComments             = model.ExternalComments
            };

            _appealsApiClient.Setup(x => x.GetAppeal(_applicationId)).ReturnsAsync(appeal);

            var route = Domain.Roatp.ApplicationRoute.MainProviderApplicationRoute;

            if (isSupporting)
            {
                route = Domain.Roatp.ApplicationRoute.SupportingProviderApplicationRoute;
            }

            var application = new Apply
            {
                ApplyData = new ApplyData {
                    ApplyDetails = new ApplyDetails {
                        ProviderRoute = route
                    }
                }
            };

            _applicationApiClient.Setup(x => x.GetApplication(_applicationId)).ReturnsAsync(application);
            var result = await _controller.AppealSuccessful(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain(expectedPage);
            viewResult.Model.Should().BeEquivalentTo(model);
        }
        public async Task <ApplicationSummaryViewModel> BuildApplicationSummaryViewModel(Guid applicationId, string emailAddress)
        {
            var application = await _applicationApiClient.GetApplication(applicationId);

            var financialReviewDetails = await _applicationApiClient.GetFinancialReviewDetails(applicationId);

            GetOversightReviewResponse oversightReview = null;
            GetAppealResponse          appeal          = null;

            var applyingJourneyStatuses = new List <string> {
                ApplicationStatus.New, ApplicationStatus.InProgress
            };

            if (!applyingJourneyStatuses.Contains(application.Status))
            {
                oversightReview = await _apiClient.GetOversightReview(applicationId);

                appeal = await _appealsApiClient.GetAppeal(applicationId);
            }

            var applicationData = application.ApplyData.ApplyDetails;

            var model = new ApplicationSummaryViewModel
            {
                ApplicationId                       = application.ApplicationId,
                UKPRN                               = applicationData.UKPRN,
                OrganisationName                    = applicationData.OrganisationName,
                TradingName                         = applicationData.TradingName,
                ApplicationRouteId                  = applicationData.ProviderRoute.ToString(),
                ApplicationReference                = applicationData.ReferenceNumber,
                SubmittedDate                       = applicationData?.ApplicationSubmittedOn,
                GatewayExternalComments             = application.ExternalComments ?? application.ApplyData.GatewayReviewDetails?.ExternalComments,
                EmailAddress                        = emailAddress,
                FinancialReviewStatus               = financialReviewDetails?.Status,
                FinancialGrade                      = financialReviewDetails?.SelectedGrade,
                FinancialExternalComments           = financialReviewDetails?.ExternalComments,
                GatewayReviewStatus                 = application?.GatewayReviewStatus,
                ModerationStatus                    = application?.ModerationStatus,
                SubcontractingLimit                 = application?.ApplyData?.GatewayReviewDetails?.SubcontractingLimit,
                ApplicationStatus                   = application?.ApplicationStatus,
                ApplicationDeterminedDate           = oversightReview?.ApplicationDeterminedDate,
                OversightReviewStatus               = oversightReview?.Status,
                OversightInProgressExternalComments = oversightReview?.InProgressExternalComments,
                AppealRequiredByDate                = oversightReview is null ? null : await _apiClient.GetWorkingDaysAheadDate(oversightReview?.ApplicationDeterminedDate, NumberOfWorkingDaysToAppeal),
                IsAppealSubmitted                   = appeal?.AppealSubmittedDate != null,
                AppealStatus                        = appeal?.Status
            };

            return(model);
        }
示例#8
0
        public async Task MakeAppeal_shows_ProcessApplicationStatus_page_if_appeal_already_submitted()
        {
            var appeal = new GetAppealResponse {
                Status = AppealStatus.Submitted, AppealSubmittedDate = DateTime.UtcNow
            };

            _appealsApiClient.Setup(x => x.GetAppeal(_applicationId)).ReturnsAsync(appeal);

            var result = await _controller.MakeAppeal(_applicationId);

            var viewResult = result as RedirectToActionResult;

            viewResult.Should().NotBeNull();
            viewResult.ActionName.Should().Be("ProcessApplicationStatus");
        }
 private AppealOutcomeViewModel CreateAppealViewModel(ApplicationDetails applicationDetails, GetAppealResponse appealResponse)
 {
     return(new AppealOutcomeViewModel
     {
         ApplicationId = applicationDetails.ApplicationId,
         AppealId = appealResponse.Id,
         Message = appealResponse.Message,
         CreatedOn = appealResponse.CreatedOn,
         Status = appealResponse.Status,
         UserId = appealResponse.UserId,
         UserName = appealResponse.UserName,
         Uploads = appealResponse.Uploads.Select((upload => new AppealOutcomeViewModel.AppealUpload
         {
             Id = upload.Id,
             Filename = upload.Filename,
             ContentType = upload.ContentType,
         })).ToList()
     });
 }