public async Task Application_shows_approved_supporting_page_with_formatted_amount_if_application_approved_and_successful_and_route_is_supporting(int subcontractorLimit, string subcontractLimitFormatted)
        {
            var supportingRouteId = Domain.Roatp.ApplicationRoute.SupportingProviderApplicationRoute;

            var model = new ApplicationSummaryViewModel
            {
                ApplicationStatus   = ApplicationStatus.Successful,
                ApplicationRouteId  = supportingRouteId.ToString(),
                SubcontractingLimit = subcontractorLimit
            };

            _outcomeService.Setup(x => x.BuildApplicationSummaryViewModel(_applicationId, It.IsAny <string>())).ReturnsAsync(model);

            var result = await _controller.ProcessApplicationStatus(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain("ApplicationApprovedSupporting.cshtml");

            var modelReturned = viewResult.Model as ApplicationSummaryViewModel;

            modelReturned.SubcontractingLimit.Should().Be(subcontractorLimit);
            modelReturned.SubcontractingLimitFormatted.Should().Be(subcontractLimitFormatted);
        }
        public async Task Application_shows_approved_supporting_page_with_formatted_amount_that_matches_oversight_and_appeal_statuses(OversightReviewStatus oversightReviewStatus, string appealStatus, string expectedView, int subcontractorLimit, string subcontractLimitFormatted)
        {
            var supportingRouteId = Domain.Roatp.ApplicationRoute.SupportingProviderApplicationRoute;

            var model = new ApplicationSummaryViewModel
            {
                ApplicationStatus     = ApplicationStatus.Successful,
                ApplicationRouteId    = supportingRouteId.ToString(),
                SubcontractingLimit   = subcontractorLimit,
                OversightReviewStatus = oversightReviewStatus,
                AppealStatus          = appealStatus
            };

            _outcomeService.Setup(x => x.BuildApplicationSummaryViewModel(_applicationId, It.IsAny <string>())).ReturnsAsync(model);

            var result = await _controller.ProcessApplicationStatus(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain(expectedView);

            var modelReturned = viewResult.Model as ApplicationSummaryViewModel;

            modelReturned.SubcontractingLimit.Should().Be(subcontractorLimit);
            modelReturned.SubcontractingLimitFormatted.Should().Be(subcontractLimitFormatted);
        }
Пример #3
0
        public ApplicationSummaryPage()
        {
            InitializeComponent();
            ViewModel = IoC.Get<ApplicationSummaryViewModel>();

            _manipulator = new ResourceManipulator(Contents);
            _modsViewSource = _manipulator.Get<CollectionViewSource>("FilteredMods");
            _modsViewSource.Filter += ModsViewSourceOnFilter;
            AnimateOutFinished += Dispose;
        }
Пример #4
0
        public void TestUrlIsEncoded()
        {
            //Arrange
            Mock <IApplicationProvider> mockApplicationProvider = new Mock <IApplicationProvider>();
            Mock <ShareApplicationsViewModelValidator>             mockShareApplicationsViewModelValidator = new Mock <ShareApplicationsViewModelValidator>();
            Mock <IEncryptionService <AnonymisedApplicationLink> > mockEncryptionService = new Mock <IEncryptionService <AnonymisedApplicationLink> >();
            Mock <IDateTimeService> mockDateTimeService  = new Mock <IDateTimeService>();
            Mock <UrlHelper>        mockUrlHelper        = new Mock <UrlHelper>();
            Mock <ValidationResult> mockValidationResult = new Mock <ValidationResult>();
            var    applicationGuid    = Guid.NewGuid();
            string applicantId        = "applicantId";
            var    applicationSummary = new ApplicationSummaryViewModel()
            {
                ApplicationId = applicationGuid, ApplicantID = applicantId
            };

            mockValidationResult.Setup(m => m.IsValid).Returns(true);

            mockShareApplicationsViewModelValidator.Setup(m => m.Validate(It.IsAny <ShareApplicationsViewModel>()))
            .Returns(mockValidationResult.Object);

            mockApplicationProvider.Setup(m => m.GetShareApplicationsViewModel(It.IsAny <int>()))
            .Returns(new ShareApplicationsViewModel()
            {
                VacancyType          = VacancyType.Apprenticeship,
                ApplicationSummaries = { applicationSummary }
            });

            //this is the unencrypted version, that we should not use
            mockEncryptionService.Setup(m => m.Encrypt(It.IsAny <AnonymisedApplicationLink>())).Returns("abcABC+123/123");
            //this is the actual url data value
            mockUrlHelper.Setup(m => m.RouteUrl(It.IsAny <string>(), It.IsAny <RouteValueDictionary>())).Returns("THE_URL");

            var parameters = new ShareApplicationsViewModel();

            parameters.SelectedApplicationIds = new List <Guid>()
            {
                applicationGuid
            };
            parameters.ApplicationSummaries = new List <ApplicationSummaryViewModel>()
            {
                applicationSummary
            };

            var mediator = new ApplicationMediator(mockApplicationProvider.Object, mockShareApplicationsViewModelValidator.Object, mockEncryptionService.Object, mockDateTimeService.Object);

            //Act
            mediator.ShareApplications(parameters, mockUrlHelper.Object);

            //Assert
            mockApplicationProvider.Verify(m => m.ShareApplications(It.IsAny <int>(), It.IsAny <string>(), It.IsAny <Dictionary <string, string> >(), It.IsAny <DateTime>(), It.IsAny <string>()), Times.Once);
            mockApplicationProvider.Verify(m => m.ShareApplications(It.IsAny <int>(), It.IsAny <string>(), It.Is <Dictionary <string, string> >(d => d[applicantId].Equals("THE_URL")), It.IsAny <DateTime>(), It.IsAny <string>()), Times.Once);
            mockUrlHelper.Verify(m => m.RouteUrl(It.IsAny <string>(), It.Is <RouteValueDictionary>(rvd => rvd["application"].ToString().Contains("+"))), Times.Never);
            mockUrlHelper.Verify(m => m.RouteUrl(It.IsAny <string>(), It.Is <RouteValueDictionary>(rvd => rvd["application"].ToString().Contains("/"))), Times.Never);
        }
        private ApplicationSummaryViewModel CreateApplicationSummaryViewModel(ApplicationDetails applicationDetails)
        {
            var result = new ApplicationSummaryViewModel
            {
                ApplicationId = applicationDetails.ApplicationId,
                ApplicationReferenceNumber = applicationDetails.ApplicationReferenceNumber,
                ApplicationSubmittedDate   = applicationDetails.ApplicationSubmittedDate,
                OrganisationName           = applicationDetails.OrganisationName,
                Ukprn                   = applicationDetails.Ukprn,
                ProviderRoute           = applicationDetails.ProviderRoute,
                ApplicationStatus       = applicationDetails.ApplicationStatus,
                ApplicationEmailAddress = applicationDetails.ApplicationEmailAddress,
                AssessorReviewStatus    = applicationDetails.AssessorReviewStatus,
            };

            var financialDetailsPass = false;

            if (applicationDetails.FinancialReviewStatus == FinancialReviewStatus.Exempt)
            {
                financialDetailsPass = true;
            }
            else
            {
                if (applicationDetails.FinancialReviewStatus == FinancialReviewStatus.Pass &&
                    (applicationDetails.FinancialGradeAwarded == FinancialApplicationSelectedGrade.Exempt ||
                     applicationDetails.FinancialGradeAwarded == FinancialApplicationSelectedGrade.Outstanding ||
                     applicationDetails.FinancialGradeAwarded == FinancialApplicationSelectedGrade.Good ||
                     applicationDetails.FinancialGradeAwarded == FinancialApplicationSelectedGrade.Satisfactory))
                {
                    financialDetailsPass = true;
                }
            }

            if (applicationDetails.GatewayReviewStatus == GatewayReviewStatus.Pass &&
                applicationDetails.ModerationReviewStatus == ModerationReviewStatus.Pass &&
                financialDetailsPass)
            {
                result.AssessmentOutcome = AssessmentOutcomeStatus.Passed;
            }
            else
            {
                result.AssessmentOutcome = AssessmentOutcomeStatus.Failed;
            }

            result.ShowAssessmentOutcome = applicationDetails.GatewayReviewStatus == GatewayReviewStatus.Pass;

            return(result);
        }
        public async Task Application_shows_outcome_in_progress_page_if_application_InProgressOutcome()
        {
            var model = new ApplicationSummaryViewModel
            {
                ApplicationStatus = ApplicationStatus.InProgressOutcome
            };

            _outcomeService.Setup(x => x.BuildApplicationSummaryViewModel(_applicationId, It.IsAny <string>())).ReturnsAsync(model);

            var result = await _controller.ProcessApplicationStatus(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain("ApplicationInProgress.cshtml");
        }
        public async Task Application_shows_feedback_added_page_if_application_status_matches()
        {
            var model = new ApplicationSummaryViewModel
            {
                ApplicationStatus = ApplicationStatus.FeedbackAdded
            };

            _outcomeService.Setup(x => x.BuildApplicationSummaryViewModel(_applicationId, It.IsAny <string>())).ReturnsAsync(model);

            var result = await _controller.ProcessApplicationStatus(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain("FeedbackAdded.cshtml");
        }
        public async Task Application_shows_rejected_page_if_application_rejected_at_gateway()
        {
            var model = new ApplicationSummaryViewModel
            {
                ApplicationStatus   = ApplicationStatus.GatewayAssessed,
                GatewayReviewStatus = GatewayReviewStatus.Rejected
            };

            _outcomeService.Setup(x => x.BuildApplicationSummaryViewModel(_applicationId, It.IsAny <string>())).ReturnsAsync(model);

            var result = await _controller.ProcessApplicationStatus(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain("ApplicationRejected.cshtml");
        }
        public async Task Application_shows_already_active_success_page_if_application_approved_and_oversight_review_status_already_active()
        {
            var model = new ApplicationSummaryViewModel
            {
                ApplicationStatus     = ApplicationStatus.Successful,
                OversightReviewStatus = OversightReviewStatus.SuccessfulAlreadyActive
            };

            _outcomeService.Setup(x => x.BuildApplicationSummaryViewModel(_applicationId, It.IsAny <string>())).ReturnsAsync(model);

            var result = await _controller.ProcessApplicationStatus(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain("ApplicationApprovedAlreadyActive.cshtml");
        }
        public async Task Application_shows_task_list_if_an_application_not_set()
        {
            var model = new ApplicationSummaryViewModel
            {
                ApplicationStatus = null
            };

            _outcomeService.Setup(x => x.BuildApplicationSummaryViewModel(_applicationId, It.IsAny <string>())).ReturnsAsync(model);

            var result = await _controller.ProcessApplicationStatus(_applicationId);

            var redirectResult = result as RedirectToActionResult;

            redirectResult.Should().NotBeNull();
            redirectResult.ActionName.Should().Be("TaskList");
            redirectResult.ControllerName.Should().Be("RoatpApplication");
        }
Пример #11
0
        public async Task Application_new_invitation_refresh_requested()
        {
            var applicationId = Guid.NewGuid();

            var viewModel = new ApplicationSummaryViewModel
            {
                ApplicationId = applicationId
            };

            var result = await _controller.RequestNewInvitationRefresh(applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.Model.Should().BeEquivalentTo(viewModel);
            viewResult.ViewName.Should().Contain("RequestNewInvitation.cshtml");
        }
        public async Task Application_shows_removed_page_if_application_removed_and_oversight_status_is_removed()
        {
            var model = new ApplicationSummaryViewModel
            {
                ApplicationStatus     = ApplicationStatus.Removed,
                OversightReviewStatus = OversightReviewStatus.Removed
            };

            _outcomeService.Setup(x => x.BuildApplicationSummaryViewModel(_applicationId, It.IsAny <string>())).ReturnsAsync(model);

            var result = await _controller.ProcessApplicationStatus(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain("ApplicationWithdrawnESFA.cshtml");
        }
Пример #13
0
        public async Task Application_new_invitation_requested()
        {
            var applicationId = Guid.NewGuid();

            var viewModel = new ApplicationSummaryViewModel
            {
                ApplicationId = applicationId
            };

            var result = await _controller.RequestNewInvitation(applicationId);

            var viewResult = result as RedirectToActionResult;

            viewResult.Should().NotBeNull();
            viewResult.ActionName.Should().Be("RequestNewInvitationRefresh");
            _applicationApiClient.Verify(x => x.GetApplication(applicationId), Times.Once);
            _emailService.Verify(x => x.SendRequestToReapplyEmail(It.IsAny <RequestInvitationToReapply>()), Times.Once);
        }
        public async Task Application_shows_active_with_view_appropriate_to_oversight_or_appeal_status(OversightReviewStatus oversightReviewStatus, string appealStatus, string expectedView)
        {
            var model = new ApplicationSummaryViewModel
            {
                ApplicationStatus     = ApplicationStatus.Successful,
                OversightReviewStatus = oversightReviewStatus,
                AppealStatus          = appealStatus
            };

            _outcomeService.Setup(x => x.BuildApplicationSummaryViewModel(_applicationId, It.IsAny <string>())).ReturnsAsync(model);

            var result = await _controller.ProcessApplicationStatus(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain(expectedView);
        }
        public async Task Application_shows_removed_page_if_application_removed_and_oversight_status_is_not_removed(OversightReviewStatus oversightStatus)
        {
            var model = new ApplicationSummaryViewModel
            {
                ApplicationStatus         = ApplicationStatus.Removed,
                OversightReviewStatus     = oversightStatus,
                ApplicationDeterminedDate = DateTime.Today,
                AppealRequiredByDate      = DateTime.Today.AddDays(10)
            };

            _outcomeService.Setup(x => x.BuildApplicationSummaryViewModel(_applicationId, It.IsAny <string>())).ReturnsAsync(model);

            var result = await _controller.ProcessApplicationStatus(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain("ApplicationSubmitted.cshtml");
        }
        public async Task Applications_shows_unsuccessful_page_if_application_unsuccessful_and_gateway_fail()
        {
            var model = new ApplicationSummaryViewModel
            {
                ApplicationStatus         = ApplicationStatus.Unsuccessful,
                GatewayReviewStatus       = GatewayReviewStatus.Fail,
                ApplicationDeterminedDate = DateTime.Today,
                AppealRequiredByDate      = DateTime.Today.AddDays(10)
            };

            _outcomeService.Setup(x => x.BuildApplicationSummaryViewModel(_applicationId, It.IsAny <string>())).ReturnsAsync(model);

            var result = await _controller.ProcessApplicationStatus(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain("ApplicationUnsuccessful.cshtml");
        }
        public async Task Application_shows_appeal_successful_page_when_appeal_submitted_and_successful_outcome()
        {
            var model = new ApplicationSummaryViewModel
            {
                ApplicationStatus         = ApplicationStatus.Unsuccessful,
                OversightReviewStatus     = OversightReviewStatus.Unsuccessful,
                ApplicationDeterminedDate = DateTime.Today,
                AppealRequiredByDate      = DateTime.Today.AddDays(10),
                AppealStatus      = AppealStatus.Successful,
                IsAppealSubmitted = true
            };

            _outcomeService.Setup(x => x.BuildApplicationSummaryViewModel(_applicationId, It.IsAny <string>())).ReturnsAsync(model);

            var result = await _controller.ProcessApplicationStatus(_applicationId);

            var redirectResult = result as RedirectToActionResult;

            redirectResult.Should().NotBeNull();
            redirectResult.ActionName.Should().Be("AppealSuccessful");
            redirectResult.ControllerName.Should().Be("RoatpAppeals");
        }
        public async Task Application_shows_unsuccessful_page_when_appeal_submitted_and_unsuccessful_outcome_and_application_overview_clicked()
        {
            var model = new ApplicationSummaryViewModel
            {
                ApplicationStatus         = ApplicationStatus.Unsuccessful,
                OversightReviewStatus     = OversightReviewStatus.Unsuccessful,
                ApplicationDeterminedDate = DateTime.Today,
                AppealRequiredByDate      = DateTime.Today.AddDays(10),
                AppealStatus      = AppealStatus.Unsuccessful,
                IsAppealSubmitted = true
            };

            _outcomeService.Setup(x => x.BuildApplicationSummaryViewModel(_applicationId, It.IsAny <string>())).ReturnsAsync(model);

            _controller.HttpContext.Request.Headers.Add("Referer", $"http://localhost/application/{_applicationId}/status");

            var result = await _controller.ProcessApplicationStatus(_applicationId);

            var viewResult = result as ViewResult;

            viewResult.Should().NotBeNull();
            viewResult.ViewName.Should().Contain("ApplicationUnsuccessfulPostGateway.cshtml");
        }
Пример #19
0
 public OpenModFolderCommand(ApplicationSummaryViewModel summaryViewModel)
 {
     _summaryViewModel = summaryViewModel;
     _summaryViewModel.PropertyChanged += SummaryViewModelPropertyChanged;
 }
        public async Task BuildApplicationSummaryViewModel_builds_expected_viewModel(string appealStatus, bool appealSubmitted)
        {
            var emailAddress         = "*****@*****.**";
            var ukprn                = "12345678";
            var organisationName     = "org name 1";
            var tradingName          = "trading name";
            var applicationRouteId   = 1;
            var applicationReference = "ABC";
            var submittedDate        = DateTime.Today.AddDays(-32);
            var externalComments     = "external comments";
            var gatewayReviewStatus  = GatewayReviewStatus.Pass;
            var moderationStatus     = Domain.Apply.ModerationStatus.Fail;

            if (string.IsNullOrEmpty(appealStatus))
            {
                _appealsApiClient.Setup(x => x.GetAppeal(_applicationId))
                .ReturnsAsync((GetAppealResponse)null);
            }
            else
            {
                _appealsApiClient.Setup(x => x.GetAppeal(_applicationId))
                .ReturnsAsync(new GetAppealResponse {
                    Status = appealStatus, AppealSubmittedDate = DateTime.Today
                });
            }

            var application = new Apply
            {
                ApplicationId       = _applicationId,
                ExternalComments    = externalComments,
                GatewayReviewStatus = gatewayReviewStatus,
                ModerationStatus    = moderationStatus,
                ApplyData           = new ApplyData
                {
                    ApplyDetails = new ApplyDetails
                    {
                        UKPRN                  = ukprn,
                        OrganisationName       = organisationName,
                        TradingName            = tradingName,
                        ProviderRoute          = applicationRouteId,
                        ReferenceNumber        = applicationReference,
                        ApplicationSubmittedOn = submittedDate
                    }
                }
            };

            _applicationApiClient.Setup(x => x.GetApplication(_applicationId)).ReturnsAsync(application);

            var financialReviewDetails = new FinancialReviewDetails
            {
                SelectedGrade    = FinancialApplicationSelectedGrade.Outstanding,
                ExternalComments = "financial external comments",
                Status           = FinancialReviewStatus.Pass
            };

            _applicationApiClient.Setup(x => x.GetFinancialReviewDetails(_applicationId)).ReturnsAsync(financialReviewDetails);

            var expectedModel = new ApplicationSummaryViewModel
            {
                ApplicationId             = _applicationId,
                UKPRN                     = ukprn,
                OrganisationName          = organisationName,
                EmailAddress              = emailAddress,
                TradingName               = tradingName,
                ApplicationRouteId        = applicationRouteId.ToString(),
                ApplicationReference      = applicationReference,
                SubmittedDate             = submittedDate,
                GatewayExternalComments   = externalComments,
                GatewayReviewStatus       = gatewayReviewStatus,
                ModerationStatus          = moderationStatus,
                FinancialGrade            = financialReviewDetails.SelectedGrade,
                FinancialReviewStatus     = financialReviewDetails.Status,
                FinancialExternalComments = financialReviewDetails.ExternalComments,
                IsAppealSubmitted         = appealSubmitted,
                AppealStatus              = appealStatus
            };

            var returnedModel = await _service.BuildApplicationSummaryViewModel(_applicationId, emailAddress);

            expectedModel.Should().BeEquivalentTo(returnedModel);
        }
Пример #21
0
 public ConfigureModCommand(ApplicationSummaryViewModel summaryViewModel)
 {
     _summaryViewModel = summaryViewModel;
     _summaryViewModel.PropertyChanged += SummaryViewModelOnPropertyChanged;
 }