public async Task saving_initial_teacher_training_saves_clarification_result()
        {
            var applicationId = Guid.NewGuid();
            var pageId        = GatewayPageIds.InitialTeacherTraining;

            var vm = new InitialTeacherTrainingViewModel
            {
                ApplicationId       = applicationId,
                PageId              = pageId,
                Status              = SectionReviewStatus.Pass,
                SourcesCheckedOn    = DateTime.Now,
                ErrorMessages       = new List <ValidationErrorDetail>(),
                OptionPassText      = "Some pass text",
                ClarificationAnswer = ClarificationAnswer
            };

            var command = new SubmitGatewayPageAnswerCommand(vm);

            GatewayValidator.Setup(v => v.ValidateClarification(command)).ReturnsAsync(new ValidationResponse {
                Errors = new List <ValidationErrorDetail>()
            });

            await _controller.ClarifyInitialTeacherTrainingPage(command);

            ApplyApiClient.Verify(x => x.SubmitGatewayPageAnswerPostClarification(applicationId, pageId, vm.Status, UserId, Username, vm.OptionPassText, ClarificationAnswer));
        }
        public async Task saving_office_for_students_saves_evaluation_result()
        {
            var applicationId = Guid.NewGuid();
            var pageId        = GatewayPageIds.OfficeForStudents;

            var vm = new OfficeForStudentsViewModel
            {
                ApplicationId    = applicationId,
                PageId           = pageId,
                Status           = SectionReviewStatus.Pass,
                SourcesCheckedOn = DateTime.Now,
                ErrorMessages    = new List <ValidationErrorDetail>(),
                OptionPassText   = "Some pass text"
            };

            var command = new SubmitGatewayPageAnswerCommand(vm);

            GatewayValidator.Setup(v => v.Validate(command)).ReturnsAsync(new ValidationResponse {
                Errors = new List <ValidationErrorDetail>()
            });

            await _controller.EvaluateOfficeForStudentsPage(command);

            ApplyApiClient.Verify(x => x.SubmitGatewayPageAnswer(applicationId, pageId, vm.Status, UserId, Username, vm.OptionPassText, null));
        }
        public async Task clarifying_initial_teacher_training_without_required_fields_does_not_save()
        {
            var applicationId = Guid.NewGuid();
            var pageId        = GatewayPageIds.InitialTeacherTraining;

            var vm = new InitialTeacherTrainingViewModel()
            {
                Status              = SectionReviewStatus.Fail,
                SourcesCheckedOn    = DateTime.Now,
                ErrorMessages       = new List <ValidationErrorDetail>(),
                ApplicationId       = applicationId,
                PageId              = pageId,
                ClarificationAnswer = ClarificationAnswer
            };

            var command = new SubmitGatewayPageAnswerCommand(vm);

            GatewayValidator.Setup(v => v.ValidateClarification(command))
            .ReturnsAsync(new ValidationResponse
            {
                Errors = new List <ValidationErrorDetail>
                {
                    new ValidationErrorDetail {
                        Field = "OptionFail", ErrorMessage = "needs text"
                    }
                }
            }
                          );
            _orchestrator.Setup(x => x.GetInitialTeacherTrainingViewModel(It.Is <GetInitialTeacherTrainingRequest>(y => y.ApplicationId == vm.ApplicationId &&
                                                                                                                   y.UserName == Username))).ReturnsAsync(vm);

            await _controller.ClarifyInitialTeacherTrainingPage(command);

            ApplyApiClient.Verify(x => x.SubmitGatewayPageAnswer(It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), ClarificationAnswer), Times.Never);
        }
