public void Validate_GivenAParentPolicyIdAndPolicyDoesNotExist_ValidIsFalse() { //Arrange PolicyEditModel model = CreateModel(); model.ParentPolicyId = parentPolicyId; ISpecificationsRepository repository = CreateSpecificationsRepository(false, false); PolicyEditModelValidator validator = CreateValidator(repository); //Act ValidationResult result = validator.Validate(model); //Assert result .IsValid .Should() .BeFalse(); result .Errors .Count .Should() .Be(1); }
public void Validate_GivenPolicyIdIsNullOrEmpty_ValidIsFalse() { //Arrange PolicyEditModel model = CreateModel(); model.PolicyId = ""; ISpecificationsRepository repository = CreateSpecificationsRepository(true); PolicyEditModelValidator validator = CreateValidator(repository); //Act ValidationResult result = validator.Validate(model); //Assert result .IsValid .Should() .BeFalse(); result .Errors .Count .Should() .Be(1); }
public async Task EditPolicy_WhenValidModelButPolicyCouldNotBeFound_ThenReturnsNotFoundResult() { // Arrange PolicyEditModel policyEditModel = new PolicyEditModel { SpecificationId = SpecificationId }; string json = JsonConvert.SerializeObject(policyEditModel); byte[] byteArray = Encoding.UTF8.GetBytes(json); MemoryStream stream = new MemoryStream(byteArray); HttpContext context = Substitute.For <HttpContext>(); HttpRequest request = Substitute.For <HttpRequest>(); IQueryCollection queryStringValues = new QueryCollection(new Dictionary <string, StringValues> { { "specificationId", new StringValues(SpecificationId) }, { "policyId", new StringValues(PolicyId) }, }); request .Query .Returns(queryStringValues); request .Body .Returns(stream); request .HttpContext .Returns(context); Specification specification = CreateSpecification(); ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); specificationsRepository .GetSpecificationById(Arg.Is(SpecificationId)) .Returns(specification); SpecificationsService specificationsService = CreateService(specificationsRepository: specificationsRepository); // Act IActionResult result = await specificationsService.EditPolicy(request); // Assert result .Should() .BeOfType <NotFoundObjectResult>() .Which .Value .Should() .Be($"Failed to find policy for policy id: {PolicyId}"); }
public async Task EditPolicy_WhenInvalidModelProvided_ThenValidationErrorReturned() { // Arrange ValidationResult validationResult = new ValidationResult(); validationResult.Errors.Add(new ValidationFailure("error", "error")); IValidator <PolicyEditModel> validator = CreateEditPolicyValidator(validationResult); PolicyEditModel policyEditModel = new PolicyEditModel(); string json = JsonConvert.SerializeObject(policyEditModel); byte[] byteArray = Encoding.UTF8.GetBytes(json); MemoryStream stream = new MemoryStream(byteArray); HttpContext context = Substitute.For <HttpContext>(); HttpRequest request = Substitute.For <HttpRequest>(); IQueryCollection queryStringValues = new QueryCollection(new Dictionary <string, StringValues> { { "specificationId", new StringValues(SpecificationId) }, { "policyId", new StringValues(PolicyId) }, }); request .Query .Returns(queryStringValues); request .Body .Returns(stream); request .HttpContext .Returns(context); SpecificationsService specificationsService = CreateService(policyEditModelValidator: validator); // Act IActionResult result = await specificationsService.EditPolicy(request); // Assert result .Should() .BeOfType <BadRequestObjectResult>() .Which .Value .Should() .BeOfType <SerializableError>() .Which .Should() .HaveCount(1); }
public void Validate_GivenValidModel_ValidIsTrue() { //Arrange PolicyEditModel model = CreateModel(); PolicyEditModelValidator validator = CreateValidator(); //Act ValidationResult result = validator.Validate(model); //Assert result .IsValid .Should() .BeTrue(); }
public void Validate_GivenEmptyParentPolicyId_ValidIsTrue() { //Arrange PolicyEditModel model = CreateModel(); model.ParentPolicyId = string.Empty; PolicyEditModelValidator validator = CreateValidator(); //Act ValidationResult result = validator.Validate(model); //Assert result .IsValid .Should() .BeTrue(); }
public void Validate_GivenAParentPolicyIdAndPolicyExists_ValidIsTrue() { //Arrange PolicyEditModel model = CreateModel(); model.ParentPolicyId = parentPolicyId; ISpecificationsRepository repository = CreateSpecificationsRepository(false, true); PolicyEditModelValidator validator = CreateValidator(repository); //Act ValidationResult result = validator.Validate(model); //Assert result .IsValid .Should() .BeTrue(); }
public async Task <IActionResult> Edit(PolicyType type, PolicyEditModel model) { var orgId = _enterprisePortalCurrentContext.SelectedOrganizationId; if (orgId == null) { return(Redirect("~")); } if (!_enterprisePortalCurrentContext.SelectedOrganizationDetails.UsePolicies || !_enterprisePortalCurrentContext.CanManagePoliciesForSelectedOrganization) { return(Redirect("~/")); } await ValidateDependentPolicies(type, orgId, model.Enabled); var policy = await _policyRepository.GetByOrganizationIdTypeAsync(orgId.Value, type); if (!ModelState.IsValid) { return(BuildPolicyView(policy, type)); } if (policy == null) { policy = model.ToPolicy(type, orgId.Value); } else { policy = model.ToPolicy(policy); } var userId = _userService.GetProperUserId(User); await _policyService.SaveAsync(policy, _userService, _organizationService, userId); return(RedirectToAction("Edit", new { type })); }
public void Validate_GivenEmptySpecificationId_ValidIsFalse() { //Arrange PolicyEditModel model = CreateModel(); model.SpecificationId = string.Empty; PolicyEditModelValidator validator = CreateValidator(); //Act ValidationResult result = validator.Validate(model); //Assert result .IsValid .Should() .BeFalse(); result .Errors .Count .Should() .Be(1); }
public void EditPolicy_WhenSomethingGoesWrongDuringIndexing_ShouldThrowException() { // Arrange const string errorMessage = "Encountered error code 802"; PolicyEditModel policyEditModel = new PolicyEditModel { SpecificationId = SpecificationId, Name = "new policy name", Description = "new policy description", ParentPolicyId = "parent-policy-id" }; string json = JsonConvert.SerializeObject(policyEditModel); byte[] byteArray = Encoding.UTF8.GetBytes(json); MemoryStream stream = new MemoryStream(byteArray); HttpContext context = Substitute.For <HttpContext>(); HttpRequest request = Substitute.For <HttpRequest>(); IQueryCollection queryStringValues = new QueryCollection(new Dictionary <string, StringValues> { { "specificationId", new StringValues(SpecificationId) }, { "policyId", new StringValues(PolicyId) }, }); request .Query .Returns(queryStringValues); request .Body .Returns(stream); request .HttpContext .Returns(context); Specification specification = CreateSpecification(); specification .Current .Policies = new[] { new Policy { Id = "parent-policy-id", Name = "policy name", SubPolicies = new[] { new Policy { Id = PolicyId, Name = PolicyName } } } }; ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); specificationsRepository .GetSpecificationById(Arg.Is(SpecificationId)) .Returns(specification); specificationsRepository .UpdateSpecification(Arg.Is(specification)) .Returns(HttpStatusCode.OK); IMessengerService messengerService = CreateMessengerService(); ISearchRepository <SpecificationIndex> mockSearchRepository = CreateSearchRepository(); mockSearchRepository .Index(Arg.Any <IEnumerable <SpecificationIndex> >()) .Returns(new List <IndexError> { new IndexError() { ErrorMessage = errorMessage } }); SpecificationVersion newSpecVersion = specification.Current.Clone() as SpecificationVersion; Policy editedNewSubpolicy = newSpecVersion.Policies.First().SubPolicies.First(); editedNewSubpolicy.Name = policyEditModel.Name; newSpecVersion.PublishStatus = PublishStatus.Updated; IVersionRepository <SpecificationVersion> mockVersionRepository = CreateVersionRepository(); mockVersionRepository .CreateVersion(Arg.Any <SpecificationVersion>(), Arg.Any <SpecificationVersion>()) .Returns(newSpecVersion); SpecificationsService specificationsService = CreateService(specificationsRepository: specificationsRepository, messengerService: messengerService, searchRepository: mockSearchRepository, specificationVersionRepository: mockVersionRepository); //Act Func <Task <IActionResult> > editPolicy = async() => await specificationsService.EditPolicy(request); //Assert editPolicy .Should() .Throw <ApplicationException>() .Which .Message .Should() .Be($"Could not index specification {specification.Current.Id} because: {errorMessage}"); }
public async Task EditPolicy_WhenPolicyASubPolicyForOnePolicyButSubPolicyOfAnotherPolicy_SavesChanges() { // Arrange PolicyEditModel policyEditModel = new PolicyEditModel { SpecificationId = SpecificationId, Name = "new policy name", Description = "new policy description", ParentPolicyId = "new-parent-policy-id" }; string json = JsonConvert.SerializeObject(policyEditModel); byte[] byteArray = Encoding.UTF8.GetBytes(json); MemoryStream stream = new MemoryStream(byteArray); HttpContext context = Substitute.For <HttpContext>(); HttpRequest request = Substitute.For <HttpRequest>(); IQueryCollection queryStringValues = new QueryCollection(new Dictionary <string, StringValues> { { "specificationId", new StringValues(SpecificationId) }, { "policyId", new StringValues(PolicyId) }, }); request .Query .Returns(queryStringValues); request .Body .Returns(stream); request .HttpContext .Returns(context); Specification specification = CreateSpecification(); specification .Current .Policies = new[] { new Policy { Id = "parent-policy-id", Name = "policy name", SubPolicies = new[] { new Policy { Id = PolicyId, Name = PolicyName } } }, new Policy { Id = "new-parent-policy-id", Name = "policy name", SubPolicies = Enumerable.Empty <Policy>() } }; ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); specificationsRepository .GetSpecificationById(Arg.Is(SpecificationId)) .Returns(specification); specificationsRepository .UpdateSpecification(Arg.Is(specification)) .Returns(HttpStatusCode.OK); IMessengerService messengerService = CreateMessengerService(); SpecificationVersion newSpecVersion = specification.Current.Clone() as SpecificationVersion; newSpecVersion.Policies.Last().SubPolicies = newSpecVersion.Policies.Last().SubPolicies.Concat(new[] { specification.Current.Policies.First().SubPolicies.First() }); newSpecVersion.Policies.First().SubPolicies = Enumerable.Empty <Policy>(); IVersionRepository <SpecificationVersion> versionRepository = CreateVersionRepository(); versionRepository .CreateVersion(Arg.Any <SpecificationVersion>(), Arg.Any <SpecificationVersion>()) .Returns(newSpecVersion); SpecificationsService specificationsService = CreateService(specificationsRepository: specificationsRepository, messengerService: messengerService, specificationVersionRepository: versionRepository); // Act IActionResult result = await specificationsService.EditPolicy(request); // Assert result .Should() .BeOfType <OkObjectResult>(); specification .Current .Policies .Count() .Should() .Be(2); specification .Current .Policies .First() .SubPolicies .Any() .Should() .BeFalse(); specification .Current .Policies .Last() .SubPolicies .Any() .Should() .BeTrue(); }
public async Task EditPolicy_WhenValidModelAndUpdateCosmosAndIsASubPolicy_SendsMessageAndReturnsOK() { // Arrange PolicyEditModel policyEditModel = new PolicyEditModel { SpecificationId = SpecificationId, Name = "new policy name", Description = "new policy description", ParentPolicyId = "parent-policy-id" }; string json = JsonConvert.SerializeObject(policyEditModel); byte[] byteArray = Encoding.UTF8.GetBytes(json); MemoryStream stream = new MemoryStream(byteArray); HttpContext context = Substitute.For <HttpContext>(); HttpRequest request = Substitute.For <HttpRequest>(); IQueryCollection queryStringValues = new QueryCollection(new Dictionary <string, StringValues> { { "specificationId", new StringValues(SpecificationId) }, { "policyId", new StringValues(PolicyId) }, }); request .Query .Returns(queryStringValues); request .Body .Returns(stream); request .HttpContext .Returns(context); Specification specification = CreateSpecification(); specification .Current .Policies = new[] { new Policy { Id = "parent-policy-id", Name = "policy name", SubPolicies = new[] { new Policy { Id = PolicyId, Name = PolicyName } } } }; ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); specificationsRepository .GetSpecificationById(Arg.Is(SpecificationId)) .Returns(specification); specificationsRepository .UpdateSpecification(Arg.Is(specification)) .Returns(HttpStatusCode.OK); IMessengerService messengerService = CreateMessengerService(); ISearchRepository <SpecificationIndex> mockSearchRepository = CreateSearchRepository(); mockSearchRepository .Index(Arg.Any <IEnumerable <SpecificationIndex> >()) .Returns(new List <IndexError>()); SpecificationVersion newSpecVersion = specification.Current.Clone() as SpecificationVersion; Policy editedNewSubpolicy = newSpecVersion.Policies.First().SubPolicies.First(); editedNewSubpolicy.Name = policyEditModel.Name; newSpecVersion.PublishStatus = PublishStatus.Updated; IVersionRepository <SpecificationVersion> mockVersionRepository = CreateVersionRepository(); mockVersionRepository .CreateVersion(Arg.Any <SpecificationVersion>(), Arg.Any <SpecificationVersion>()) .Returns(newSpecVersion); SpecificationsService specificationsService = CreateService(specificationsRepository: specificationsRepository, messengerService: messengerService, searchRepository: mockSearchRepository, specificationVersionRepository: mockVersionRepository); // Act IActionResult result = await specificationsService.EditPolicy(request); // Assert result .Should() .BeOfType <OkObjectResult>() .Which .Value .Should() .BeOfType <Policy>() .Which .Description .Should() .Be("new policy description"); await messengerService .Received(1) .SendToTopic(Arg.Is(ServiceBusConstants.TopicNames.EditSpecification), Arg.Is <SpecificationVersionComparisonModel>( m => m.Id == SpecificationId ), Arg.Any <IDictionary <string, string> >(), Arg.Is(true)); await mockSearchRepository .Received(1) .Index(Arg.Is <IEnumerable <SpecificationIndex> >( m => m.First().Id == SpecificationId && m.First().Status == newSpecVersion.PublishStatus.ToString() )); }
public async Task EditPolicy_WhenValidModelButUpdateCosmosReturnsBadRequest_ReturnsBadRequest() { // Arrange PolicyEditModel policyEditModel = new PolicyEditModel { SpecificationId = SpecificationId, Name = "new policy name" }; string json = JsonConvert.SerializeObject(policyEditModel); byte[] byteArray = Encoding.UTF8.GetBytes(json); MemoryStream stream = new MemoryStream(byteArray); HttpContext context = Substitute.For <HttpContext>(); HttpRequest request = Substitute.For <HttpRequest>(); IQueryCollection queryStringValues = new QueryCollection(new Dictionary <string, StringValues> { { "specificationId", new StringValues(SpecificationId) }, { "policyId", new StringValues(PolicyId) }, }); request .Query .Returns(queryStringValues); request .Body .Returns(stream); request .HttpContext .Returns(context); Specification specification = CreateSpecification(); specification .Current .Policies = new[] { new Policy { Id = PolicyId, Name = PolicyName } }; ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); specificationsRepository .GetSpecificationById(Arg.Is(SpecificationId)) .Returns(specification); specificationsRepository .UpdateSpecification(Arg.Is(specification)) .Returns(HttpStatusCode.BadRequest); SpecificationsService specificationsService = CreateService(specificationsRepository: specificationsRepository); // Act IActionResult result = await specificationsService.EditPolicy(request); // Assert result .Should() .BeOfType <StatusCodeResult>() .Which .StatusCode .Should() .Be(400); }