|
|
@ -19,13 +19,12 @@ namespace Squidex.Domain.Users |
|
|
{ |
|
|
{ |
|
|
public class DefaultUserResolverTests |
|
|
public class DefaultUserResolverTests |
|
|
{ |
|
|
{ |
|
|
|
|
|
private readonly IUserFactory userFactory = A.Fake<IUserFactory>(); |
|
|
private readonly UserManager<IdentityUser> userManager = A.Fake<UserManager<IdentityUser>>(); |
|
|
private readonly UserManager<IdentityUser> userManager = A.Fake<UserManager<IdentityUser>>(); |
|
|
private readonly DefaultUserResolver sut; |
|
|
private readonly DefaultUserResolver sut; |
|
|
|
|
|
|
|
|
public DefaultUserResolverTests() |
|
|
public DefaultUserResolverTests() |
|
|
{ |
|
|
{ |
|
|
var userFactory = A.Fake<IUserFactory>(); |
|
|
|
|
|
|
|
|
|
|
|
A.CallTo(() => userFactory.IsId(A<string>.That.StartsWith("id"))) |
|
|
A.CallTo(() => userFactory.IsId(A<string>.That.StartsWith("id"))) |
|
|
.Returns(true); |
|
|
.Returns(true); |
|
|
|
|
|
|
|
|
@ -56,10 +55,73 @@ namespace Squidex.Domain.Users |
|
|
sut = new DefaultUserResolver(serviceProvider); |
|
|
sut = new DefaultUserResolver(serviceProvider); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[Fact] |
|
|
|
|
|
public async Task Should_create_user_and_return_true_when_created() |
|
|
|
|
|
{ |
|
|
|
|
|
var (user, claims) = GenerateUser("id1"); |
|
|
|
|
|
|
|
|
|
|
|
A.CallTo(() => userFactory.Create(user.Email)) |
|
|
|
|
|
.Returns(user); |
|
|
|
|
|
|
|
|
|
|
|
A.CallTo(() => userManager.CreateAsync(user)) |
|
|
|
|
|
.Returns(IdentityResult.Success); |
|
|
|
|
|
|
|
|
|
|
|
SetupUser(user, claims); |
|
|
|
|
|
|
|
|
|
|
|
var (result, created) = await sut.CreateUserIfNotExistsAsync(user.Email, false); |
|
|
|
|
|
|
|
|
|
|
|
Assert.Equal(user.Id, result!.Id); |
|
|
|
|
|
Assert.Equal(user.Email, result!.Email); |
|
|
|
|
|
|
|
|
|
|
|
Assert.True(created); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[Fact] |
|
|
|
|
|
public async Task Should_create_user_and_return_false_when_already_exists() |
|
|
|
|
|
{ |
|
|
|
|
|
var (user, claims) = GenerateUser("id1"); |
|
|
|
|
|
|
|
|
|
|
|
A.CallTo(() => userFactory.Create(user.Email)) |
|
|
|
|
|
.Returns(user); |
|
|
|
|
|
|
|
|
|
|
|
A.CallTo(() => userManager.CreateAsync(user)) |
|
|
|
|
|
.Returns(IdentityResult.Failed()); |
|
|
|
|
|
|
|
|
|
|
|
SetupUser(user, claims); |
|
|
|
|
|
|
|
|
|
|
|
var (result, created) = await sut.CreateUserIfNotExistsAsync(user.Email, false); |
|
|
|
|
|
|
|
|
|
|
|
Assert.Equal(user.Id, result!.Id); |
|
|
|
|
|
Assert.Equal(user.Email, result!.Email); |
|
|
|
|
|
|
|
|
|
|
|
Assert.False(created); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[Fact] |
|
|
|
|
|
public async Task Should_create_user_and_return_false_when_exception_thrown() |
|
|
|
|
|
{ |
|
|
|
|
|
var (user, claims) = GenerateUser("id1"); |
|
|
|
|
|
|
|
|
|
|
|
A.CallTo(() => userFactory.Create(user.Email)) |
|
|
|
|
|
.Throws(new InvalidOperationException()); |
|
|
|
|
|
|
|
|
|
|
|
A.CallTo(() => userManager.CreateAsync(user)) |
|
|
|
|
|
.Returns(IdentityResult.Failed()); |
|
|
|
|
|
|
|
|
|
|
|
SetupUser(user, claims); |
|
|
|
|
|
|
|
|
|
|
|
var (result, created) = await sut.CreateUserIfNotExistsAsync(user.Email, false); |
|
|
|
|
|
|
|
|
|
|
|
Assert.Equal(user.Id, result!.Id); |
|
|
|
|
|
Assert.Equal(user.Email, result!.Email); |
|
|
|
|
|
|
|
|
|
|
|
Assert.False(created); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public async Task Should_resolve_user_by_email() |
|
|
public async Task Should_resolve_user_by_email() |
|
|
{ |
|
|
{ |
|
|
var (user, claims) = GernerateUser("id1"); |
|
|
var (user, claims) = GenerateUser("id1"); |
|
|
|
|
|
|
|
|
A.CallTo(() => userManager.FindByEmailAsync(user.Email)) |
|
|
A.CallTo(() => userManager.FindByEmailAsync(user.Email)) |
|
|
.Returns(user); |
|
|
.Returns(user); |
|
|
@ -76,9 +138,9 @@ namespace Squidex.Domain.Users |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public async Task Should_resolve_user_by_id1() |
|
|
public async Task Should_resolve_user_by_id() |
|
|
{ |
|
|
{ |
|
|
var (user, claims) = GernerateUser("id2"); |
|
|
var (user, claims) = GenerateUser("id2"); |
|
|
|
|
|
|
|
|
A.CallTo(() => userManager.FindByIdAsync(user.Id)) |
|
|
A.CallTo(() => userManager.FindByIdAsync(user.Id)) |
|
|
.Returns(user); |
|
|
.Returns(user); |
|
|
@ -94,11 +156,30 @@ namespace Squidex.Domain.Users |
|
|
Assert.Equal(claims, result!.Claims); |
|
|
Assert.Equal(claims, result!.Claims); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[Fact] |
|
|
|
|
|
public async Task Should_resolve_user_by_id_only() |
|
|
|
|
|
{ |
|
|
|
|
|
var (user, claims) = GenerateUser("id2"); |
|
|
|
|
|
|
|
|
|
|
|
A.CallTo(() => userManager.FindByIdAsync(user.Id)) |
|
|
|
|
|
.Returns(user); |
|
|
|
|
|
|
|
|
|
|
|
A.CallTo(() => userManager.GetClaimsAsync(user)) |
|
|
|
|
|
.Returns(claims); |
|
|
|
|
|
|
|
|
|
|
|
var result = await sut.FindByIdAsync(user.Id)!; |
|
|
|
|
|
|
|
|
|
|
|
Assert.Equal(user.Id, result!.Id); |
|
|
|
|
|
Assert.Equal(user.Email, result!.Email); |
|
|
|
|
|
|
|
|
|
|
|
Assert.Equal(claims, result!.Claims); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public async Task Should_query_many_by_email_async() |
|
|
public async Task Should_query_many_by_email_async() |
|
|
{ |
|
|
{ |
|
|
var (user1, claims1) = GernerateUser("id1"); |
|
|
var (user1, claims1) = GenerateUser("id1"); |
|
|
var (user2, claims2) = GernerateUser("id2"); |
|
|
var (user2, claims2) = GenerateUser("id2"); |
|
|
|
|
|
|
|
|
var list = new List<IdentityUser> { user1, user2 }; |
|
|
var list = new List<IdentityUser> { user1, user2 }; |
|
|
|
|
|
|
|
|
@ -119,7 +200,7 @@ namespace Squidex.Domain.Users |
|
|
.MustNotHaveHappened(); |
|
|
.MustNotHaveHappened(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private static (IdentityUser, List<Claim>) GernerateUser(string id) |
|
|
private static (IdentityUser, List<Claim>) GenerateUser(string id) |
|
|
{ |
|
|
{ |
|
|
var user = new IdentityUser { Id = id, Email = $"email_{id}", NormalizedEmail = $"EMAIL_{id}" }; |
|
|
var user = new IdentityUser { Id = id, Email = $"email_{id}", NormalizedEmail = $"EMAIL_{id}" }; |
|
|
|
|
|
|
|
|
@ -131,5 +212,14 @@ namespace Squidex.Domain.Users |
|
|
|
|
|
|
|
|
return (user, claims); |
|
|
return (user, claims); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void SetupUser(IdentityUser user, List<Claim> claims) |
|
|
|
|
|
{ |
|
|
|
|
|
A.CallTo(() => userManager.FindByEmailAsync(user.Email)) |
|
|
|
|
|
.Returns(user); |
|
|
|
|
|
|
|
|
|
|
|
A.CallTo(() => userManager.GetClaimsAsync(user)) |
|
|
|
|
|
.Returns(claims); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|