Esempio n. 4
0
        public void post_people_in_control_path_with_errors()
        {
            var vm = ViewModel;

            var command = new SubmitGatewayPageAnswerCommand(vm);

            GatewayValidator.Setup(v => v.Validate(command))
            .ReturnsAsync(new ValidationResponse
            {
                Errors = new List <ValidationErrorDetail>
                {
                    new ValidationErrorDetail {
                        Field = "OptionFail", ErrorMessage = "needs text"
                    }
                }
            }
                          );

            vm.PageId           = GatewayPageIds.PeopleInControlRisk;
            vm.SourcesCheckedOn = DateTime.Now;

            _orchestrator.Setup(x => x.GetPeopleInControlViewModel(Request))
            .ReturnsAsync(vm)
            .Verifiable("view model not returned");

            var result      = (ViewResult)_controller.EvaluatePeopleInControlPage(command).Result;
            var resultModel = (PeopleInControlPageViewModel)result.Model;

            GatewayValidator.Verify(x => x.Validate(command), Times.Once);
            Assert.AreEqual(1, resultModel.ErrorMessages.Count);
        }
        public async Task saving_office_for_students_without_required_fields_does_not_save()
        {
            var applicationId = Guid.NewGuid();
            var pageId        = GatewayPageIds.OfficeForStudents;

            var vm = new OfficeForStudentsViewModel
            {
                Status           = SectionReviewStatus.Fail,
                SourcesCheckedOn = DateTime.Now,
                ErrorMessages    = new List <ValidationErrorDetail>(),
                ApplicationId    = applicationId,
                PageId           = pageId
            };

            var command = new SubmitGatewayPageAnswerCommand(vm);

            GatewayValidator.Setup(v => v.Validate(command))
            .ReturnsAsync(new ValidationResponse
            {
                Errors = new List <ValidationErrorDetail>
                {
                    new ValidationErrorDetail {
                        Field = "OptionFail", ErrorMessage = "needs text"
                    }
                }
            }
                          );

            _orchestrator.Setup(x => x.GetOfficeForStudentsViewModel(It.Is <GetOfficeForStudentsRequest>(y => y.ApplicationId == vm.ApplicationId &&
                                                                                                         y.UserName == Username))).ReturnsAsync(vm);

            await _controller.EvaluateOfficeForStudentsPage(command);

            ApplyApiClient.Verify(x => x.SubmitGatewayPageAnswer(It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), null), Times.Never);
        }
Esempio n. 6
0
        public void Organisation_criminal_compliance_check_result_is_saved(string gatewayPageId, string clarificationAnswer)
        {
            var model = new CriminalCompliancePageViewModel
            {
                ApplicationId             = Guid.NewGuid(),
                ApplyLegalName            = "legal name",
                ComplianceCheckQuestionId = "CC-20",
                ComplianceCheckAnswer     = "No",
                OptionPassText            = "check passed",
                Status              = "Pass",
                PageId              = gatewayPageId,
                QuestionText        = "Question text",
                Ukprn               = "10001234",
                ClarificationAnswer = clarificationAnswer
            };

            var validationResponse = new ValidationResponse
            {
                Errors = new List <ValidationErrorDetail>()
            };

            var command = new SubmitGatewayPageAnswerCommand(model);

            GatewayValidator.Setup(x => x.Validate(command)).ReturnsAsync(validationResponse);

            var result = _controller.EvaluateCriminalCompliancePage(command).GetAwaiter().GetResult();

            var redirectResult = result as RedirectToActionResult;

            redirectResult.Should().NotBeNull();
            redirectResult.ActionName.Should().Be("ViewApplication");

            ApplyApiClient.Verify(x => x.SubmitGatewayPageAnswer(model.ApplicationId, gatewayPageId, model.Status, UserId, Username, model.OptionPassText, clarificationAnswer), Times.Once);
        }
Esempio n. 7
0
        public void post_organisation_status_clarification_happy_path()
        {
            var applicationId = Guid.NewGuid();
            var pageId        = "1-30";

            var viewModel = new OrganisationStatusViewModel()
            {
                Status              = SectionReviewStatus.Pass,
                SourcesCheckedOn    = DateTime.Now,
                ErrorMessages       = new List <ValidationErrorDetail>(),
                ClarificationAnswer = ClarificationAnswer
            };

            viewModel.SourcesCheckedOn = DateTime.Now;
            var command = new SubmitGatewayPageAnswerCommand(viewModel);

            GatewayValidator.Setup(v => v.ValidateClarification(command)).ReturnsAsync(new ValidationResponse {
                Errors = new List <ValidationErrorDetail>()
            });

            ApplyApiClient.Setup(x =>
                                 x.SubmitGatewayPageAnswer(applicationId, pageId, viewModel.Status, UserId, Username, It.IsAny <string>()));

            var result = _controller.ClarifyOrganisationStatus(command).Result;

            ApplyApiClient.Verify(x => x.SubmitGatewayPageAnswerPostClarification(It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), ClarificationAnswer), Times.Once);
            _orchestrator.Verify(x => x.GetOrganisationStatusViewModel(It.IsAny <GetOrganisationStatusRequest>()), Times.Never());
        }
Esempio n. 8
0
        public void post_legal_name_clarification_happy_path()
        {
            var applicationId = Guid.NewGuid();
            var pageId        = "1-10";

            var vm = new LegalNamePageViewModel
            {
                Status              = SectionReviewStatus.Pass,
                SourcesCheckedOn    = DateTime.Now,
                ErrorMessages       = new List <ValidationErrorDetail>(),
                ClarificationAnswer = ClarificationAnswer
            };

            vm.SourcesCheckedOn = DateTime.Now;
            var command = new SubmitGatewayPageAnswerCommand(vm);

            var pageData = JsonConvert.SerializeObject(vm);

            GatewayValidator.Setup(v => v.ValidateClarification(command)).ReturnsAsync(new ValidationResponse {
                Errors = new List <ValidationErrorDetail>()
            });

            ApplyApiClient.Setup(x =>
                                 x.SubmitGatewayPageAnswer(applicationId, pageId, vm.Status, UserId, Username, It.IsAny <string>()));

            var result = _controller.ClarifyIcoNumberPage(command).Result;

            ApplyApiClient.Verify(x => x.SubmitGatewayPageAnswerPostClarification(It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), ClarificationAnswer), Times.Once);
            _orchestrator.Verify(x => x.GetLegalNameViewModel(It.IsAny <GetLegalNameRequest>()), Times.Never());
        }
        public void post_website_address_clarification_happy_path()
        {
            var applicationId = Guid.NewGuid();
            var pageId        = GatewayPageIds.WebsiteAddress;

            var vm = new WebsiteViewModel
            {
                ApplicationId       = applicationId,
                Status              = SectionReviewStatus.Pass,
                SourcesCheckedOn    = DateTime.Now,
                ErrorMessages       = new List <ValidationErrorDetail>(),
                OptionPassText      = comment,
                PageId              = pageId,
                ClarificationAnswer = ClarificationAnswer
            };
            var command = new SubmitGatewayPageAnswerCommand(vm);

            GatewayValidator.Setup(v => v.ValidateClarification(command)).ReturnsAsync(new ValidationResponse {
                Errors = new List <ValidationErrorDetail>()
            });

            var result = _controller.ClarifyWebsitePage(command).Result;

            ApplyApiClient.Verify(x => x.SubmitGatewayPageAnswerPostClarification(applicationId, pageId, vm.Status, UserId, Username, comment, ClarificationAnswer));
            _orchestrator.Verify(x => x.GetWebsiteViewModel(new GetWebsiteRequest(applicationId, UserId, Username)), Times.Never());
        }
        public void post_website_address_clarification_path_with_errors()
        {
            var applicationId = Guid.NewGuid();

            var vm = new WebsiteViewModel
            {
                ApplicationId       = applicationId,
                Status              = SectionReviewStatus.Fail,
                SourcesCheckedOn    = DateTime.Now,
                ErrorMessages       = new List <ValidationErrorDetail>(),
                ClarificationAnswer = ClarificationAnswer
            };

            var command = new SubmitGatewayPageAnswerCommand(vm);

            GatewayValidator.Setup(v => v.ValidateClarification(command))
            .ReturnsAsync(new ValidationResponse
            {
                Errors = new List <ValidationErrorDetail>
                {
                    new ValidationErrorDetail {
                        Field = "OptionFail", ErrorMessage = "needs text"
                    }
                }
            }
                          );

            _orchestrator.Setup(x => x.GetWebsiteViewModel(It.Is <GetWebsiteRequest>(y => y.ApplicationId == vm.ApplicationId &&
                                                                                     y.UserName == Username))).ReturnsAsync(vm);

            var result = _controller.ClarifyWebsitePage(command).Result;

            ApplyApiClient.Verify(x => x.SubmitGatewayPageAnswer(It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()), Times.Never);
        }
