using System; using System.Collections.Generic; using System.Linq; using System.Security.Claims; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNet.DependencyInjection.Fallback; using Microsoft.AspNet.Testing; using Moq; using Xunit; namespace Microsoft.AspNet.Identity.Test { public class UserManagerTest { private class TestManager : UserManager { public IUserStore StorePublic { get { return base.Store; } } public TestManager(IServiceProvider provider) : base(provider) { } } [Fact] public void ServiceProviderWireupTest() { var manager = new TestManager(TestServices.DefaultServices().BuildServiceProvider()); Assert.NotNull(manager.PasswordHasher); Assert.NotNull(manager.PasswordValidator); Assert.NotNull(manager.UserValidator); Assert.NotNull(manager.StorePublic); } #if NET45 //TODO: Mock fails in K (this works fine in net45) [Fact] public async Task CreateCallsStore() { // Setup var store = new Mock>(); var user = new TestUser { UserName = "Foo" }; store.Setup(s => s.Create(user, CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable(); var validator = new Mock>(); var userManager = new UserManager(store.Object); validator.Setup(v => v.Validate(userManager, user, CancellationToken.None)).Returns(Task.FromResult(IdentityResult.Success)).Verifiable(); userManager.UserValidator = validator.Object; // Act var result = await userManager.Create(user); // Assert Assert.True(result.Succeeded); store.VerifyAll(); } [Fact] public async Task DeleteCallsStore() { // Setup var store = new Mock>(); var user = new TestUser { UserName = "Foo" }; store.Setup(s => s.Delete(user, CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable(); var userManager = new UserManager(store.Object); // Act var result = await userManager.Delete(user); // Assert Assert.True(result.Succeeded); store.VerifyAll(); } [Fact] public async Task UpdateCallsStore() { // Setup var store = new Mock>(); var user = new TestUser { UserName = "Foo" }; store.Setup(s => s.Update(user, CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable(); var validator = new Mock>(); var userManager = new UserManager(store.Object); validator.Setup(v => v.Validate(userManager, user, CancellationToken.None)).Returns(Task.FromResult(IdentityResult.Success)).Verifiable(); userManager.UserValidator = validator.Object; // Act var result = await userManager.Update(user); // Assert Assert.True(result.Succeeded); store.VerifyAll(); } [Fact] public async Task FindByIdCallsStore() { // Setup var store = new Mock>(); var user = new TestUser { UserName = "Foo" }; store.Setup(s => s.FindById(user.Id, CancellationToken.None)).Returns(Task.FromResult(user)).Verifiable(); var userManager = new UserManager(store.Object); // Act var result = await userManager.FindById(user.Id); // Assert Assert.Equal(user, result); store.VerifyAll(); } [Fact] public async Task FindByNameCallsStore() { // Setup var store = new Mock>(); var user = new TestUser {UserName="Foo"}; store.Setup(s => s.FindByName(user.UserName, CancellationToken.None)).Returns(Task.FromResult(user)).Verifiable(); var userManager = new UserManager(store.Object); // Act var result = await userManager.FindByName(user.UserName); // Assert Assert.Equal(user, result); store.VerifyAll(); } #endif [Fact] public async Task CheckPasswordWithNullUserReturnsFalse() { var manager = new UserManager(new EmptyStore()); Assert.False(await manager.CheckPassword(null, "whatevs")); } [Fact] public async Task FindWithUnknownUserAndPasswordReturnsNull() { var manager = new UserManager(new EmptyStore()); Assert.Null(await manager.Find("bogus", "whatevs")); } [Fact] public void UsersQueryableFailWhenStoreNotImplemented() { var manager = new UserManager(new NoopUserStore()); Assert.False(manager.SupportsQueryableUsers); Assert.Throws(() => manager.Users.Count()); } [Fact] public async Task UsersEmailMethodsFailWhenStoreNotImplemented() { var manager = new UserManager(new NoopUserStore()); Assert.False(manager.SupportsUserEmail); await Assert.ThrowsAsync(() => manager.FindByEmail(null)); await Assert.ThrowsAsync(() => manager.SetEmail(null, null)); await Assert.ThrowsAsync(() => manager.GetEmail(null)); await Assert.ThrowsAsync(() => manager.IsEmailConfirmed(null)); await Assert.ThrowsAsync(() => manager.ConfirmEmail(null, null)); } [Fact] public async Task UsersPhoneNumberMethodsFailWhenStoreNotImplemented() { var manager = new UserManager(new NoopUserStore()); Assert.False(manager.SupportsUserPhoneNumber); await Assert.ThrowsAsync(async () => await manager.SetPhoneNumber(null, null)); await Assert.ThrowsAsync(async () => await manager.SetPhoneNumber(null, null)); await Assert.ThrowsAsync(async () => await manager.GetPhoneNumber(null)); } [Fact] public async Task TokenMethodsThrowWithNoTokenProvider() { var manager = new UserManager(new NoopUserStore()); await Assert.ThrowsAsync( async () => await manager.GenerateUserToken(null, null)); await Assert.ThrowsAsync( async () => await manager.VerifyUserToken(null, null, null)); } [Fact] public async Task PasswordMethodsFailWhenStoreNotImplemented() { var manager = new UserManager(new NoopUserStore()); Assert.False(manager.SupportsUserPassword); await Assert.ThrowsAsync(() => manager.Create(null, null)); await Assert.ThrowsAsync(() => manager.ChangePassword(null, null, null)); await Assert.ThrowsAsync(() => manager.AddPassword(null, null)); await Assert.ThrowsAsync(() => manager.RemovePassword(null)); await Assert.ThrowsAsync(() => manager.CheckPassword(null, null)); await Assert.ThrowsAsync(() => manager.HasPassword(null)); } [Fact] public async Task SecurityStampMethodsFailWhenStoreNotImplemented() { var manager = new UserManager(new NoopUserStore()); Assert.False(manager.SupportsUserSecurityStamp); await Assert.ThrowsAsync(() => manager.UpdateSecurityStamp("bogus")); await Assert.ThrowsAsync(() => manager.GetSecurityStamp("bogus")); await Assert.ThrowsAsync( () => manager.VerifyChangePhoneNumberToken("bogus", "1", "111-111-1111")); await Assert.ThrowsAsync( () => manager.GenerateChangePhoneNumberToken("bogus", "111-111-1111")); } [Fact] public async Task LoginMethodsFailWhenStoreNotImplemented() { var manager = new UserManager(new NoopUserStore()); Assert.False(manager.SupportsUserLogin); await Assert.ThrowsAsync(async () => await manager.AddLogin("bogus", null)); await Assert.ThrowsAsync(async () => await manager.RemoveLogin("bogus", null)); await Assert.ThrowsAsync(async () => await manager.GetLogins("bogus")); await Assert.ThrowsAsync(async () => await manager.Find(null)); } [Fact] public async Task ClaimMethodsFailWhenStoreNotImplemented() { var manager = new UserManager(new NoopUserStore()); Assert.False(manager.SupportsUserClaim); await Assert.ThrowsAsync(async () => await manager.AddClaim("bogus", null)); await Assert.ThrowsAsync(async () => await manager.RemoveClaim("bogus", null)); await Assert.ThrowsAsync(async () => await manager.GetClaims("bogus")); } [Fact] public async Task TwoFactorStoreMethodsFailWhenStoreNotImplemented() { var manager = new UserManager(new NoopUserStore()); Assert.False(manager.SupportsUserTwoFactor); await Assert.ThrowsAsync(async () => await manager.GetTwoFactorEnabled("bogus")); await Assert.ThrowsAsync(async () => await manager.SetTwoFactorEnabled("bogus", true)); } [Fact] public async Task LockoutStoreMethodsFailWhenStoreNotImplemented() { var manager = new UserManager(new NoopUserStore()); Assert.False(manager.SupportsUserLockout); await Assert.ThrowsAsync(async () => await manager.GetLockoutEnabled("bogus")); await Assert.ThrowsAsync(async () => await manager.SetLockoutEnabled("bogus", true)); await Assert.ThrowsAsync(async () => await manager.AccessFailed("bogus")); await Assert.ThrowsAsync(async () => await manager.IsLockedOut("bogus")); await Assert.ThrowsAsync(async () => await manager.ResetAccessFailedCount("bogus")); await Assert.ThrowsAsync(async () => await manager.GetAccessFailedCount("bogus")); } [Fact] public async Task RoleMethodsFailWhenStoreNotImplemented() { var manager = new UserManager(new NoopUserStore()); Assert.False(manager.SupportsUserRole); await Assert.ThrowsAsync(async () => await manager.AddToRole("bogus", null)); await Assert.ThrowsAsync(async () => await manager.GetRoles("bogus")); await Assert.ThrowsAsync(async () => await manager.RemoveFromRole("bogus", null)); await Assert.ThrowsAsync(async () => await manager.IsInRole("bogus", "bogus")); } [Fact] public void DisposeAfterDisposeDoesNotThrow() { var manager = new UserManager(new NoopUserStore()); manager.Dispose(); manager.Dispose(); } [Fact] public async Task PasswordValidatorBlocksCreate() { // TODO: Can switch to Mock eventually var manager = new UserManager(new EmptyStore()) { PasswordValidator = new BadPasswordValidtor() }; IdentityResultAssert.IsFailure(await manager.Create(new TestUser(), "password"), BadPasswordValidtor.ErrorMessage); } [Fact] public async Task ManagerPublicNullChecks() { Assert.Throws("store", () => new UserManager((IUserStore) null)); Assert.Throws("serviceProvider", () => new UserManager((IServiceProvider)null)); var manager = new UserManager(new NotImplementedStore()); Assert.Throws(() => manager.ClaimsIdentityFactory = null); Assert.Throws(() => manager.PasswordHasher = null); await Assert.ThrowsAsync("user", async () => await manager.CreateIdentity(null, "whatever")); await Assert.ThrowsAsync("user", async () => await manager.Create(null)); await Assert.ThrowsAsync("user", async () => await manager.Create(null, null)); await Assert.ThrowsAsync("password", async () => await manager.Create(new TestUser(), null)); await Assert.ThrowsAsync("user", async () => await manager.Update(null)); await Assert.ThrowsAsync("user", async () => await manager.Delete(null)); await Assert.ThrowsAsync("claim", async () => await manager.AddClaim("bogus", null)); await Assert.ThrowsAsync("userName", async () => await manager.FindByName(null)); await Assert.ThrowsAsync("userName", async () => await manager.Find(null, null)); await Assert.ThrowsAsync("login", async () => await manager.AddLogin("bogus", null)); await Assert.ThrowsAsync("login", async () => await manager.RemoveLogin("bogus", null)); await Assert.ThrowsAsync("email", async () => await manager.FindByEmail(null)); Assert.Throws("twoFactorProvider", () => manager.RegisterTwoFactorProvider(null, null)); Assert.Throws("provider", () => manager.RegisterTwoFactorProvider("bogus", null)); } [Fact] public async Task MethodsFailWithUnknownUserTest() { var manager = new UserManager(new EmptyStore()) { UserTokenProvider = new NoOpTokenProvider() }; const string error = "UserId not found."; await ExceptionAssert.ThrowsAsync( async () => await manager.AddClaim(null, new Claim("a", "b")), error); await ExceptionAssert.ThrowsAsync( async () => await manager.AddLogin(null, new UserLoginInfo("", "")), error); await ExceptionAssert.ThrowsAsync( async () => await manager.AddPassword(null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.AddToRole(null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.ChangePassword(null, null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.GetClaims(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.GetLogins(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.GetRoles(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.IsInRole(null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.RemoveClaim(null, new Claim("a", "b")), error); await ExceptionAssert.ThrowsAsync( async () => await manager.RemoveLogin(null, new UserLoginInfo("", "")), error); await ExceptionAssert.ThrowsAsync( async () => await manager.RemovePassword(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.RemoveFromRole(null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.UpdateSecurityStamp(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.GetSecurityStamp(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.HasPassword(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.GeneratePasswordResetToken(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.ResetPassword(null, null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.IsEmailConfirmed(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.GenerateEmailConfirmationToken(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.ConfirmEmail(null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.GetEmail(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.SetEmail(null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.IsPhoneNumberConfirmed(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.ChangePhoneNumber(null, null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.VerifyChangePhoneNumberToken(null, null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.GetPhoneNumber(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.SetPhoneNumber(null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.GetTwoFactorEnabled(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.SetTwoFactorEnabled(null, true), error); await ExceptionAssert.ThrowsAsync( async () => await manager.GenerateTwoFactorToken(null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.VerifyTwoFactorToken(null, null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.NotifyTwoFactorToken(null, null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.GetValidTwoFactorProviders(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.VerifyUserToken(null, null, null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.AccessFailed(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.ResetAccessFailedCount(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.GetAccessFailedCount(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.GetLockoutEnabled(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.SetLockoutEnabled(null, false), error); await ExceptionAssert.ThrowsAsync( async () => await manager.SetLockoutEndDate(null, DateTimeOffset.UtcNow), error); await ExceptionAssert.ThrowsAsync( async () => await manager.GetLockoutEndDate(null), error); await ExceptionAssert.ThrowsAsync( async () => await manager.IsLockedOut(null), error); } [Fact] public async Task MethodsThrowWhenDisposedTest() { var manager = new UserManager(new NoopUserStore()); manager.Dispose(); Assert.Throws(() => manager.ClaimsIdentityFactory); await Assert.ThrowsAsync(() => manager.AddClaim("bogus", null)); await Assert.ThrowsAsync(() => manager.AddLogin("bogus", null)); await Assert.ThrowsAsync(() => manager.AddPassword("bogus", null)); await Assert.ThrowsAsync(() => manager.AddToRole("bogus", null)); await Assert.ThrowsAsync(() => manager.ChangePassword("bogus", null, null)); await Assert.ThrowsAsync(() => manager.GetClaims("bogus")); await Assert.ThrowsAsync(() => manager.GetLogins("bogus")); await Assert.ThrowsAsync(() => manager.GetRoles("bogus")); await Assert.ThrowsAsync(() => manager.IsInRole("bogus", null)); await Assert.ThrowsAsync(() => manager.RemoveClaim("bogus", null)); await Assert.ThrowsAsync(() => manager.RemoveLogin("bogus", null)); await Assert.ThrowsAsync(() => manager.RemovePassword("bogus")); await Assert.ThrowsAsync(() => manager.RemoveFromRole("bogus", null)); await Assert.ThrowsAsync(() => manager.RemoveClaim("bogus", null)); await Assert.ThrowsAsync(() => manager.Find("bogus", null)); await Assert.ThrowsAsync(() => manager.Find(null)); await Assert.ThrowsAsync(() => manager.FindById(null)); await Assert.ThrowsAsync(() => manager.FindByName(null)); await Assert.ThrowsAsync(() => manager.Create(null)); await Assert.ThrowsAsync(() => manager.Create(null, null)); await Assert.ThrowsAsync(() => manager.CreateIdentity(null, null)); await Assert.ThrowsAsync(() => manager.Update(null)); await Assert.ThrowsAsync(() => manager.Delete(null)); await Assert.ThrowsAsync(() => manager.UpdateSecurityStamp(null)); await Assert.ThrowsAsync(() => manager.GetSecurityStamp(null)); await Assert.ThrowsAsync(() => manager.GeneratePasswordResetToken(null)); await Assert.ThrowsAsync(() => manager.ResetPassword(null, null, null)); await Assert.ThrowsAsync(() => manager.GenerateEmailConfirmationToken(null)); await Assert.ThrowsAsync(() => manager.IsEmailConfirmed(null)); await Assert.ThrowsAsync(() => manager.ConfirmEmail(null, null)); } private class BadPasswordValidtor : IPasswordValidator { public const string ErrorMessage = "I'm Bad."; public Task Validate(string password, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(IdentityResult.Failed(ErrorMessage)); } } private class EmptyStore : IUserPasswordStore, IUserClaimStore, IUserLoginStore, IUserEmailStore, IUserPhoneNumberStore, IUserLockoutStore, IUserTwoFactorStore, IUserRoleStore, IUserSecurityStampStore { public Task> GetClaims(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult>(new List()); } public Task AddClaim(TestUser user, Claim claim, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task RemoveClaim(TestUser user, Claim claim, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task SetEmail(TestUser user, string email, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task GetEmail(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(""); } public Task GetEmailConfirmed(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(false); } public Task SetEmailConfirmed(TestUser user, bool confirmed, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task FindByEmail(string email, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(null); } public Task GetLockoutEndDate(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(DateTimeOffset.MinValue); } public Task SetLockoutEndDate(TestUser user, DateTimeOffset lockoutEnd, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task IncrementAccessFailedCount(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task ResetAccessFailedCount(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task GetAccessFailedCount(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task GetLockoutEnabled(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(false); } public Task SetLockoutEnabled(TestUser user, bool enabled, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task AddLogin(TestUser user, UserLoginInfo login, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task RemoveLogin(TestUser user, UserLoginInfo login, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task> GetLogins(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult>(new List()); } public Task Find(UserLoginInfo login, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(null); } public void Dispose() { } public Task Create(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task Update(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task Delete(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task FindById(string userId, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(null); } public Task FindByName(string userName, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(null); } public Task SetPasswordHash(TestUser user, string passwordHash, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task GetPasswordHash(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(null); } public Task HasPassword(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(false); } public Task SetPhoneNumber(TestUser user, string phoneNumber, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task GetPhoneNumber(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(""); } public Task GetPhoneNumberConfirmed(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(false); } public Task SetPhoneNumberConfirmed(TestUser user, bool confirmed, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task AddToRole(TestUser user, string roleName, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task RemoveFromRole(TestUser user, string roleName, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task> GetRoles(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult>(new List()); } public Task IsInRole(TestUser user, string roleName, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(false); } public Task SetSecurityStamp(TestUser user, string stamp, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task GetSecurityStamp(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(""); } public Task SetTwoFactorEnabled(TestUser user, bool enabled, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task GetTwoFactorEnabled(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(false); } } private class NoOpTokenProvider : IUserTokenProvider { public Task Generate(string purpose, UserManager manager, TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult("Test"); } public Task Validate(string purpose, string token, UserManager manager, TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(true); } public Task Notify(string token, UserManager manager, TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(0); } public Task IsValidProviderForUser(UserManager manager, TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { return Task.FromResult(true); } } private class NotImplementedStore : IUserPasswordStore, IUserClaimStore, IUserLoginStore, IUserEmailStore, IUserPhoneNumberStore, IUserLockoutStore, IUserTwoFactorStore { public Task> GetClaims(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task AddClaim(TestUser user, Claim claim, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task RemoveClaim(TestUser user, Claim claim, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task SetEmail(TestUser user, string email, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task GetEmail(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task GetEmailConfirmed(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task SetEmailConfirmed(TestUser user, bool confirmed, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task FindByEmail(string email, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task GetLockoutEndDate(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task SetLockoutEndDate(TestUser user, DateTimeOffset lockoutEnd, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task IncrementAccessFailedCount(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task ResetAccessFailedCount(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task GetAccessFailedCount(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task GetLockoutEnabled(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task SetLockoutEnabled(TestUser user, bool enabled, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task AddLogin(TestUser user, UserLoginInfo login, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task RemoveLogin(TestUser user, UserLoginInfo login, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task> GetLogins(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task Find(UserLoginInfo login, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public void Dispose() { throw new NotImplementedException(); } public Task Create(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task Update(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task Delete(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task FindById(string userId, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task FindByName(string userName, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task SetPasswordHash(TestUser user, string passwordHash, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task GetPasswordHash(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task HasPassword(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task SetPhoneNumber(TestUser user, string phoneNumber, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task GetPhoneNumber(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task GetPhoneNumberConfirmed(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task SetPhoneNumberConfirmed(TestUser user, bool confirmed, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task SetTwoFactorEnabled(TestUser user, bool enabled, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task GetTwoFactorEnabled(TestUser user, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } } } }