public async Task Applications_shows_Applications_page_if_multiple_applications_in_progress()
        {
            var inProgressApp = new Domain.Entities.Apply
            {
                ApplicationStatus = ApplicationStatus.InProgress
            };

            var submittedApp = new Domain.Entities.Apply
            {
                ApplicationStatus = ApplicationStatus.Submitted
            };

            var gatewayAssessedApp = new Domain.Entities.Apply
            {
                ApplicationStatus = ApplicationStatus.GatewayAssessed
            };

            var applications = new List <Domain.Entities.Apply>
            {
                inProgressApp,
                submittedApp,
                gatewayAssessedApp
            };

            _apiClient.Setup(x => x.GetApplications(It.IsAny <Guid>(), It.IsAny <bool>())).ReturnsAsync(applications);

            var result = await _controller.Applications();

            var viewResult = result as ViewResult;

            viewResult.ViewName.Should().EndWith("Applications.cshtml");
        }
        private void UpdateApplicationStatus(Domain.Entities.Apply application, int sequenceNo)
        {
            // Always default it to submitted
            application.ApplicationStatus = ApplicationStatus.Submitted;
            application.ReviewStatus      = ApplicationReviewStatus.New;

            var applyData = application.ApplyData;

            if (sequenceNo == 1)
            {
                application.ApplicationStatus = (applyData.Apply.InitSubmissions.Count == 1) ? ApplicationStatus.Submitted : ApplicationStatus.Resubmitted;

                var closedFinanicalStatuses = new List <string> {
                    FinancialReviewStatus.Approved, FinancialReviewStatus.Exempt
                };

                if (!closedFinanicalStatuses.Contains(application.FinancialReviewStatus))
                {
                    application.FinancialReviewStatus = FinancialReviewStatus.New;
                }
            }
            else if (sequenceNo == 2)
            {
                application.ApplicationStatus = (applyData.Apply.StandardSubmissions.Count == 1) ? ApplicationStatus.Submitted : ApplicationStatus.Resubmitted;
            }
        }
Пример #3
0
        private void SaveChanges(OversightReview oversightReview, Domain.Entities.Apply application, bool isNew)
        {
            if (isNew)
            {
                _oversightReviewRepository.Add(oversightReview);
            }
            else
            {
                _oversightReviewRepository.Update(oversightReview);
            }

            switch (oversightReview.Status)
            {
            case OversightReviewStatus.InProgress:
                application.ApplicationStatus = ApplicationStatus.InProgressOutcome;
                break;

            case OversightReviewStatus.Successful:
            case OversightReviewStatus.SuccessfulAlreadyActive:
            case OversightReviewStatus.SuccessfulFitnessForFunding:
                application.ApplicationStatus = ApplicationStatus.Successful;
                break;

            case OversightReviewStatus.Unsuccessful:
                application.ApplicationStatus = application.GatewayReviewStatus == GatewayReviewStatus.Rejected
                        ? ApplicationStatus.Rejected :
                                                ApplicationStatus.Unsuccessful;
                break;
            }

            _applyRepository.Update(application);
        }
Пример #4
0
        public async Task RemoveSubcontractorDeclarationFile_swith_wrong_name_is_not_updated()
        {
            var applicationId     = Guid.NewGuid();
            var clarificationFile = "file.pdf";
            var wrongFileName     = "file2.pdf";
            var userId            = "user id";
            var userName          = "******";

            var application = new Domain.Entities.Apply
            {
                ApplyData = new ApplyData
                {
                    GatewayReviewDetails = new ApplyGatewayDetails
                    {
                        GatewaySubcontractorDeclarationClarificationUpload = wrongFileName
                    }
                }
            };

            _repository.Setup(x => x.GetApplication(applicationId)).ReturnsAsync(application);

            await _handler.Handle(new RemoveSubcontractorDeclarationFileRequest(applicationId, clarificationFile, userId, userName), new CancellationToken());

            _gatewayRepository.Verify(x => x.UpdateGatewayApplyData(applicationId, It.IsAny <ApplyData>(), userId, userName), Times.Never);
        }
        public async Task AddSubcontractorDeclarationFile_is_empty_so_is_not_updated()
        {
            var applicationId     = Guid.NewGuid();
            var clarificationFile = (string)null;
            var userId            = "user id";
            var userName          = "******";

            var application = new Domain.Entities.Apply
            {
                ApplyData = new ApplyData
                {
                    GatewayReviewDetails = new ApplyGatewayDetails
                    {
                        GatewaySubcontractorDeclarationClarificationUpload = null
                    }
                }
            };

            _repository.Setup(x => x.GetApplication(applicationId)).ReturnsAsync(application);

            await _handler.Handle(new AddSubcontractorDeclarationFileUploadRequest(applicationId, clarificationFile, userId, userName), new CancellationToken());

            _repository.Verify(x => x.GetApplication(applicationId), Times.Never);
            _gatewayRepository.Verify(x => x.UpdateGatewayApplyData(applicationId, It.IsAny <ApplyData>(), userId, userName), Times.Never);
        }
        public void SetUp()
        {
            _applicationId = Guid.NewGuid();

            _application = new Domain.Entities.Apply
            {
                ApplicationId       = _applicationId,
                GatewayReviewStatus = GatewayReviewStatus.New,
                ApplyData           = new ApplyData()
            };

            _applyRepository = new Mock <IApplyRepository>();
            _applyRepository.Setup(x => x.GetApplication(_applicationId)).ReturnsAsync(() => _application);

            _gatewayRepository = new Mock <IGatewayRepository>();

            _oversightReviewRepository = new Mock <IOversightReviewRepository>();
            _oversightReviewRepository.Setup(x => x.Add(It.IsAny <OversightReview>()));

            _applicationUpdatedEmailService = new Mock <IApplicationUpdatedEmailService>();

            _handler = new UpdateGatewayReviewStatusAndCommentCommandHandler(_applyRepository.Object,
                                                                             _gatewayRepository.Object,
                                                                             _oversightReviewRepository.Object,
                                                                             Mock.Of <IAuditService>(),
                                                                             _applicationUpdatedEmailService.Object,
                                                                             Mock.Of <IUnitOfWork>());
        }
        public async Task TaskList_shows_tasklist_view_for_application()
        {
            var applicationId = Guid.NewGuid();
            var userId        = Guid.NewGuid();

            _userService.Setup(x => x.GetSignInId()).ReturnsAsync(() => userId);

            var inProgressApp = new Domain.Entities.Apply
            {
                ApplicationStatus = ApplicationStatus.InProgress,
                ApplyData         = new ApplyData()
            };

            _apiClient.Setup(x => x.GetApplicationByUserId(applicationId, userId)).ReturnsAsync(() => inProgressApp);

            _taskListOrchestrator.Setup(x => x.GetTaskListViewModel(applicationId, userId))
            .ReturnsAsync(() => new TaskListViewModel());

            var result = await _controller.TaskList(applicationId);

            Assert.IsInstanceOf <ViewResult>(result);
            var viewResult = (ViewResult)result;

            Assert.AreEqual("~/Views/Roatp/TaskList.cshtml", viewResult.ViewName);
        }
Пример #8
0
 public async Task SubmitApplicationSequence(Domain.Entities.Apply apply)
 {
     await _unitOfWork.Connection.ExecuteAsync(
         @"UPDATE Apply
           SET  ApplicationStatus = @ApplicationStatus, ApplyData = @ApplyData, StandardCode = @StandardCode, ReviewStatus = @ReviewStatus, FinancialReviewStatus = @FinancialReviewStatus, UpdatedBy = @UpdatedBy, UpdatedAt = GETUTCDATE() 
           WHERE  (Apply.Id = @Id)",
         param : new { apply.ApplicationStatus, apply.ApplyData, apply.StandardCode, apply.ReviewStatus, apply.FinancialReviewStatus, apply.Id, apply.UpdatedBy },
         transaction : _unitOfWork.Transaction);
 }