Esempio n. 11
0
        public void post_legal_name_clarification_path_with_errors()
        {
            var applicationId = Guid.NewGuid();
            var pageId        = "1-20";

            var vm = new LegalNamePageViewModel
            {
                Status              = SectionReviewStatus.Fail,
                SourcesCheckedOn    = DateTime.Now,
                ErrorMessages       = new List <ValidationErrorDetail>(),
                ClarificationAnswer = ClarificationAnswer
            };

            vm.ApplicationId    = applicationId;
            vm.PageId           = vm.PageId;
            vm.SourcesCheckedOn = DateTime.Now;
            var command = new SubmitGatewayPageAnswerCommand(vm);

            GatewayValidator.Setup(v => v.ValidateClarification(command))
            .ReturnsAsync(new ValidationResponse
            {
                Errors = new List <ValidationErrorDetail>
                {
                    new ValidationErrorDetail {
                        Field = "OptionFail", ErrorMessage = "needs text"
                    }
                }
            }
                          );

            _orchestrator.Setup(x => x.GetLegalNameViewModel(It.Is <GetLegalNameRequest>(y => y.ApplicationId == vm.ApplicationId &&
                                                                                         y.UserName == Username))).ReturnsAsync(vm);

            var pageData = JsonConvert.SerializeObject(vm);

            GatewayValidator.Setup(v => v.ValidateClarification(command))
            .ReturnsAsync(new ValidationResponse
            {
                Errors = new List <ValidationErrorDetail>
                {
                    new ValidationErrorDetail {
                        Field = "OptionFail", ErrorMessage = "needs text"
                    }
                }
            }
                          );
            ApplyApiClient.Setup(x =>
                                 x.SubmitGatewayPageAnswer(applicationId, pageId, vm.Status, UserId, Username, It.IsAny <string>()));

            var result = _controller.ClarifyLegalNamePage(command).Result;

            ApplyApiClient.Verify(x => x.SubmitGatewayPageAnswer(It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()), Times.Never);
        }
Esempio n. 12
0
        public void post_people_in_control_happy_path()
        {
            var command = new SubmitGatewayPageAnswerCommand
            {
                Status         = SectionReviewStatus.Pass,
                ApplicationId  = ViewModel.ApplicationId,
                SequenceNumber = ViewModel.SequenceNumber,
                PageId         = ViewModel.PageId
            };

            var result = (RedirectToActionResult)_controller.EvaluatePeopleInControlPage(command).Result;

            GatewayValidator.Verify(x => x.Validate(command), Times.Once);
            Assert.AreEqual("ViewApplication", result.ActionName);
            Assert.AreEqual("RoatpGateway", result.ControllerName);
        }
        public void PeopleInControl_criminal_compliance_clarification_check_has_validation_error(string gatewayPageId)
        {
            var clarificationAnswer = "clarification answer";
            var model = new CriminalCompliancePageViewModel
            {
                ApplicationId             = Guid.NewGuid(),
                ApplyLegalName            = "legal name",
                ComplianceCheckQuestionId = "CC-40",
                ComplianceCheckAnswer     = "No",
                OptionFailText            = null,
                Status              = "Fail",
                PageId              = gatewayPageId,
                QuestionText        = "Question text",
                Ukprn               = "10001234",
                ClarificationAnswer = clarificationAnswer
            };

            var validationResponse = new ValidationResponse
            {
                Errors = new List <ValidationErrorDetail>()
                {
                    new ValidationErrorDetail
                    {
                        ErrorMessage = "Comments are mandatory",
                        Field        = "OptionFailText"
                    }
                }
            };

            var command = new SubmitGatewayPageAnswerCommand(model);

            GatewayValidator.Setup(x => x.ValidateClarification(command)).ReturnsAsync(validationResponse);

            _orchestrator.Setup(x => x.GetCriminalComplianceCheckViewModel(It.Is <GetCriminalComplianceCheckRequest>(y => y.ApplicationId == model.ApplicationId &&
                                                                                                                     y.UserName == Username))).ReturnsAsync(model);

            var result = _controller.ClarifyCriminalCompliancePage(command).GetAwaiter().GetResult();

            var viewResult = result as ViewResult;
            var viewModel  = viewResult.Model as CriminalCompliancePageViewModel;

            viewModel.Should().NotBeNull();
            viewModel.ErrorMessages.Count.Should().BeGreaterThan(0);

            ApplyApiClient.Verify(x => x.SubmitGatewayPageAnswer(model.ApplicationId, gatewayPageId, model.Status, UserId, Username, model.OptionPassText, clarificationAnswer), Times.Never);
        }
Esempio n. 14
0
        public void post_organisation_status_clarification_path_with_errors()
        {
            var applicationId = Guid.NewGuid();
            var pageId        = "1-20";

            var viewModel = new OrganisationStatusViewModel()
            {
                Status              = SectionReviewStatus.Fail,
                SourcesCheckedOn    = DateTime.Now,
                ErrorMessages       = new List <ValidationErrorDetail>(),
                ClarificationAnswer = ClarificationAnswer
            };

            viewModel.ApplicationId    = applicationId;
            viewModel.PageId           = viewModel.PageId;
            viewModel.SourcesCheckedOn = DateTime.Now;
            var command = new SubmitGatewayPageAnswerCommand(viewModel);

            GatewayValidator.Setup(v => v.ValidateClarification(command))
            .ReturnsAsync(new ValidationResponse
            {
                Errors = new List <ValidationErrorDetail>
                {
                    new ValidationErrorDetail {
                        Field = "OptionFail", ErrorMessage = "needs text"
                    }
                }
            }
                          );

            _orchestrator.Setup(x => x.GetOrganisationStatusViewModel(It.IsAny <GetOrganisationStatusRequest>()))
            .ReturnsAsync(viewModel)
            .Verifiable("view model not returned");

            ApplyApiClient.Setup(x =>
                                 x.SubmitGatewayPageAnswer(applicationId, pageId, viewModel.Status, UserId, Username, It.IsAny <string>()));

            var result = _controller.ClarifyOrganisationStatus(command).Result;

            ApplyApiClient.Verify(x => x.SubmitGatewayPageAnswer(It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()), Times.Never);
            _orchestrator.Verify(x => x.GetTradingNameViewModel(It.IsAny <GetTradingNameRequest>()), Times.Never());
        }
Esempio n. 15
0
        public async Task <IActionResult> ClarifySubcontractorDeclarationPage(SubmitGatewayPageAnswerCommand command)
        {
            var userId   = HttpContext.User.UserId();
            var username = HttpContext.User.UserDisplayName();

            var isClarificationFileUpdate = HttpContext.Request.Form["submitClarificationFile"].Count != 0;
            var isClarificationForm       = HttpContext.Request.Form["submitClarificationForm"].Count != 0;
            var isRemoveClarificationFile = HttpContext.Request.Form["removeClarificationFile"].Count != 0;
            var filesToUpload             = HttpContext.Request.Form.Files;

            if (isClarificationFileUpdate)
            {
                var validationResponse = GatewayValidator.ValidateClarificationFileUpload(filesToUpload);
                if (validationResponse.Errors != null && validationResponse.Errors.Count > 0)
                {
                    var viewModel = await _orchestrator.GetSubcontractorDeclarationViewModel(
                        new GetSubcontractorDeclarationRequest(command.ApplicationId, userId, username));

                    HydrateSucontractorDeclarationViewModelFromCommand(command, viewModel);
                    viewModel.ErrorMessages = validationResponse.Errors;

                    return(View($"{GatewayViewsLocation}/Clarifications/SubcontractorDeclaration.cshtml", viewModel));
                }

                var newClarificationVm = await ProcessSubcontractorDeclarationuploadAndRebuildViewModel(command, filesToUpload);

                return(View($"{GatewayViewsLocation}/Clarifications/SubcontractorDeclaration.cshtml", newClarificationVm));
            }

            if (isRemoveClarificationFile)
            {
                var newClarificationVm = await RemoveSubcontractorDeclarationuploadAndRebuildViewModel(command);

                return(View($"{GatewayViewsLocation}/Clarifications/SubcontractorDeclaration.cshtml", newClarificationVm));
            }


            Func <Task <SubcontractorDeclarationViewModel> > viewModelBuilder = () => _orchestrator.GetSubcontractorDeclarationViewModel(new GetSubcontractorDeclarationRequest(command.ApplicationId, userId, username));

            return(await ValidateAndUpdateClarificationPageAnswer(command, viewModelBuilder, $"{GatewayViewsLocation}/Clarifications/SubcontractorDeclaration.cshtml"));
        }