public void TestCustomUserAttributes()
        {
            var userData = CustomUserData.GenerateUserData("CustomCoreFxUser1");

            DeleteUser(userData.Name);

            try
            {
                using var context = DomainContext;
                using (var principal = CreateCustomUser(context, userData))
                {
                    Assert.NotNull(principal);
                    ValidateRecentAddedUser(context, userData);
                    ValidateUserUsingPrincipal(context, principal);

                    using var foundPrincipal = FindCustomUser(userData.Name, context);
                    Assert.NotNull(foundPrincipal);

                    Assert.Equal(userData.PostalCode, foundPrincipal.PostalCode);
                    Assert.Equal(principal.PostalCode, foundPrincipal.PostalCode);

                    Assert.Equal(userData.PostalAddress, foundPrincipal.PostalAddress);
                    Assert.Equal(principal.PostalAddress, foundPrincipal.PostalAddress);
                }
            }
            finally
            {
                DeleteUser(userData.Name);
            }
        }
        public void TestMultiValueCustomAttributes()
        {
            var userData = CustomUserData.GenerateUserData("CustomCoreFxUser2");

            userData.PostalAddress.Add("Second address");

            DeleteUser(userData.Name);

            // Check whether directory-data is equivalent to expected data
            void CheckAddressWithDirectory(PrincipalContext context, List <string> address)
            {
                using var foundPrincipal = FindCustomUser(userData.Name, context);
                Assert.NotNull(foundPrincipal);
                Assert.Equal(address.ToHashSet(), foundPrincipal.PostalAddress.ToHashSet());
            };

            // Helper to update list
            void UpdateAddressList(CustomUserPrincipal principal, Action <List <string> > update)
            {
                var localCopy = principal.PostalAddress;

                update(localCopy);
                principal.PostalAddress = localCopy;
                principal.Save();
            }

            try
            {
                // Initial setup
                using var context   = DomainContext;
                using var principal = CreateCustomUser(context, userData);
                Assert.NotNull(principal);
                Assert.Equal(userData.PostalAddress, principal.PostalAddress);

                CheckAddressWithDirectory(context, principal.PostalAddress);

                // Add address
                UpdateAddressList(principal, addresses => addresses.Add("Third address"));
                CheckAddressWithDirectory(context, principal.PostalAddress);

                // Remove address
                UpdateAddressList(principal, addresses => addresses.Remove("Second address"));
                CheckAddressWithDirectory(context, principal.PostalAddress);

                // Remove address so we have one remaining
                UpdateAddressList(principal, addresses => addresses.Remove("Third address"));
                CheckAddressWithDirectory(context, principal.PostalAddress);
            }
            finally
            {
                DeleteUser(userData.Name);
            }
        }
        private CustomUserPrincipal CreateCustomUser(PrincipalContext context, CustomUserData userData)
        {
            CustomUserPrincipal user = new CustomUserPrincipal(context, userData.Name, userData.Password, true);

            // assign some properties to the custom user principal
            user.GivenName     = userData.FirstName;
            user.Surname       = userData.LastName;
            user.DisplayName   = userData.DisplayName;
            user.PostalCode    = userData.PostalCode;
            user.PostalAddress = userData.PostalAddress;
            user.Save();
            return(user);
        }