CreateImpersonationService(IUserInfo testUser, ImpersonationOptions options = null)
        {
            options ??= new ImpersonationOptions();
            var httpContextAccessor         = new FakeHttpContextAccessor(testUser?.IsUserRecognized == true ? testUser.UserName : null);
            var dataProtectionProvider      = new FakeDataProtectionProvider();
            BaseAuthentication baseUserInfo = new BaseAuthentication(new RhetosAspNetCoreIdentityUser(httpContextAccessor));

            var log = new List <string>();

            void logMonitor(EventType eventType, string eventName, Func <string> message) => log.Add($"[{eventType}] {eventName}: {message()}");

            var logProvider = new ConsoleLogProvider(logMonitor);

            var impersonationService = new ImpersonationService(httpContextAccessor, dataProtectionProvider, logProvider, options ?? new ImpersonationOptions(), baseUserInfo);

            return(impersonationService, httpContextAccessor, log);
        }
 public HomeController(ImpersonationService impersonationService, IWebHostEnvironment environment)
 {
     _impersonationService = impersonationService;
     _environment          = environment;
 }