public async Task Get_Token_By_Refresh_Token_Mongo_Test()
        {
            // Arrange
            DatabaseOptions databaseOptions = _context.MongoDatabaseOptions;
            IOptionsMonitor <DatabaseOptions> databaseOptionsMock = Mock.Of <IOptionsMonitor <DatabaseOptions> >(_ => _.CurrentValue == databaseOptions);

#pragma warning disable CA2000 // Dispose objects before losing scope
            IssuedTokenMongoRepository issuedTokenRepository = new IssuedTokenMongoRepository(new MongoConnection(databaseOptionsMock.CurrentValue));
#pragma warning restore CA2000 // Dispose objects before losing scope

            // Act
            IssuedToken issuedToken = new IssuedToken
            {
                Id = DataUtil.GenerateUniqueId(),
                ExpiredJwtToken     = DateTime.UtcNow.AddDays(30),
                ExpiredRefreshToken = DateTime.UtcNow.AddDays(30),
                JwtToken            = "abcy2",
                RefreshToken        = "xyzy1",
                UserId        = "5c06a15e4cc9a850bca44488",
                UserSessionId = DataUtil.GenerateUniqueId()
            };
            await issuedTokenRepository.AddAsync(issuedToken);

            string token = await issuedTokenRepository.GetTokenByRefreshToken("xyzy1");

            issuedTokenRepository.Dispose();
            // Assert
            Assert.True(token == "abcy2");
        }
        private InternalIdentityServiceProvider GetIdentityServiceProvider()
        {
            JwtBearerOptions jwtOptions = new JwtBearerOptions
            {
                Audience = "LetPortal",
                Issuer   = "letportal.app",
                RefreshTokenExpiration = 45,
                TokenExpiration        = 30,
                Secret = "9f3acfa82146f5e4a7dabf17c2b63f538c0bcffb8872e889367df2e2c23cef94"
            };

            IOptionsMonitor <JwtBearerOptions> mockJwtOptions = Mock.Of <IOptionsMonitor <JwtBearerOptions> >(_ => _.CurrentValue == jwtOptions);

            DatabaseOptions databaseOptions = _context.MongoDatabaseOptions;
            IOptionsMonitor <DatabaseOptions> databaseOptionsMock = Mock.Of <IOptionsMonitor <DatabaseOptions> >(_ => _.CurrentValue == databaseOptions);

#pragma warning disable CA2000 // Dispose objects before losing scope
            IssuedTokenMongoRepository issuedTokenRepository = new IssuedTokenMongoRepository(new MongoConnection(databaseOptionsMock.CurrentValue));
            UserSessionMongoRepository userSessionRepository = new UserSessionMongoRepository(new MongoConnection(databaseOptionsMock.CurrentValue));
            RoleMongoRepository        roleRepository        = new RoleMongoRepository(new MongoConnection(databaseOptionsMock.CurrentValue));
#pragma warning restore CA2000 // Dispose objects before losing scope

            Mock <IEmailServiceProvider> mockEmailServiceProvider = new Mock <IEmailServiceProvider>();
            mockEmailServiceProvider
            .Setup(a => a.SendEmailAsync(It.IsAny <EmailEnvelop>(), It.IsAny <EmailOptions>()))
            .Returns(Task.CompletedTask);
            Mock <IServiceLogger <InternalIdentityServiceProvider> > mockServiceLogger = new Mock <IServiceLogger <InternalIdentityServiceProvider> >();

#pragma warning disable CA2000 // Dispose objects before losing scope
            UserManager <User> userManager = GetUserManager();
#pragma warning restore CA2000 // Dispose objects before losing scope
            InternalIdentityServiceProvider internalISProvider = new InternalIdentityServiceProvider(
                userManager,
                GetSignInManager(userManager),
#pragma warning disable CA2000 // Dispose objects before losing scope
                roleManager: GetRoleManager(),
#pragma warning restore CA2000 // Dispose objects before losing scope
                mockJwtOptions,
                issuedTokenRepository,
                userSessionRepository,
                roleRepository,
                mockEmailServiceProvider.Object,
                mockServiceLogger.Object);

            return(internalISProvider);
        }