c# - mvc - Cómo simular el UserManager en ASP.NET 5
security asp net mvc (1)
Lo he logrado con la ayuda de la aplicación de muestra MVC Music Store.
En mi clase Test Unit, configuré el contexto de la base de datos y el UserManager de la siguiente manera:
public class DatabaseSetupTests : IDisposable
{
private MyDbContext Context { get; }
private UserManager<ApplicationUser> UserManager { get; }
public DatabaseSetupTests()
{
var services = new ServiceCollection();
services.AddEntityFramework()
.AddInMemoryDatabase()
.AddDbContext<MyDbContext>(options => options.UseInMemoryDatabase());
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<MyDbContext>();
// Taken from https://github.com/aspnet/MusicStore/blob/dev/test/MusicStore.Test/ManageControllerTest.cs (and modified)
// IHttpContextAccessor is required for SignInManager, and UserManager
var context = new DefaultHttpContext();
context.Features.Set<IHttpAuthenticationFeature>(new HttpAuthenticationFeature());
services.AddSingleton<IHttpContextAccessor>(h => new HttpContextAccessor { HttpContext = context });
var serviceProvider = services.BuildServiceProvider();
Context = serviceProvider.GetRequiredService<MyDbContext>();
UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
}
....
}
Entonces puedo usar el UserManager en mis pruebas de unidad, por ejemplo:
[Fact]
public async Task DontCreateAdminUserWhenOtherAdminsPresent()
{
await UserManager.CreateAsync(new ApplicationUser { UserName = "[email protected]" }, "IDoComplyWithTheRules2016!");
...
}
Si su Inyector de Dependencia no puede resolver un IHttpContextAccessor, entonces no podrá crear una instancia de UserManager debido a que depende de él. Creo (y esto es solo una suposición), que con Asp.Net 5, el UserManager se ocupa de refrescar los reclamos basados en cookies cuando los cambia (reclamos, roles ...) para un usuario y por lo tanto requiere algo de HttpContext para iniciar sesión / logout actions y acceso a cookies.
Estoy escribiendo una interfaz de usuario para administrar usuarios en una ASP.NET 5
. Necesito mostrar cualquier error devuelto por el UserManager en la interfaz de usuario. Tengo los errores IdentityResult
pasados en el modelo de vista, pero estoy un poco a la deriva cuando se trata de probar mi código.
¿Cuál es la mejor manera de UserManager
el UserManager
en ASP.NET 5
?
¿Debo heredar de UserManager
y anular todos los métodos que estoy usando y luego inyectar mi versión de UserManager
en una instancia del Controller
en mi proyecto de prueba?