You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
abp/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserManager_Tests.cs

175 lines
5.7 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Shouldly;
using Volo.Abp.Castle.DynamicProxy;
using Volo.Abp.Uow;
using Xunit;
namespace Volo.Abp.Identity
{
public class IdentityUserManager_Tests : AbpIdentityDomainTestBase
{
private readonly IdentityUserManager _identityUserManager;
private readonly IIdentityUserRepository _identityUserRepository;
private readonly IIdentityRoleRepository _identityRoleRepository;
private readonly ILookupNormalizer _lookupNormalizer;
private readonly IUnitOfWorkManager _unitOfWorkManager;
private readonly IdentityTestData _testData;
public IdentityUserManager_Tests()
{
_identityUserManager = GetRequiredService<IdentityUserManager>();
_identityUserRepository = GetRequiredService<IIdentityUserRepository>();
_identityRoleRepository = GetRequiredService<IIdentityRoleRepository>();
_lookupNormalizer = GetRequiredService<ILookupNormalizer>();
_testData = GetRequiredService<IdentityTestData>();
_unitOfWorkManager = GetRequiredService<IUnitOfWorkManager>();
}
[Fact]
public async Task GetByIdAsync()
{
var user = await _identityUserManager.GetByIdAsync(_testData.UserJohnId);
user.ShouldNotBeNull();
user.UserName.ShouldBe("john.nash");
}
[Fact]
public async Task SetRolesAsync()
{
using (var uow = _unitOfWorkManager.Begin())
{
var user = await _identityUserRepository.FindByNormalizedUserNameAsync(
_lookupNormalizer.NormalizeName("david")
);
user.ShouldNotBeNull();
var identityResult = await _identityUserManager.SetRolesAsync(user, new List<string>()
{
"moderator",
});
identityResult.Succeeded.ShouldBeTrue();
user.Roles.ShouldContain(x => x.RoleId == _testData.RoleModeratorId);
await uow.CompleteAsync();
}
}
[Fact]
public async Task SetRoles_Should_Remove_Other_Roles()
{
using (var uow = _unitOfWorkManager.Begin())
{
var roleSupporter =
await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("supporter"));
roleSupporter.ShouldNotBeNull();
var user = await _identityUserRepository.FindByNormalizedUserNameAsync(
_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
var identityResult = await _identityUserManager.SetRolesAsync(user, new List<string>()
{
"admin",
});
identityResult.Succeeded.ShouldBeTrue();
user.Roles.ShouldNotContain(x => x.RoleId == _testData.RoleModeratorId);
user.Roles.ShouldNotContain(x => x.RoleId == roleSupporter.Id);
await uow.CompleteAsync();
}
}
[Fact]
public async Task AddDefaultRolesAsync_In_Same_Uow()
{
await CreateRandomDefaultRoleAsync();
using (var uow = _unitOfWorkManager.Begin())
{
var user = CreateRandomUser();
(await _identityUserManager.CreateAsync(user)).CheckErrors();
user.Roles.Count.ShouldBe(0);
await _identityUserManager.AddDefaultRolesAsync(user);
user.Roles.Count.ShouldBeGreaterThan(0);
foreach (var roleId in user.Roles.Select(r => r.RoleId))
{
var role = await _identityRoleRepository.GetAsync(roleId);
role.IsDefault.ShouldBe(true);
}
await uow.CompleteAsync();
}
}
[Fact]
public async Task AddDefaultRolesAsync_In_Different_Uow()
{
await CreateRandomDefaultRoleAsync();
Guid userId;
using (var uow = _unitOfWorkManager.Begin())
{
var user = CreateRandomUser();
userId = user.Id;
(await _identityUserManager.CreateAsync(user)).CheckErrors();
user.Roles.Count.ShouldBe(0);
await uow.CompleteAsync();
}
using (var uow = _unitOfWorkManager.Begin())
{
var user = await _identityUserManager.GetByIdAsync(userId);
await _identityUserManager.AddDefaultRolesAsync(user);
user.Roles.Count.ShouldBeGreaterThan(0);
foreach (var roleId in user.Roles.Select(r => r.RoleId))
{
var role = await _identityRoleRepository.GetAsync(roleId);
role.IsDefault.ShouldBe(true);
}
await uow.CompleteAsync();
}
}
private async Task CreateRandomDefaultRoleAsync()
{
await _identityRoleRepository.InsertAsync(
new IdentityRole(
Guid.NewGuid(),
Guid.NewGuid().ToString()
)
{
IsDefault = true
}
);
}
private static IdentityUser CreateRandomUser()
{
return new IdentityUser(
Guid.NewGuid(),
Guid.NewGuid().ToString(),
Guid.NewGuid().ToString() + "@abp.io"
);
}
}
}