public void WHEN_min_required_non_alphanumeric_is_specified_SHOULD_validate_password_correctly()
        {
            // Arrange
            var param     = new GetCreateAccountViewModelParam();
            var minNumber = 3;

            var goodPassword = "******";
            var badPassword  = "******";

            _container.GetMock <MembershipProvider>()
            .SetupGet(m => m.MinRequiredNonAlphanumericCharacters)
            .Returns(minNumber);

            var membershipViewService = _container.CreateInstance <MembershipViewService>();

            membershipViewService.Membership = _container.Get <IMembershipProxy>();

            // Act
            var viewModel = membershipViewService.GetCreateAccountViewModel(param);

            // Assert
            viewModel.Should().NotBeNull();
            viewModel.PasswordRegexPattern.Should().NotBeNullOrEmpty();

            Regex.IsMatch(goodPassword, viewModel.PasswordRegexPattern).Should().BeTrue();
            Regex.IsMatch(badPassword, viewModel.PasswordRegexPattern).Should().BeFalse();
        }
        /// <summary>
        /// Get the view Model to display a Create Account Form and Form result
        /// </summary>
        /// <param name="param">Builder params <see cref="GetCreateAccountViewModelParam"/></param>
        /// <returns>
        /// The view model to display the Create Account Form
        /// </returns>
        public virtual CreateAccountViewModel GetCreateAccountViewModel(GetCreateAccountViewModelParam param)
        {
            var viewModel = ViewModelMapper.MapTo <CreateAccountViewModel>(param.Customer, param.CultureInfo) ?? new CreateAccountViewModel();

            viewModel.TermsAndConditionsUrl = param.TermsAndConditionsUrl;
            viewModel.Status     = param.Status?.ToString("G") ?? string.Empty;
            viewModel.ReturnUrl  = param.ReturnUrl;
            viewModel.IsSuccess  = param.Status == MyAccountStatus.Success;
            viewModel.Username   = param.Customer != null ? param.Customer.Username : string.Empty;
            viewModel.CustomerId = param.Customer?.Id ?? Guid.Empty;
            viewModel.Created    = param.Customer?.Created ?? DateTime.MinValue;

            SetPasswordValidationRules(viewModel);

            return(viewModel);
        }
        /// <summary>
        /// Get the view Model to display a Create Account Form and Form result
        /// </summary>
        /// <param name="param">Builder params <see cref="GetCreateAccountViewModelParam"/></param>
        /// <returns>
        /// The view model to display the Create Account Form
        /// </returns>
        public virtual CreateAccountViewModel GetCreateAccountViewModel(GetCreateAccountViewModelParam param)
        {
            var viewModel = ViewModelMapper.MapTo <CreateAccountViewModel>(param.Customer, param.CultureInfo) ?? new CreateAccountViewModel();

            viewModel.MinRequiredPasswordLength            = MembershipProvider.MinRequiredPasswordLength;
            viewModel.MinRequiredNonAlphanumericCharacters = MembershipProvider.MinRequiredNonAlphanumericCharacters;
            viewModel.PasswordRegexPattern  = CreatePasswordRegexPattern().ToString();
            viewModel.TermsAndConditionsUrl = param.TermsAndConditionsUrl;
            viewModel.Status     = param.Status?.ToString("G") ?? string.Empty;
            viewModel.ReturnUrl  = param.ReturnUrl;
            viewModel.IsSuccess  = param.Status == MyAccountStatus.Success;
            viewModel.Username   = param.Customer != null ? param.Customer.Username : string.Empty;
            viewModel.CustomerId = param.Customer?.Id ?? Guid.Empty;
            viewModel.Created    = param.Customer?.Created ?? DateTime.MinValue;

            return(viewModel);
        }
        public void WHEN_passing_valid_arguments_SHOULD_create_viewmodel_with_regex()
        {
            // Arrange
            var param     = new GetCreateAccountViewModelParam();
            var minNumber = GetRandom.PositiveInt();

            _container.GetMock <MembershipProvider>()
            .SetupGet(m => m.MinRequiredNonAlphanumericCharacters)
            .Returns(minNumber)
            .Verifiable("Regex must be based on this value");

            var membershipViewService = _container.CreateInstance <MembershipViewService>();

            membershipViewService.Membership = _container.Get <IMembershipProxy>();

            // Act
            var viewModel = membershipViewService.GetCreateAccountViewModel(param);

            // Assert
            viewModel.Should().NotBeNull();
            viewModel.PasswordRegexPattern.Should().NotBeNullOrEmpty();
            viewModel.PasswordRegexPattern.Should()
            .Contain(minNumber + "", "the Regex must be based on the min required non alphanumeric characters");
        }