public async Task When_Partially_Update_Current_User_Then_Ok_Is_Returned() { // ARRANGE var patchOperation = new PatchOperationBuilder().SetType(PatchOperations.replace) .SetPath(Common.Constants.UserResourceResponseNames.UserName) .SetContent("new_username") .Build(); InitializeFakeObjects(); _httpClientFactoryStub.Setup(h => h.GetHttpClient()).Returns(_testScimServerFixture.Client); // ACT var scimResponse = await _usersClient.AddAuthenticatedUser(baseUrl, "token"); var scimId = scimResponse.Content["id"].ToString(); UserStore.Instance().ScimId = scimId; var thirdResult = await _usersClient.PartialUpdateAuthenticatedUser(baseUrl, scimId) .AddOperation(patchOperation) .Execute(); UserStore.Instance().ScimId = null; // ASSERT Assert.Equal(HttpStatusCode.OK, thirdResult.StatusCode); }
public void ReplaceGivenPropertyWithRequiredAndJsonAttributesSetsCorrectPatchOperation() { //Arrange IPatchOperationBuilder <RequiredAndJsonItem> builder = new PatchOperationBuilder <RequiredAndJsonItem>(); //Act builder.Replace(x => x.TestProperty, "Test Value"); //Assert PatchOperation operation = builder.PatchOperations.First(); Assert.Equal(PatchOperationType.Replace, operation.OperationType); Assert.Equal("/testProperty", operation.Path); }
public void ReplaceGivenPropertyWithNoAttributesSetsCorrectPatchOperation() { //Arrange IPatchOperationBuilder <Item1> builder = new PatchOperationBuilder <Item1>(); //Act builder.Replace(x => x.TestIntProperty, 50); //Assert PatchOperation operation = builder.PatchOperations.First(); Assert.Equal(PatchOperationType.Replace, operation.OperationType); Assert.Equal("/testIntProperty", operation.Path); }
public void ReplaceGivenPropertyValueWithJsonAttributeSetsCorrectReplaceValue() { //Arrange IPatchOperationBuilder <Item1> builder = new PatchOperationBuilder <Item1>(); //Act builder.Replace(x => x.TestProperty, "100"); //Assert PatchOperation operation = builder.PatchOperations.First(); Assert.Equal(PatchOperationType.Replace, operation.OperationType); Assert.Equal("/thisIsTheName", operation.Path); }
public async ValueTask UpdateAsync(string id, Action <IPatchOperationBuilder <TItem> > builder, string?partitionKeyValue = null, CancellationToken cancellationToken = default, string?etag = default) { IPatchOperationBuilder <TItem> patchOperationBuilder = new PatchOperationBuilder <TItem>(); builder(patchOperationBuilder); Container container = await _containerProvider.GetContainerAsync(); partitionKeyValue ??= id; PatchItemRequestOptions patchItemRequestOptions = new(); if (etag != default && !string.IsNullOrWhiteSpace(etag)) { patchItemRequestOptions.IfMatchEtag = etag; } await container.PatchItemAsync <TItem>(id, new PartitionKey(partitionKeyValue), patchOperationBuilder.PatchOperations, patchItemRequestOptions, cancellationToken); }
public async Task When_Executing_Operations_On_Groups_Then_No_Exceptions_Are_Thrown() { const string baseUrl = "http://localhost:5555"; // ARRANGE InitializeFakeObjects(); _httpClientFactoryStub.Setup(h => h.GetHttpClient()).Returns(_testScimServerFixture.Client); var arr = JArray.Parse("[{'" + Common.Constants.MultiValueAttributeNames.Type + "' : 'group','" + Common.Constants.MultiValueAttributeNames.Value + "' : 'value'},{'" + Common.Constants.MultiValueAttributeNames.Type + "' : 'group2','" + Common.Constants.MultiValueAttributeNames.Value + "' : 'value2'}]"); var patchOperation = new PatchOperationBuilder().SetType(PatchOperations.replace) .SetPath(Common.Constants.GroupResourceResponseNames.Members) .SetContent(arr) .Build(); var removeGroupOperation = new PatchOperationBuilder().SetType(PatchOperations.remove) .SetPath("members[type eq group2]") .Build(); var addGroupOperation = new PatchOperationBuilder().SetType(PatchOperations.add) .SetPath("members") .SetContent(JArray.Parse("[{'" + Common.Constants.MultiValueAttributeNames.Type + "' : 'group3','" + Common.Constants.MultiValueAttributeNames.Value + "' : 'value3'}]")) .Build(); var updateGroupOperation = new PatchOperationBuilder().SetType(PatchOperations.replace) .SetPath("members[type eq group3].value") .SetContent("new_value") .Build(); // ACT : Create group var firstResult = await _groupsClient.AddGroup(baseUrl).SetCommonAttributes("external_id").Execute(); // ASSERTS Assert.NotNull(firstResult); Assert.True(firstResult.StatusCode == HttpStatusCode.Created); var id = firstResult.Content["id"].ToString(); // ACT : Get group var secondResult = await _groupsClient.GetGroup(baseUrl, id); // ASSERTS Assert.NotNull(secondResult); Assert.True(secondResult.StatusCode == HttpStatusCode.OK); Assert.True(secondResult.Content["id"].ToString() == id); // ACT : Update group var thirdResult = await _groupsClient.UpdateGroup(baseUrl, id) .SetCommonAttributes("other_id") .AddAttribute(new JProperty(Common.Constants.GroupResourceResponseNames.DisplayName, "display_name")) .Execute(); // ASSERTS Assert.NotNull(thirdResult); Assert.True(thirdResult.StatusCode == HttpStatusCode.OK); Assert.True(thirdResult.Content["id"].ToString() == id); Assert.True(thirdResult.Content[Common.Constants.GroupResourceResponseNames.DisplayName].ToString() == "display_name"); Assert.True(thirdResult.Content[Common.Constants.IdentifiedScimResourceNames.ExternalId].ToString() == "other_id"); // ACT : Partial update group var fourthResult = await _groupsClient.PartialUpdateGroup(baseUrl, id) .AddOperation(patchOperation) .Execute(); // ASSERTS Assert.NotNull(fourthResult); Assert.True(fourthResult.StatusCode == HttpStatusCode.OK); Assert.True(fourthResult.Content["id"].ToString() == id); Assert.True(fourthResult.Content[Common.Constants.GroupResourceResponseNames.Members][0][Common.Constants.MultiValueAttributeNames.Type].ToString() == "group"); Assert.True(fourthResult.Content[Common.Constants.GroupResourceResponseNames.Members][0][Common.Constants.MultiValueAttributeNames.Value].ToString() == "value"); // ACT : Remove group2 var fifthResult = await _groupsClient.PartialUpdateGroup(baseUrl, id) .AddOperation(removeGroupOperation) .Execute(); Assert.NotNull(fifthResult != null); Assert.True(fifthResult.Content[Common.Constants.GroupResourceResponseNames.Members].Count() == 1); // ACT : Add group3 var sixResult = await _groupsClient.PartialUpdateGroup(baseUrl, id) .AddOperation(addGroupOperation) .Execute(); Assert.NotNull(sixResult); Assert.True(sixResult.Content[Common.Constants.GroupResourceResponseNames.Members].Count() == 2); // ACT : Update the group3 type (immutable property) var sevenResult = await _groupsClient.PartialUpdateGroup(baseUrl, id) .AddOperation(updateGroupOperation) .Execute(); // ASSERTS Assert.NotNull(sevenResult); Assert.True(sevenResult.StatusCode == HttpStatusCode.BadRequest); // ACT : Add ten groups for (var i = 0; i < 10; i++) { await _groupsClient.AddGroup(baseUrl).SetCommonAttributes("external_id").Execute(); } // ACT : Get 10 groups var eightResult = await _groupsClient.SearchGroups(baseUrl, new SearchParameter { StartIndex = 1, Count = 10 }); // ASSERTS Assert.NotNull(eightResult); Assert.True(eightResult.Content["Resources"].Count() == 10); // ACT : Get only members var nineResult = await _groupsClient.SearchGroups(baseUrl, new SearchParameter { Filter = "members[type pr]", Attributes = new[] { "members.type" } }); // ASSERTS Assert.NotNull(nineResult); // ACT : Remove group var thenResult = await _groupsClient.DeleteGroup(baseUrl, id); // ASSERTS Assert.NotNull(thenResult); Assert.True(thenResult.StatusCode == HttpStatusCode.NoContent); }
public async Task When_Execute_Operations_On_Users_Then_No_Exceptions_Are_Thrown() { // ARRANGE InitializeFakeObjects(); _httpClientFactoryStub.Setup(h => h.GetHttpClient()).Returns(_testScimServerFixture.Client); var patchOperation = new PatchOperationBuilder().SetType(PatchOperations.replace) .SetPath(Common.Constants.UserResourceResponseNames.UserName) .SetContent("new_username") .Build(); var addEmailsOperation = new PatchOperationBuilder().SetType(PatchOperations.replace) .SetPath(Common.Constants.UserResourceResponseNames.Emails) .SetContent(JArray.Parse("[{'" + Common.Constants.MultiValueAttributeNames.Type + "' : 'work','" + Common.Constants.MultiValueAttributeNames.Value + "' : '*****@*****.**'}, {'" + Common.Constants.MultiValueAttributeNames.Type + "' : 'home','" + Common.Constants.MultiValueAttributeNames.Value + "' : '*****@*****.**'}]")) .Build(); var removeEmailOperation = new PatchOperationBuilder().SetType(PatchOperations.remove) .SetPath("emails[type eq work]") .Build(); // ACT : Create user var firstResult = await _usersClient.AddUser(baseUrl) .SetCommonAttributes("external_id") .AddAttribute(new JProperty(Common.Constants.UserResourceResponseNames.UserName, "username")) .Execute(); // ASSERTS Assert.NotNull(firstResult); Assert.True(firstResult.StatusCode == HttpStatusCode.Created); var id = firstResult.Content["id"].ToString(); // ACT : Partial update user var secondResult = await _usersClient.PartialUpdateUser(baseUrl, id) .AddOperation(patchOperation) .Execute(); // ASSERTS Assert.NotNull(secondResult); Assert.True(secondResult.Content[Common.Constants.UserResourceResponseNames.UserName].ToString() == "new_username"); // ACT : Update user var thirdResult = await _usersClient.UpdateUser(baseUrl, id) .SetCommonAttributes("new_external_id") .AddAttribute(new JProperty(Common.Constants.UserResourceResponseNames.UserName, "other_username")) .AddAttribute(new JProperty(Common.Constants.UserResourceResponseNames.Active, "false")) .Execute(); // ASSERTS Assert.NotNull(thirdResult); Assert.True(thirdResult.StatusCode == HttpStatusCode.OK); Assert.True(thirdResult.Content[Common.Constants.UserResourceResponseNames.UserName].ToString() == "other_username"); var active = thirdResult.Content[Common.Constants.UserResourceResponseNames.Active].ToString(); Assert.False(bool.Parse(active)); Assert.True(thirdResult.Content[Common.Constants.IdentifiedScimResourceNames.ExternalId].ToString() == "new_external_id"); // ACT : Add emails to the user var fourthResult = await _usersClient.PartialUpdateUser(baseUrl, id) .AddOperation(addEmailsOperation) .Execute(); // ASSERTS Assert.NotNull(fourthResult); Assert.True(fourthResult.StatusCode == HttpStatusCode.OK); Assert.True(fourthResult.Content[Common.Constants.UserResourceResponseNames.Emails].Count() == 2); // ACT : Remove emails of the user var fifthResult = await _usersClient.PartialUpdateUser(baseUrl, id) .AddOperation(removeEmailOperation) .Execute(); // ASSERTS Assert.NotNull(fifthResult); Assert.True(fifthResult.StatusCode == HttpStatusCode.OK); Assert.True(fifthResult.Content[Common.Constants.UserResourceResponseNames.Emails].Count() == 1); // ACT : Add 10 users for (int i = 0; i < 10; i++) { await _usersClient.AddUser(baseUrl) .SetCommonAttributes(Guid.NewGuid().ToString()) .AddAttribute(new JProperty(Common.Constants.UserResourceResponseNames.UserName, Guid.NewGuid().ToString())) .Execute(); } // ACT : Get 10 users var sixResult = await _usersClient.SearchUsers(baseUrl, new SearchParameter { StartIndex = 0, Count = 10 }); // ASSERTS Assert.NotNull(sixResult); var c = sixResult.Content["Resources"]; Assert.True(sixResult.Content["Resources"].Count() == 10); // ACT : Get only emails var sevenResult = await _usersClient.SearchUsers(baseUrl, new SearchParameter { Filter = "emails[type pr]", Attributes = new[] { "emails.type", "emails.value", "emails.display", "userName" } }); // ASSERTS Assert.NotNull(sevenResult); // ACT : Remove the user var eightResult = await _usersClient.DeleteUser(baseUrl, id); // ASSERTS Assert.NotNull(eightResult); Assert.True(eightResult.StatusCode == HttpStatusCode.NoContent); }