Пример #9
0
 public async Task <Guid> CreateApplication(Domain.Entities.Apply apply)
 {
     return(await _unitOfWork.Connection.QuerySingleAsync <Guid>(
                @"INSERT INTO Apply (ApplicationId, OrganisationId ,ApplicationStatus, ApplyData, StandardCode, ReviewStatus, FinancialReviewStatus, CreatedBy, CreatedAt)
           OUTPUT INSERTED.[Id] 
           VALUES (@ApplicationId, @OrganisationId, @ApplicationStatus, @ApplyData, @StandardCode, @ReviewStatus, @FinancialReviewStatus, @CreatedBy, GETUTCDATE())",
                param : new { apply.ApplicationId, apply.OrganisationId, apply.ApplicationStatus, apply.ApplyData, apply.StandardCode, apply.ReviewStatus, apply.FinancialReviewStatus, apply.CreatedBy },
                transaction : _unitOfWork.Transaction));
 }
 public async Task SubmitApplicationSequence(Domain.Entities.Apply apply)
 {
     using (var connection = new SqlConnection(_configuration.SqlConnectionString))
     {
         await connection.ExecuteAsync(@"UPDATE Apply
                                         SET  ApplicationStatus = @ApplicationStatus, ApplyData = @ApplyData, StandardCode = @StandardCode, ReviewStatus = @ReviewStatus, FinancialReviewStatus = @FinancialReviewStatus, UpdatedBy = @UpdatedBy, UpdatedAt = GETUTCDATE() 
                                         WHERE  (Apply.Id = @Id)",
                                       new { apply.ApplicationStatus, apply.ApplyData, apply.StandardCode, apply.ReviewStatus, apply.FinancialReviewStatus, apply.Id, apply.UpdatedBy });
     }
 }
 public async Task <Guid> CreateApplication(Domain.Entities.Apply apply)
 {
     using (var connection = new SqlConnection(_configuration.SqlConnectionString))
     {
         return(await connection.QuerySingleAsync <Guid>(
                    @"INSERT INTO Apply (ApplicationId, OrganisationId ,ApplicationStatus, ApplyData, StandardCode, ReviewStatus, FinancialReviewStatus, CreatedBy, CreatedAt)
                                 OUTPUT INSERTED.[Id] 
                                 VALUES (@ApplicationId, @OrganisationId, @ApplicationStatus, @ApplyData, @StandardCode, @ReviewStatus, @FinancialReviewStatus, @CreatedBy, GETUTCDATE())",
                    new { apply.ApplicationId, apply.OrganisationId, apply.ApplicationStatus, apply.ApplyData, apply.StandardCode, apply.ReviewStatus, apply.FinancialReviewStatus, apply.CreatedBy }));
     }
 }
        public void Update_Financial_Grade_with_clarification_Files_name_when_no_files_present()
        {
            var application = new Domain.Entities.Apply {
                FinancialGrade = new FinancialReviewDetails()
            };

            _repository.Setup(x => x.GetApplication(_applicationId)).ReturnsAsync(application);
            _repository.Setup(x => x.UpdateFinancialReviewDetails(_applicationId, It.Is <FinancialReviewDetails>(g => g.ClarificationFiles.First().Filename == FileName))).ReturnsAsync(true);
            var result = _handler.Handle(_request, new CancellationToken()).GetAwaiter().GetResult();

            Assert.IsTrue(result);
        }
        public async Task <Guid> Handle(CreateApplicationRequest request, CancellationToken cancellationToken)
        {
            var org = await _organisationQueryRepository.Get(request.OrganisationId);

            var orgTypes = await _registerQueryRepository.GetOrganisationTypes();

            var creatingContact = await _contactQueryRepository.GetContactById(request.CreatingContactId);

            if (org != null && orgTypes != null && creatingContact != null)
            {
                var orgType = orgTypes.FirstOrDefault(x => x.Id == org.OrganisationTypeId);

                var sequences = request.ApplySequences;
                DisableSequencesAndSectionsAsAppropriate(sequences, org, orgType);
                MakeLowerSequenceActive(sequences);

                var applyData = new ApplyData
                {
                    Sequences = sequences,
                    Apply     = new ApplyTypes.Apply
                    {
                        ReferenceNumber          = await CreateReferenceNumber(request.ApplicationReferenceFormat),
                        InitSubmissions          = new List <Submission>(),
                        InitSubmissionsCount     = 0,
                        StandardSubmissions      = new List <Submission>(),
                        StandardSubmissionsCount = 0
                    }
                };

                var application = new Domain.Entities.Apply
                {
                    ApplyData             = applyData,
                    ApplicationId         = request.QnaApplicationId,
                    ApplicationStatus     = ApplicationStatus.InProgress,
                    ReviewStatus          = ApplicationReviewStatus.Draft,
                    FinancialReviewStatus = IsFinancialExempt(org.OrganisationData?.FHADetails, orgType) ? FinancialReviewStatus.Exempt : FinancialReviewStatus.Required,
                    OrganisationId        = org.Id,
                    CreatedBy             = creatingContact.Id.ToString(),
                    CreatedAt             = DateTime.UtcNow
                };

                return(await _applyRepository.CreateApplication(application));
            }

            return(Guid.Empty);
        }
