Beispiel #1
0
        public async Task ExecuteRuleAsyncShouldReturnErrorResultWithTimeoutIfRuleTakesTooLongToExecute([Frozen] IGetsRuleContext contextFactory,
                                                                                                        [RuleContext] RuleContext context,
                                                                                                        [ExecutableModel] ExecutableRule rule,
                                                                                                        SingleRuleExecutor sut)
        {
            var timeout = TimeSpan.FromMilliseconds(100);

            Mock.Get(rule.RuleLogic).Setup(x => x.GetTimeout()).Returns(timeout);
            Mock.Get(rule.RuleLogic)
            .Setup(x => x.GetResultAsync(It.IsAny <object>(), It.IsAny <object>(), It.IsAny <RuleContext>(), It.IsAny <CancellationToken>()))
            .Returns(() => Task.Run(async() => {
                await Task.Delay(200);
                return(CommonResults.Pass());
            }));
            Mock.Get(contextFactory).Setup(x => x.GetRuleContext(rule)).Returns(context);

            var result = await sut.ExecuteRuleAsync(rule);

            Assert.Multiple(() =>
            {
                Assert.That(result.Outcome, Is.EqualTo(RuleOutcome.Errored), "Result has error outcome");
                Assert.That(result.Data, Does.ContainKey(RuleResult.RuleTimeoutDataKey), "Result has a rule-timeout data key");

                if (result.Data.TryGetValue(RuleResult.RuleTimeoutDataKey, out var timeoutData))
                {
                    Assert.That(timeoutData, Is.EqualTo(timeout), "Timeout data is equal");
                }
            });
        }
Beispiel #2
0
        public static async Task <Result> HandleGetMethodErrors(this HttpResponseMessage responseMessage)
        {
            try
            {
                if (responseMessage.StatusCode == HttpStatusCode.Unauthorized)
                {
                    return(CommonResults.UnauthorizedResult("Unauthorized", "دوبازه لاگین کنید"));
                }

                else if (responseMessage.StatusCode == HttpStatusCode.Forbidden)
                {
                    return(CommonResults.ForbiddenResult("Forbidden", "شما دسترسی به همه امکانات را ندارید"));
                }

                var responseBody = await responseMessage.Content.ReadAsStringAsync();

                if (responseBody != null)
                {
                    return(JsonConvert.DeserializeObject <Result>(responseBody));
                }
                //else if (responseBody == null && responseMessage.StatusCode == HttpStatusCode.NotFound)
                //{
                //    return CommonResults.NotFoundResult("Not Found", "یافت نشد");
                //}

                return(CommonResults.BadRequestResult("unknown", "خطا"));
            }
            catch (Exception)
            {
                return(CommonResults.ConnectionLostResult("Network problem", "ارتباط شما با سرور قطع شده است"));
            }
        }
Beispiel #3
0
        public async Task <Result> AccountConfirmedOTP(int randomNumber)
        {
            try
            {
                var email = await _currentUser.GetEmail();

                OTPConfirmationModel otpModel = new()
                {
                    RandomNumber = randomNumber,
                    Email        = email
                };

                var loginAsJson = JsonConvert.SerializeObject(otpModel);

                var response = await httpClient.PostAsync("api/v1/OAuth/AccountOTPConfirmation",
                                                          new StringContent(loginAsJson, Encoding.UTF8, "application/json"));

                var loginResult = JsonConvert.DeserializeObject <AuthenticationResult>(await response.Content.ReadAsStringAsync());

                if (!response.IsSuccessStatusCode)
                {
                    return(Result.Failure(loginResult.EnError, loginResult.FaError));
                }

                await SetAuthentication(loginResult.Token, loginResult.RefreshToken);

                return(Result.Success());
            }
            catch (Exception)
            {
                return(CommonResults.InternalServerError("Internal Server Error", "سرور در حال بارگذاری می باشد"));
            }
        }
