public void ShouldSwitchRoleProvider()
    {
      // arrange
      var roles = new[] { @"sitecore/Editors" };

      var localProvider = Substitute.For<RoleProvider, IThreadLocalProvider<RoleProvider>>();
      localProvider.GetAllRoles().Returns(roles);

      // act
      using (new RoleProviderSwitcher(localProvider))
      {
        // assert
        Roles.GetAllRoles().Should().BeSameAs(roles);
      }

      Roles.GetAllRoles().Should().BeEmpty();
    }
 public override void UpdateUser(SystemWeb.MembershipUser user)
 {
     try
     {
         Membership member = Membership.Fetch<Membership>(QryFetchMemberByName.Query(user.UserName, Application.ID));
         member.FromMembershipUser(user);
         member.Save();
         UnitOfWork.CurrentSession.Flush();
     }
     catch (Exception ex)
     {
         throw new ProviderException("User was unable to be updated", ex);
     }
 }
        public override SystemWeb.MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out SystemWeb.MembershipCreateStatus status)
        {
            SystemWeb.ValidatePasswordEventArgs args = new SystemWeb.ValidatePasswordEventArgs(username, password, true);

            OnValidatingPassword(args);

            if (args.Cancel)
            {
                status = SystemWeb.MembershipCreateStatus.InvalidPassword;
                return null;
            }

            if (RequiresUniqueEmail && !string.IsNullOrEmpty(GetUserNameByEmail(email)))
            {
                status = SystemWeb.MembershipCreateStatus.DuplicateEmail;
                return null;
            }

            if (QryFetchUserByName.QueryCount(username, Application.ID).UniqueResult<int>() > 0)
            {
                status = SystemWeb.MembershipCreateStatus.DuplicateUserName;
            }
            else
            {
                Membership user = new Membership();
                user.UserName = username;
                user.IsAnonymous = false;
                user.Application = Application;

                user.Password = EncodePassword(password, machineKey.ValidationKey);
                user.PasswordFormat = (int)PasswordFormat;
                user.PasswordSalt = machineKey.ValidationKey;
                user.Email = email;
                user.PasswordQuestion = passwordQuestion;
                user.PasswordAnswer = EncodePassword(passwordAnswer, machineKey.ValidationKey);
                user.IsApproved = isApproved;
                user.CreateDate = DateTime.Now;

                try
                {
                    user.Save();
                    UnitOfWork.CurrentSession.Flush();
                    status = SystemWeb.MembershipCreateStatus.Success;
                }
                catch (Exception ex)
                {
                    throw new ProviderException("Failed to create user", ex);
                }

                return GetUser(username, false);
            }
            return null;
        }