public async Task ThenCharityRegistrationNumberMustBeNumeric() { //Arrange var invalidModel = new AddLegalEntityViewModel { OrganisationType = OrganisationType.Charities, CharityRegistrationNumber = "SOMESTRING" }; var validModel = new AddLegalEntityViewModel { OrganisationType = OrganisationType.Charities, CharityRegistrationNumber = "12345" }; //Act var invalidResult = await _validator.ValidateAsync(invalidModel); var validResult = await _validator.ValidateAsync(validModel); //Assert Assert.IsFalse(invalidResult.IsValid); Assert.AreEqual(1, invalidResult.Errors.Count); Assert.IsNotNull(invalidResult.Errors.SingleOrDefault(x => x.PropertyName == "CharityRegistrationNumber")); Assert.IsTrue(validResult.IsValid); }
public async Task ThenAnOrganisationTypeMustBeSelected() { //Arrange var model = new AddLegalEntityViewModel(); //Act var result = await _validator.ValidateAsync(model); //Assert Assert.IsFalse(result.IsValid); Assert.AreEqual(1, result.Errors.Count); Assert.IsNotNull(result.Errors.SingleOrDefault(x => x.PropertyName == "OrganisationType")); }
public async Task ThenTheCharityRegistrationNumberShouldBeUsedToFindTheCharity() { //Arrange var model = new AddLegalEntityViewModel { OrganisationType = OrganisationType.Charities, CharityRegistrationNumber = "12345" }; //Act var result = await _controller.AddOrganisation(model); //Assert _orchestrator.Verify(x => x.GetCharityByRegistrationNumber(It.Is <string>(s => s == "12345"), It.IsAny <string>(), It.IsAny <string>()), Times.Once); }
public async Task ThenGivenAnOrganisationTypeTheCorrespondingSearchTermMustBePopulated(OrganisationType organisationType, string searchTermPropertyName) { //Arrange var model = new AddLegalEntityViewModel { OrganisationType = organisationType }; //Act var result = await _validator.ValidateAsync(model); //Assert Assert.IsFalse(result.IsValid); Assert.AreEqual(1, result.Errors.Count); Assert.IsNotNull(result.Errors.SingleOrDefault(x => x.PropertyName == searchTermPropertyName)); }
public async Task ThenIShouldBeRedirectedToTheConfirmationPageIfTheCharityExists() { //Arrange var model = new AddLegalEntityViewModel { OrganisationType = OrganisationType.Charities, CharityRegistrationNumber = "12345" }; //Act var result = await _controller.AddOrganisation(model) as ViewResult; //Assert Assert.IsNotNull(result); Assert.AreEqual("FindAddress", result.ViewName); }
public async Task ThenIShouldBeUnableToProceedIfTheCharityDoesNotExist() { //Arrange var model = new AddLegalEntityViewModel { OrganisationType = OrganisationType.Charities, CharityRegistrationNumber = "666" }; //Act var result = await _controller.AddOrganisation(model) as ViewResult; //Assert Assert.IsNotNull(result); Assert.AreEqual("AddOrganisation", result.ViewName); }
public async Task ThenIShouldGetCompanyDetailsBackIfTheyExist() { //Arrange var viewModel = new OrganisationDetailsViewModel { HashedId = "1", Name = "Test Corp", ReferenceNumber = "0123456", DateOfInception = DateTime.Now, Address = "1 Test Road, Test City, TE12 3ST", Status = "active" }; _orchestrator.Setup(x => x.GetLimitedCompanyByRegistrationNumber(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())) .ReturnsAsync(new OrchestratorResponse <OrganisationDetailsViewModel> { Data = viewModel }); var username = "******"; _owinWrapper.Setup(x => x.GetClaimValue(It.IsAny <string>())).Returns(username); var addModel = new AddLegalEntityViewModel { HashedAccountId = viewModel.HashedId, OrganisationType = OrganisationType.CompaniesHouse, CompaniesHouseNumber = viewModel.ReferenceNumber }; //Act var result = await _controller.AddOrganisation(addModel) as ViewResult; //Assert Assert.IsNotNull(result); _orchestrator.Verify(x => x.GetLimitedCompanyByRegistrationNumber(viewModel.ReferenceNumber, viewModel.HashedId, username), Times.Once); var model = result.Model as OrchestratorResponse <OrganisationDetailsViewModel>; Assert.IsNotNull(model?.Data); }
public async Task ThenOnModelValidationErrorsIAmReturnedToTheViewAndTheErrorsAreInTheErrorDictionary() { //Arrange var model = new AddLegalEntityViewModel(); _controller.ModelState.AddModelError("OrganisationType", "Organisation Type Error Message"); //Act var result = await _controller.AddOrganisation(model); //Assert var viewResult = result as ViewResult; Assert.IsNotNull(viewResult); Assert.AreEqual("", viewResult.ViewName); var viewModel = viewResult.Model as OrchestratorResponse <AddLegalEntityViewModel>; Assert.IsNotNull(viewModel); Assert.IsTrue(viewModel.Data.ErrorDictionary.ContainsKey("OrganisationType")); }
public async Task <ActionResult> AddOrganisation(AddLegalEntityViewModel model) { if (!ModelState.IsValid) { var orgTypeErrorResponse = new OrchestratorResponse <AddLegalEntityViewModel> { Data = model }; orgTypeErrorResponse.Data.AddErrorsFromModelState(ModelState); orgTypeErrorResponse.Status = HttpStatusCode.BadRequest; orgTypeErrorResponse.FlashMessage = new FlashMessageViewModel { Severity = FlashMessageSeverityLevel.Error, ErrorMessages = orgTypeErrorResponse.Data.ErrorDictionary, Headline = "Errors to fix", Message = "Check the following details:" }; return(View(orgTypeErrorResponse)); } OrchestratorResponse <OrganisationDetailsViewModel> response; //TODO this can be removed once we determine which is slow in prod var stopwatch = new System.Diagnostics.Stopwatch(); try { stopwatch.Start(); switch (model.OrganisationType) { case OrganisationType.Charities: response = await FindCharity(model.CharityRegistrationNumber, model.HashedAccountId, OwinWrapper.GetClaimValue(@"sub")); break; case OrganisationType.CompaniesHouse: response = await FindCompany(model.CompaniesHouseNumber, model.HashedAccountId, OwinWrapper.GetClaimValue(@"sub")); break; case OrganisationType.PublicBodies: var searchResponse = await FindPublicSectorOrganisation(model.PublicBodyName, model.HashedAccountId, OwinWrapper.GetClaimValue(@"sub")); if (searchResponse.Status == HttpStatusCode.OK) { if (searchResponse.Data.Results.Data.Count != 1 || searchResponse.Data.Results.Data.All(x => x.AddedToAccount)) { return(View("ViewPublicSectorOrganisationSearchResults", searchResponse)); } response = new OrchestratorResponse <OrganisationDetailsViewModel> { Data = searchResponse.Data.Results.Data.FirstOrDefault(), Status = searchResponse.Status }; } else { response = new OrchestratorResponse <OrganisationDetailsViewModel> { Data = new OrganisationDetailsViewModel(), Status = searchResponse.Status }; response.Data.ErrorDictionary = searchResponse.Data.ErrorDictionary; } break; case OrganisationType.Other: return(RedirectToAction("AddOtherOrganisationDetails", "Organisation", new { model.HashedAccountId })); default: throw new NotImplementedException("Org Type Not Implemented"); } } finally { stopwatch.Stop(); _logger.Info($"Company Search for {model.OrganisationType} took {stopwatch.ElapsedMilliseconds / 1000d}s"); } if (response.Status == HttpStatusCode.OK) { //Removes empty address entries (i.e. ' , , ') var address = (response.Data?.Address ?? string.Empty).Replace(",", string.Empty); if (string.IsNullOrWhiteSpace(address)) { var addressViewModel = _mapper.Map <FindOrganisationAddressViewModel>(response.Data); var addressResponse = new OrchestratorResponse <FindOrganisationAddressViewModel> { Data = addressViewModel }; return(View("FindAddress", addressResponse)); } return(View("ConfirmOrganisationDetails", response)); } var errorResponse = new OrchestratorResponse <AddLegalEntityViewModel> { Data = model, Status = HttpStatusCode.OK }; errorResponse.Data.ErrorDictionary = response.Data.ErrorDictionary; errorResponse.FlashMessage = new FlashMessageViewModel { Severity = FlashMessageSeverityLevel.Error, ErrorMessages = errorResponse.Data.ErrorDictionary, Headline = "Errors to fix", Message = "Check the following details:" }; return(View("AddOrganisation", errorResponse)); }