Beispiel #4
0
        public async Task <Result> ForgotPasswordOTPConfirmation(int randomNumber)
        {
            try
            {
                var email = await _currentUser.GetEmail();

                OTPConfirmationModel model = new()
                {
                    RandomNumber = randomNumber,
                    Email        = email
                };

                var usernameAsJson = JsonConvert.SerializeObject(model);

                var response = await httpClient.PostAsync("api/v1/OAuth/ForgotPasswordOTPConfirmation",
                                                          new StringContent(usernameAsJson, Encoding.UTF8, "application/json"));

                await _currentUser.SetEmail(model.Email);

                return(await response.DeserializeResponseMessageStatus());
            }
            catch (Exception)
            {
                return(CommonResults.InternalServerError("Internal Server Error", "سرور در حال بارگذاری می باشد"));
            }
        }
        public async Task <Result> AuthorizePutAsync <T>(T command, string rout)
        {
            try
            {
                var token = await _currentUser.GetAuthToken();

                var modelAsJson = JsonConvert.SerializeObject(command);

                var requestMessage = new HttpRequestMessage(HttpMethod.Put, rout);

                requestMessage.Headers.Authorization
                    = new AuthenticationHeaderValue("Bearer", token);

                requestMessage.Content = new StringContent(modelAsJson);

                requestMessage.Content.Headers.ContentType
                    = new MediaTypeHeaderValue("application/json");

                var response = await _httpClient.SendAsync(requestMessage);

                return(response.DeserializeResponseMessageStatus().Result);
            }
            catch (Exception)
            {
                return(CommonResults.InternalServerError("Internal Server Error", "سرور در حال بارگذاری می باشد"));
            }
        }
Beispiel #6
0
        public async Task <Result> RefreshTokenAsync()
        {
            try
            {
                var refreshToken = new RefreshTokenModel()
                {
                    RefreshToken = await _currentUser.GetAuthRefreshToken(),
                    Token        = await _currentUser.GetAuthToken()
                };
                var loginAsJson = JsonConvert.SerializeObject(refreshToken);

                var response = await httpClient.PostAsync("api/v1/OAuth/RefreshToken",
                                                          new StringContent(loginAsJson, Encoding.UTF8, "application/json"));

                var result = JsonConvert.DeserializeObject <AuthenticationResult>(await response.Content.ReadAsStringAsync());

                if (!response.IsSuccessStatusCode)
                {
                    return(Result.Failure(result.EnError, result.FaError));
                }

                await SetAuthentication(result.Token, result.RefreshToken);

                return(Result.Success());
            }
            catch (Exception)
            {
                return(CommonResults.InternalServerError("Internal Server Error", "سرور در حال بارگذاری می باشد"));
            }
        }
Beispiel #7
0
        /// <summary>
        /// 获取所有视频
        /// </summary>
        /// <returns></returns>
        public async Task <CommonResults <VideoListDto> > GetAll()
        {
            var result = new CommonResults <VideoListDto>();

            try
            {
                var videos = await _context.Videos.Select(v => new VideoListDto
                {
                    Id    = v.Id,
                    Name  = v.Title,
                    Image = v.Img
                }).ToArrayAsync();

                result.scode   = "200";
                result.remark  = "查询数据成功";
                result.results = videos;
                return(result);
            }
            catch (Exception ex)
            {
                result.scode  = "500";
                result.remark = "服务器端错误:" + ex.Message;
                return(result);
            }
        }
        public async Task <Result> Delete(T entity)
        {
            context.Remove(entity);

            var affectedRows = await SaveChangesAsync();

            return(affectedRows > 0 ? Result.Ok() : CommonResults.EntityNotFoundToRemove <T>(entity.Id));
        }
        public async Task <Result <T> > GetById(int id)
        {
            var entity = await context.Set <T>().FindAsync(id);

            if (entity == null)
            {
                return(CommonResults.NotFound <T>(id));
            }

            return(Result.Ok(entity));
        }
        public async Task <Result> Delete(int id)
        {
            // TODO: Avoid getting from database or add constraint new()
            var entity = await GetByIdOrNull(id);

            if (entity == null)
            {
                return(CommonResults.EntityNotFoundToRemove <T>(id));
            }

            return(await Delete(entity));
        }
        public async Task <Result> Delete(int entityId)
        {
            if (data.TryRemove(entityId, out T entity))
            {
                logger.LogTrace($"#{entityId} removed");

                return(Result.Ok());
            }

            logger.LogTrace($"#{entityId} not found");

            return(CommonResults.EntityNotFoundToRemove <T>(entityId));
        }
        static async Task <RuleResult> WaitForResultAsync(Task <RuleResult> ruleTask, CancellationToken combinedToken, TimeSpan?timeout)
        {
            if (!timeout.HasValue)
            {
                return(await ruleTask.ConfigureAwait(false));
            }

            if (await Task.WhenAny(ruleTask, Task.Delay(timeout.Value, combinedToken)).ConfigureAwait(false) == ruleTask)
            {
                return(await ruleTask.ConfigureAwait(false));
            }

            return(CommonResults.Error(data: new Dictionary <string, object> {
                { RuleResult.RuleTimeoutDataKey, timeout.Value }
            }));
        }
        public async Task <Result> AuthorizePostQueryAsync(string rout)
        {
            try
            {
                var token = await _currentUser.GetAuthToken();

                _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

                var response = await _httpClient.PostAsync(rout, null);

                return(response.DeserializeResponseMessageStatus().Result);
            }
            catch (Exception)
            {
                return(CommonResults.InternalServerError("Internal Server Error", "سرور در حال بارگذاری می باشد"));
            }
        }
