// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Text; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Moq; namespace Microsoft.AspNetCore.Identity.Test { public static class MockHelpers { public static StringBuilder LogMessage = new StringBuilder(); public static Mock> MockUserManager() where TUser : class { var store = new Mock>(); var mgr = new Mock>(store.Object, null, null, null, null, null, null, null, null); mgr.Object.UserValidators.Add(new UserValidator()); mgr.Object.PasswordValidators.Add(new PasswordValidator()); return mgr; } public static Mock> MockRoleManager(IRoleStore store = null) where TRole : class { store = store ?? new Mock>().Object; var roles = new List>(); roles.Add(new RoleValidator()); return new Mock>(store, roles, null, null, null, null); } public static Mock> MockILogger(StringBuilder logStore = null) where T : class { logStore = logStore ?? LogMessage; var logger = new Mock>(); logger.Setup(x => x.Log(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny>())) .Callback((LogLevel logLevel, EventId eventId, object state, Exception exception, Func formatter) => { if (formatter == null) { logStore.Append(state.ToString()); } else { logStore.Append(formatter(state, exception)); } logStore.Append(" "); }); logger.Setup(x => x.BeginScope(It.IsAny())).Callback((object state) => { logStore.Append(state.ToString()); logStore.Append(" "); }); logger.Setup(x => x.IsEnabled(LogLevel.Debug)).Returns(true); logger.Setup(x => x.IsEnabled(LogLevel.Warning)).Returns(true); return logger; } public static UserManager TestUserManager(IUserStore store = null) where TUser : class { store = store ?? new Mock>().Object; var options = new Mock>(); var idOptions = new IdentityOptions(); idOptions.Lockout.AllowedForNewUsers = false; options.Setup(o => o.Value).Returns(idOptions); var userValidators = new List>(); var validator = new Mock>(); userValidators.Add(validator.Object); var pwdValidators = new List>(); pwdValidators.Add(new PasswordValidator()); var userManager = new UserManager(store, options.Object, new PasswordHasher(), userValidators, pwdValidators, new UpperInvariantLookupNormalizer(), new IdentityErrorDescriber(), null, new Mock>>().Object); validator.Setup(v => v.ValidateAsync(userManager, It.IsAny())) .Returns(Task.FromResult(IdentityResult.Success)).Verifiable(); return userManager; } public static RoleManager TestRoleManager(IRoleStore store = null) where TRole : class { store = store ?? new Mock>().Object; var roles = new List>(); roles.Add(new RoleValidator()); return new RoleManager(store, roles, new UpperInvariantLookupNormalizer(), new IdentityErrorDescriber(), null, null); } } }