コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }