@ -2,8 +2,10 @@
using System.Collections.Generic ;
using System.Linq ;
using System.Security.Claims ;
using System.Text.RegularExpressions ;
using System.Threading.Tasks ;
using Microsoft.AspNetCore.Identity ;
using Microsoft.EntityFrameworkCore ;
using Microsoft.Extensions.DependencyInjection ;
using Microsoft.Extensions.DependencyInjection.Extensions ;
using Microsoft.Extensions.Options ;
@ -378,6 +380,88 @@ public class IdentityUserManager_Tests : AbpIdentityDomainTestBase
}
}
[Fact]
public async Task ValidateUserNameAsync ( )
{
var result = await _ identityUserManager . ValidateUserNameAsync ( "M_y+User-001@abp.io" ) ;
result . ShouldBeTrue ( ) ;
var user = CreateRandomUser ( ) ;
( await _ identityUserManager . CreateAsync ( user ) ) . CheckErrors ( ) ;
result = await _ identityUserManager . ValidateUserNameAsync ( user . UserName , user . Id ) ;
result . ShouldBeTrue ( ) ;
result = await _ identityUserManager . ValidateUserNameAsync ( user . UserName ) ;
result . ShouldBeFalse ( ) ;
result = await _ identityUserManager . ValidateUserNameAsync ( "无效的字符" ) ;
result . ShouldBeFalse ( ) ;
}
[Fact]
public async Task GetRandomUserNameAsync ( )
{
_ identityUserManager . Options . User . AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+" ;
var username = await _ identityUserManager . GetRandomUserNameAsync ( 1 5 ) ;
username . Length . ShouldBe ( 1 5 ) ;
username . All ( c = > _ identityUserManager . Options . User . AllowedUserNameCharacters . Contains ( c ) ) . ShouldBeTrue ( ) ;
_ identityUserManager . Options . User . AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyz0123456789" ;
username = await _ identityUserManager . GetRandomUserNameAsync ( 1 5 ) ;
username . Length . ShouldBe ( 1 5 ) ;
username . All ( c = > _ identityUserManager . Options . User . AllowedUserNameCharacters . Contains ( c ) ) . ShouldBeTrue ( ) ;
_ identityUserManager . Options . User . AllowedUserNameCharacters = "0123456789" ;
username = await _ identityUserManager . GetRandomUserNameAsync ( 1 5 ) ;
username . Length . ShouldBe ( 1 5 ) ;
username . All ( c = > _ identityUserManager . Options . User . AllowedUserNameCharacters . Contains ( c ) ) . ShouldBeTrue ( ) ;
_ identityUserManager . Options . User . AllowedUserNameCharacters = null ! ;
username = await _ identityUserManager . GetRandomUserNameAsync ( 1 5 ) ;
username . Length . ShouldBe ( 1 5 ) ;
username . All ( c = > "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+" . Contains ( c ) ) . ShouldBeTrue ( ) ;
}
[Fact]
public async Task GetUserNameFromEmailAsync ( )
{
_ identityUserManager . Options . User . AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyz0123456789" ;
var username = await _ identityUserManager . GetUserNameFromEmailAsync ( "Yönetici@abp.io" ) ;
username . Length . ShouldBe ( "Yönetici" . Length ) ; //random username
username . All ( c = > "abcdefghijklmnopqrstuvwxyz0123456789" . Contains ( c ) ) . ShouldBeTrue ( ) ;
_ identityUserManager . Options . User . AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyz0123456789" ;
username = await _ identityUserManager . GetUserNameFromEmailAsync ( "admin@abp.io" ) ;
username . Length . ShouldBe ( 9 ) ; //admin and random 4 numbers
username . ShouldContain ( "admin" ) ;
Regex . IsMatch ( username , @"\d{4}$" ) . ShouldBeTrue ( ) ;
_ identityUserManager . Options . User . AllowedUserNameCharacters = "admin01234" ;
username = await _ identityUserManager . GetUserNameFromEmailAsync ( "admin@abp.io" ) ;
username . Length . ShouldBe ( 9 ) ; //admin and random 4 numbers
username . ShouldContain ( "admin" ) ;
Regex . IsMatch ( username , @"[0-4]{3}$" ) . ShouldBeTrue ( ) ;
_ identityUserManager . Options . User . AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyz" ;
username = await _ identityUserManager . GetUserNameFromEmailAsync ( "admin@abp.io" ) ;
username . Length . ShouldBe ( 9 ) ; //admin and random 4 characters
username . ShouldContain ( "admin" ) ;
Regex . IsMatch ( username , @"[a-z]{4}$" ) . ShouldBeTrue ( ) ;
_ identityUserManager . Options . User . AllowedUserNameCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
username = await _ identityUserManager . GetUserNameFromEmailAsync ( "ADMIN@abp.io" ) ;
username . Length . ShouldBe ( 9 ) ; //admin and random 4 characters
username . ShouldContain ( "ADMIN" ) ;
Regex . IsMatch ( username , @"[A-Z]{4}$" ) . ShouldBeTrue ( ) ;
_ identityUserManager . Options . User . AllowedUserNameCharacters = null ! ;
username = await _ identityUserManager . GetUserNameFromEmailAsync ( "admin@abp.io" ) ;
username . Length . ShouldBe ( 9 ) ; //admin and random 4 numbers
username . ShouldContain ( "admin" ) ;
Regex . IsMatch ( username , @"[0-9]{4}$" ) . ShouldBeTrue ( ) ;
}
private async Task CreateRandomDefaultRoleAsync ( )
{
await _ identityRoleRepository . InsertAsync (