public void Read_NotThrowsException_StateIsValid()
        {
            var authorizationCodeKey = new AuthorizationCodeTableEntity
            {
                CodeId = "normal",
            };
            var authorizationCodeRepository = new AuthorizationCodeRepository(TestEnvironment.DBSettings);
            var authorizationCode           = authorizationCodeRepository.Read(authorizationCodeKey);

            Assert.IsNotNull(authorizationCode);
        }
        public void Update_NotThrowsException_StateIsValid()
        {
            var authorizationCodeKey = new AuthorizationCodeTableEntity
            {
                CodeId = "normal",
            };
            var authorizationCodeRepository = new AuthorizationCodeRepository(TestEnvironment.DBSettings);
            var authorizationCode           = authorizationCodeRepository.Read(authorizationCodeKey);

            authorizationCode.UpdateTime = DateUtil.Now;
            Assert.IsTrue(authorizationCodeRepository.Update(authorizationCode));
        }
        /// <inheritdoc/>
        public AuthorizationCode CreateAuthorizationCode(Guid applicationId, Guid accountId)
        {
            if (applicationId == null || applicationId == Guid.Empty)
            {
                throw new ArgumentNullException(nameof(applicationId));
            }

            if (accountId == null || accountId == Guid.Empty)
            {
                throw new ArgumentNullException(nameof(accountId));
            }

            var application = _applicationRepository.Read(new ApplicationTableEntity {
                ApplicationId = applicationId
            });

            if (application == null || application.Status != ApplicationStatus.NORMAL.ToString())
            {
                throw new InvalidOperationException($"Application '{applicationId}' was not found.");
            }

            IList <string> accessTokenScopes = JsonUtil.Deserialize <List <string> >(application.Scopes);

            var now = DateUtil.Now;
            var authorizationCode = new AuthorizationCodeTableEntity
            {
                CodeId        = StringUtil.CreateCode(),
                ApplicationId = applicationId,
                AccountId     = accountId,
                Status        = AuthorizationCodeStatus.NORMAL.ToString(),
                ExpiryTime    = now.AddSeconds(_appSettings.AuthorizationCodeExpiresIn),
                CreateTime    = now,
                UpdateTime    = now,
            };

            _authorizationCodeRepository.Create(authorizationCode);

            var result = new AuthorizationCode
            {
                CodeId        = authorizationCode.CodeId,
                ApplicationId = authorizationCode.ApplicationId,
                AccountId     = authorizationCode.AccountId,
                ExpiryTime    = authorizationCode.ExpiryTime,
                Status        = (AuthorizationCodeStatus)Enum.Parse(typeof(AuthorizationCodeStatus), authorizationCode.Status),
                CreateTime    = authorizationCode.CreateTime,
                UpdateTime    = authorizationCode.UpdateTime,
            };

            return(result);
        }
        public void Create_NotThrowsException_StateIsValid()
        {
            var now = DateUtil.Now;
            var authorizationCode = new AuthorizationCodeTableEntity
            {
                CodeId        = new string('X', 100),
                ApplicationId = Guid.NewGuid(),
                AccountId     = Guid.NewGuid(),
                Status        = AuthorizationCodeStatus.NORMAL.ToString(),
                ExpiryTime    = DateTimeOffset.MaxValue,
                CreateTime    = DateTimeOffset.MaxValue,
                UpdateTime    = DateTimeOffset.MaxValue,
            };
            var authorizationCodeRepository = new AuthorizationCodeRepository(TestEnvironment.DBSettings);

            authorizationCodeRepository.Create(authorizationCode);
        }