Пример #14
0
        public void Setup()
        {
            var application = new Domain.Entities.Apply()
            {
                ApplyData = new ApplyData()
            };

            ApplyRepository = new Mock <IApplyRepository>();
            ApplyRepository.Setup(r => r.CanSubmitApplication(It.IsAny <Guid>())).ReturnsAsync(true);
            ApplyRepository.Setup(r => r.GetApplication(It.IsAny <Guid>())).ReturnsAsync(application);
            ApplyRepository.Setup(r => r.GetNextRoatpApplicationReference()).ReturnsAsync("APR123456");

            ContactRepository = new Mock <IContactRepository>();
            ContactRepository.Setup(r => r.GetContact(It.IsAny <Guid>())).ReturnsAsync(new Contact());

            Handler = new SubmitApplicationHandler(ApplyRepository.Object, ContactRepository.Object);
        }
Пример #15
0
        private void SaveChanges(Appeal appeal, Domain.Entities.Apply application, bool isNew)
        {
            if (isNew)
            {
                _appealRepository.Add(appeal);
            }
            else
            {
                _appealRepository.Update(appeal);
            }

            if (!(application.ApplicationStatus == ApplicationStatus.Unsuccessful && appeal.Status == AppealStatus.Unsuccessful))
            {
                _auditService.AuditUpdate(application);
            }

            switch (appeal.Status)
            {
            case AppealStatus.InProgress:
                application.ApplicationStatus = ApplicationStatus.InProgressAppeal;
                break;

            case AppealStatus.Successful:
            case AppealStatus.SuccessfulAlreadyActive:
            case AppealStatus.SuccessfulFitnessForFunding:
                if (application.GatewayReviewStatus == GatewayReviewStatus.Fail)
                {
                    application.ApplicationStatus = ApplicationStatus.AppealSuccessful;
                }
                else
                {
                    application.ApplicationStatus = ApplicationStatus.Successful;
                }
                break;

            case AppealStatus.Unsuccessful:
                application.ApplicationStatus = ApplicationStatus.Unsuccessful;
                break;
            }

            _applyRepository.Update(application);
            _applicationUpdatedEmailService.SendEmail(appeal.ApplicationId);
        }
        public void Remove_File_From_Financial_Grade_Where_There_Is_Only_One_File()
        {
            var application = new Domain.Entities.Apply {
                FinancialGrade = new FinancialReviewDetails {
                    ClarificationFiles = new List <ClarificationFile> {
                        new ClarificationFile {
                            Filename = FileName
                        }
                    }
                }
            };

            _repository.Setup(x => x.GetApplication(_applicationId)).ReturnsAsync(application);
            _repository.Setup(x => x.UpdateFinancialReviewDetails(_applicationId, It.IsAny <FinancialReviewDetails>())).ReturnsAsync(true);
            var result = _handler.Handle(_request, new CancellationToken()).GetAwaiter().GetResult();

            _repository.Verify(x => x.UpdateFinancialReviewDetails(_applicationId, It.Is <FinancialReviewDetails>(g => g.ClarificationFiles.Count == 0)));
            Assert.IsTrue(result);
        }
        private void UpdateApplicationAndReviewStatus(Domain.Entities.Apply application, int sequenceNo)
        {
            if (application.ReviewStatus != ApplicationReviewStatus.HasFeedback)
            {
                application.ReviewStatus = ApplicationReviewStatus.New;
            }

            var applyData = application.ApplyData;

            if (sequenceNo == ApplyConst.ORGANISATION_SEQUENCE_NO)
            {
                application.ApplicationStatus = (applyData.Apply.InitSubmissionsCount == 1) ? ApplicationStatus.Submitted : ApplicationStatus.Resubmitted;

                var closedFinanicalStatuses = new List <string> {
                    FinancialReviewStatus.Approved, FinancialReviewStatus.Exempt
                };

                if (!closedFinanicalStatuses.Contains(application.FinancialReviewStatus))
                {
                    if (GetFinancialStatus(applyData) != ApplicationSectionStatus.Evaluated)
                    {
                        application.FinancialReviewStatus = FinancialReviewStatus.New;
                    }
                }
            }
            else if (sequenceNo == ApplyConst.STANDARD_SEQUENCE_NO)
            {
                application.ApplicationStatus = (applyData.Apply.StandardSubmissionsCount == 1) ? ApplicationStatus.Submitted : ApplicationStatus.Resubmitted;
            }
            else if (sequenceNo == ApplyConst.ORGANISATION_WITHDRAWAL_SEQUENCE_NO)
            {
                application.ApplicationStatus = (applyData.Apply.OrganisationWithdrawalSubmissionsCount == 1) ? ApplicationStatus.Submitted : ApplicationStatus.Resubmitted;
            }
            else if (sequenceNo == ApplyConst.STANDARD_WITHDRAWAL_SEQUENCE_NO)
            {
                application.ApplicationStatus = (applyData.Apply.StandardWithdrawalSubmissionsCount == 1) ? ApplicationStatus.Submitted : ApplicationStatus.Resubmitted;
            }
            else
            {
                application.ApplicationStatus = ApplicationStatus.Submitted;
            }
        }
        public async Task Applications_shows_task_list_if_an_application_in_progress()
        {
            var inProgressApp = new Domain.Entities.Apply
            {
                ApplicationStatus = ApplicationStatus.InProgress
            };
            var applications = new List <Domain.Entities.Apply>
            {
                inProgressApp
            };

            _apiClient.Setup(x => x.GetApplications(It.IsAny <Guid>(), It.IsAny <bool>())).ReturnsAsync(applications);

            var result = await _controller.Applications();

            var redirectResult = result as RedirectToActionResult;

            redirectResult.Should().NotBeNull();
            redirectResult.ActionName.Should().Be("TaskList");
        }
        public async Task Applications_shows_withdrawn_page_if_application_withdrawn()
        {
            var submittedApp = new Domain.Entities.Apply
            {
                ApplicationStatus = ApplicationStatus.Withdrawn
            };
            var applications = new List <Domain.Entities.Apply>
            {
                submittedApp
            };

            _apiClient.Setup(x => x.GetApplications(It.IsAny <Guid>(), It.IsAny <bool>())).ReturnsAsync(applications);

            var result = await _controller.Applications();

            var redirectResult = result as RedirectToActionResult;

            redirectResult.Should().NotBeNull();
            redirectResult.ActionName.Should().Be("ApplicationWithdrawn");
        }
        public async Task Applications_shows_enter_ukprn_page_if_application_cancelled()
        {
            var submittedApp = new Domain.Entities.Apply
            {
                ApplicationStatus = ApplicationStatus.Cancelled
            };
            var applications = new List <Domain.Entities.Apply>
            {
                submittedApp
            };

            _apiClient.Setup(x => x.GetApplications(It.IsAny <Guid>(), It.IsAny <bool>())).ReturnsAsync(applications);

            var result = await _controller.Applications();

            var redirectResult = result as RedirectToActionResult;

            redirectResult.Should().NotBeNull();
            redirectResult.ActionName.Should().Be("EnterApplicationUkprn");
            redirectResult.ControllerName.Should().Be("RoatpApplicationPreamble");
        }
