public override async Task StoreAsync(string key, RefreshToken value)
        {
            ExecuteInTransaction(session =>
            {
                var token = session
                            .Query <Token>()
                            .SingleOrDefault(t => t.Key == key && t.TokenType == TokenType);

                if (token == null)
                {
                    token = new Token
                    {
                        Key       = key,
                        SubjectId = value.SubjectId,
                        ClientId  = value.ClientId,
                        TokenType = TokenType
                    };

                    session.Save(token);
                }

                token.JsonCode = ConvertToJson(value);
                token.Expiry   = value.CreationTime.UtcDateTime.AddSeconds(value.LifeTime);

                session.Update(token);
            });

            await TaskExtensions.CompletedTask;
        }
        public async Task RemoveAsync()
        {
            //Arrange
            var sut      = new AuthorizationCodeStore(NhibernateSession, ScopeStoreMock.Object, ClientStoreMock.Object);
            var testKey  = Guid.NewGuid().ToString();
            var testCode = ObjectCreator.GetAuthorizationCode();

            var nhCode = new Token
            {
                Key       = testKey,
                SubjectId = testCode.SubjectId,
                ClientId  = testCode.ClientId,
                JsonCode  = ConvertToJson(testCode),
                Expiry    = DateTime.UtcNow.AddSeconds(testCode.Client.AuthorizationCodeLifetime),
                TokenType = TokenType.AuthorizationCode
            };

            ExecuteInTransaction(session =>
            {
                session.Save(nhCode);
            });

            //Act
            await sut.RemoveAsync(testKey);

            //Assert
            ExecuteInTransaction(session =>
            {
                var token = session.Query <Token>()
                            .SingleOrDefault(t => t.TokenType == TokenType.AuthorizationCode &&
                                             t.Key == testKey);

                Assert.Null(token);
            });
        }
        public override async Task StoreAsync(string key, AuthorizationCode code)
        {
            var nhCode = new Token
            {
                Key       = key,
                SubjectId = code.SubjectId,
                ClientId  = code.ClientId,
                JsonCode  = ConvertToJson(code),
                Expiry    = DateTime.UtcNow.AddSeconds(code.Client.AuthorizationCodeLifetime),
                TokenType = this.TokenType
            };

            ExecuteInTransaction(session =>
            {
                session.Save(nhCode);
            });

            await TaskExtensions.CompletedTask;
        }
        public async Task GetAsync()
        {
            //Arrange
            var sut      = new AuthorizationCodeStore(NhibernateSession, ScopeStoreMock.Object, ClientStoreMock.Object);
            var testKey  = Guid.NewGuid().ToString();
            var testCode = ObjectCreator.GetAuthorizationCode();

            var nhCode = new Token
            {
                Key       = testKey,
                SubjectId = testCode.SubjectId,
                ClientId  = testCode.ClientId,
                JsonCode  = ConvertToJson(testCode),
                Expiry    = DateTime.UtcNow.AddSeconds(testCode.Client.AuthorizationCodeLifetime),
                TokenType = TokenType.AuthorizationCode
            };

            SetupScopeStoreMock();

            ExecuteInTransaction(session =>
            {
                session.Save(nhCode);
            });

            //Act
            var token = await sut.GetAsync(testKey);

            //Assert
            Assert.NotNull(token);

            //CleanUp
            ExecuteInTransaction(session =>
            {
                session.Delete(nhCode);
                session.Clear();
            });
        }
        public async Task GetAllAsync()
        {
            //Arrange
            var sut        = new AuthorizationCodeStore(NhibernateSession, ScopeStoreMock.Object, ClientStoreMock.Object);
            var subjectId1 = Guid.NewGuid().ToString();
            var subjectId2 = Guid.NewGuid().ToString();

            var testKey1  = Guid.NewGuid().ToString();
            var testCode1 = ObjectCreator.GetAuthorizationCode(subjectId1);
            var nhCode1   = new Token
            {
                Key       = testKey1,
                SubjectId = testCode1.SubjectId,
                ClientId  = testCode1.ClientId,
                JsonCode  = ConvertToJson(testCode1),
                Expiry    = DateTime.UtcNow.AddSeconds(testCode1.Client.AuthorizationCodeLifetime),
                TokenType = TokenType.AuthorizationCode
            };

            var testKey2  = Guid.NewGuid().ToString();
            var testCode2 = ObjectCreator.GetAuthorizationCode(subjectId1);
            var nhCode2   = new Token
            {
                Key       = testKey2,
                SubjectId = testCode2.SubjectId,
                ClientId  = testCode2.ClientId,
                JsonCode  = ConvertToJson(testCode2),
                Expiry    = DateTime.UtcNow.AddSeconds(testCode2.Client.AuthorizationCodeLifetime),
                TokenType = TokenType.AuthorizationCode
            };

            var testKey3  = Guid.NewGuid().ToString();
            var testCode3 = ObjectCreator.GetAuthorizationCode(subjectId2);
            var nhCode3   = new Token
            {
                Key       = testKey3,
                SubjectId = testCode3.SubjectId,
                ClientId  = testCode3.ClientId,
                JsonCode  = ConvertToJson(testCode3),
                Expiry    = DateTime.UtcNow.AddSeconds(testCode3.Client.AuthorizationCodeLifetime),
                TokenType = TokenType.AuthorizationCode
            };

            var testKey4  = Guid.NewGuid().ToString();
            var testCode4 = ObjectCreator.GetAuthorizationCode(subjectId2);
            var nhCode4   = new Token
            {
                Key       = testKey4,
                SubjectId = testCode4.SubjectId,
                ClientId  = testCode4.ClientId,
                JsonCode  = ConvertToJson(testCode4),
                Expiry    = DateTime.UtcNow.AddSeconds(testCode4.Client.AuthorizationCodeLifetime),
                TokenType = TokenType.AuthorizationCode
            };

            SetupScopeStoreMock();

            ExecuteInTransaction(session =>
            {
                session.Save(nhCode1);
                session.Save(nhCode2);
                session.Save(nhCode3);
                session.Save(nhCode4);
            });

            //Act
            var tokens = (await sut.GetAllAsync(subjectId1)).ToList();

            //Assert
            Assert.True(tokens.Count == 2);
            Assert.True(tokens.All(t => t.SubjectId == subjectId1));

            //CleanUp
            ExecuteInTransaction(session =>
            {
                session.Delete(nhCode1);
                session.Delete(nhCode2);
                session.Delete(nhCode3);
                session.Delete(nhCode4);
            });
        }