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"));
        }
Exemple #3
0
        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));
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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));
        }