Beispiel #14
0
        public static async Task <Result> DeserializeResponseMessageStatus(this HttpResponseMessage responseMessage)
        {
            try
            {
                var responseBody = await responseMessage.Content.ReadAsStringAsync();

                if (responseMessage.StatusCode == HttpStatusCode.Unauthorized)
                {
                    return(CommonResults.UnauthorizedResult("Unauthorized", "دوباره لاگین کنید"));
                }

                return(JsonConvert.DeserializeObject <Result>(responseBody));
            }
            catch (Exception)
            {
                return(CommonResults.ConnectionLostResult("Network problem", "ارتباط شما با سرور قطع شده است"));
            }
        }
Beispiel #15
0
        public void ExecuteRuleAsyncShouldReturnPassResultWithTimeoutIfRuleCompletesInATimelyManner([Frozen] IGetsRuleContext contextFactory,
                                                                                                    [RuleContext] RuleContext context,
                                                                                                    [ExecutableModel] ExecutableRule rule,
                                                                                                    SingleRuleExecutor sut)
        {
            var timeout = TimeSpan.FromMilliseconds(300);

            Mock.Get(rule.RuleLogic).Setup(x => x.GetTimeout()).Returns(timeout);
            Mock.Get(rule.RuleLogic)
            .Setup(x => x.GetResultAsync(It.IsAny <object>(), It.IsAny <object>(), It.IsAny <RuleContext>(), It.IsAny <CancellationToken>()))
            .Returns(() => Task.Run(async() => {
                await Task.Delay(50);
                return(CommonResults.Pass());
            }));
            Mock.Get(contextFactory).Setup(x => x.GetRuleContext(rule)).Returns(context);

            Assert.That(() => sut.ExecuteRuleAsync(rule), Is.PassingValidationResult);
        }
Beispiel #16
0
        public async Task <Result> ResetPassword(string password)
        {
            try
            {
                var email = await _currentUser.GetEmail();

                ResetPasswordModel model = new() { Email = email, Password = password };

                var usernameAsJson = JsonConvert.SerializeObject(model);

                var response = await httpClient.PostAsync("api/v1/OAuth/ResetPassword",
                                                          new StringContent(usernameAsJson, Encoding.UTF8, "application/json"));

                return(await response.DeserializeResponseMessageStatus());
            }
            catch (Exception)
            {
                return(CommonResults.InternalServerError("Internal Server Error", "سرور در حال بارگذاری می باشد"));
            }
        }
Beispiel #17
0
        public async Task <Result> ForgotPassword(ForgotPasswordModel model)
        {
            try
            {
                var usernameAsJson = JsonConvert.SerializeObject(model);

                var response = await httpClient.PostAsync("api/v1/OAuth/ForgotPassword",
                                                          new StringContent(usernameAsJson, Encoding.UTF8, "application/json"));

                var result = await response.DeserializeResponseMessageStatus();;

                if (result.Succeeded)
                {
                    await _currentUser.SetEmail(model.Email);
                }

                return(result);
            }
            catch (Exception)
            {
                return(CommonResults.InternalServerError("Internal Server Error", "سرور در حال بارگذاری می باشد"));
            }
        }
Beispiel #18
0
        public async Task <Result> CreateUserAsync(RegisterModel registerModel)
        {
            try
            {
                var registerAsJson = JsonConvert.SerializeObject(registerModel);

                var response = await httpClient.PostAsync("api/v1/OAuth/Register",
                                                          new StringContent(registerAsJson, Encoding.UTF8, "application/json"));

                var result = JsonConvert.DeserializeObject <Result>(await response.Content.ReadAsStringAsync());

                if (result.Succeeded)
                {
                    await _currentUser.SetEmail(registerModel.Email);
                }

                return(result);
            }
            catch (Exception ex)
            {
                return(CommonResults.InternalServerError("Internal Server Error", "سرور در حال بارگذاری می باشد"));
            }
        }
        public async Task <Result> EnsureExists(int id)
        {
            var exists = await Exists(id);

            return(exists ? Result.Ok() : CommonResults.NotFound <T>(id));
        }
        public async Task <Result <T> > GetById(int id)
        {
            var entity = await GetByIdOrNull(id);

            return(entity == null?CommonResults.NotFound <T>(id) : Result.Ok(entity));
        }