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); }