Пример #21
0
        private void SaveChanges(OversightReview oversightReview, Domain.Entities.Apply application, bool isNew)
        {
            if (isNew)
            {
                _oversightReviewRepository.Add(oversightReview);
            }
            else
            {
                _oversightReviewRepository.Update(oversightReview);
            }

            if (oversightReview.Status == OversightReviewStatus.InProgress)
            {
                return;
            }

            application.ApplicationStatus = oversightReview.Status == OversightReviewStatus.Unsuccessful
                ? ApplicationStatus.Rejected
                : ApplicationStatus.Approved;

            _applyRepository.Update(application);
        }
        public async Task GetProviderRouteName_returns_expected_value(string providerRouteName)
        {
            var application = new Domain.Entities.Apply
            {
                ApplicationId = _applicationId,
                ApplyData     = new Domain.Entities.ApplyData
                {
                    ApplyDetails = new Domain.Entities.ApplyDetails
                    {
                        ProviderRouteName = providerRouteName
                    }
                }
            };

            _mediator
            .Setup(x => x.Send(It.Is <GetApplicationRequest>(y => y.ApplicationId == _applicationId), It.IsAny <CancellationToken>()))
            .ReturnsAsync(application);

            var actualResult = await _controller.GetProviderRouteName(_applicationId);

            Assert.AreEqual(providerRouteName, actualResult);
        }
Пример #23
0
        public void SetUp()
        {
            _autoFixture       = new Fixture();
            _repository        = new Mock <IApplyRepository>();
            _gatewayRepository = new Mock <IGatewayRepository>();
            _auditService      = new Mock <IAuditService>();

            _applicationId = Guid.NewGuid();
            _pageId        = _autoFixture.Create <string>();
            _userId        = _autoFixture.Create <string>();
            _userName      = _autoFixture.Create <string>();
            _status        = _autoFixture.Create <string>();
            _comments      = _autoFixture.Create <string>();

            _existingGatewayPageAnswer = _autoFixture.Create <GatewayPageAnswer>();
            _existingApplication       = _autoFixture.Create <Domain.Entities.Apply>();

            _repository.Setup(x => x.GetApplication(_applicationId)).ReturnsAsync(_existingApplication);
            _repository.Setup(x => x.UpdateApplication(It.IsAny <Domain.Entities.Apply>())).Returns(() => Task.CompletedTask);
            _gatewayRepository.Setup(x => x.InsertGatewayPageAnswer(It.IsAny <GatewayPageAnswer>(), _userId, _userName)).ReturnsAsync(true);
            _gatewayRepository.Setup(x => x.UpdateGatewayPageAnswer(It.IsAny <GatewayPageAnswer>(), _userId, _userName)).ReturnsAsync(true);

            _handler = new UpdateGatewayPageAnswerPostClarificationRequestHandler(_repository.Object, _gatewayRepository.Object, _auditService.Object, Mock.Of <IUnitOfWork>());
        }