コード例 #1
0
        public async Task CreateCommentTest(KnownChains apiName)
        {
            var user = Users[apiName];

            // Load last created post
            var userPostsRequest = new UserPostsModel(user.Login);

            userPostsRequest.ShowNsfw     = true;
            userPostsRequest.ShowLowRated = true;
            var userPostsResponse = await Api[apiName].GetUserPosts(userPostsRequest, CancellationToken.None);

            AssertResult(userPostsResponse);
            var lastPost = userPostsResponse.Result.Results.First();

            // 2) Create new comment
            // Wait for 20 seconds before commenting
            Thread.Sleep(TimeSpan.FromSeconds(20));
            var createCommentModel    = new CreateOrEditCommentModel(user, lastPost, $"Test comment {DateTime.Now:G}", AppSettings.AppInfo);
            var createCommentResponse = await Api[apiName].CreateOrEditComment(createCommentModel, CancellationToken.None);

            AssertResult(createCommentResponse);
            Assert.That(createCommentResponse.IsSuccess, Is.True);

            // Wait for data to be writed into blockchain
            Thread.Sleep(TimeSpan.FromSeconds(15));

            // Load comments for this post and check them
            var getCommentsRequest = new NamedInfoModel(lastPost.Url);
            var commentsResponse   = await Api[apiName].GetComments(getCommentsRequest, CancellationToken.None);

            AssertResult(commentsResponse);

            Assert.IsNotNull(commentsResponse.Result.Results.FirstOrDefault(i => i.Url.EndsWith(createCommentModel.Permlink)));
        }
コード例 #2
0
        public async Task EditCommentTest(KnownChains apiName)
        {
            // Arrange
            var user             = Users[apiName];
            var userPostsRequest = new UserPostsModel(user.Login);

            userPostsRequest.ShowLowRated = true;
            userPostsRequest.ShowNsfw     = true;
            var userPostsResponse = await Api[apiName].GetUserPosts(userPostsRequest, CancellationToken.None);

            var post = userPostsResponse.Result.Results.FirstOrDefault(i => i.Children > 0);

            Assert.IsNotNull(post);
            var namedRequest = new NamedInfoModel(post.Url);
            var comments     = await Api[apiName].GetComments(namedRequest, CancellationToken.None);
            var comment      = comments.Result.Results.FirstOrDefault(i => i.Author.Equals(user.Login));

            Assert.IsNotNull(comment);

            var editCommentRequest = new CreateOrEditCommentModel(user, post, comment, comment.Body += $" edited {DateTime.Now}", AppSettings.AppInfo);

            var result = await Api[apiName].CreateOrEditComment(editCommentRequest, CancellationToken.None);

            AssertResult(result);
        }
コード例 #3
0
        public async Task <OperationResult <VoidResponse> > CreateOrEditComment(CreateOrEditCommentModel model, CancellationToken ct)
        {
            var results = Validate(model);

            if (results.Any())
            {
                return(new OperationResult <VoidResponse>(new ValidationError(results)));
            }

            if (!model.IsEditMode)
            {
                var bKey = $"{_ditchClient.GetType()}{model.IsNeedRewards}";
                if (_beneficiariesCash.ContainsKey(bKey))
                {
                    model.Beneficiaries = _beneficiariesCash[bKey];
                }
                else
                {
                    var beneficiaries = await GetBeneficiaries(model.IsNeedRewards, ct);

                    if (beneficiaries.IsSuccess)
                    {
                        _beneficiariesCash[bKey] = model.Beneficiaries = beneficiaries.Result.Beneficiaries;
                    }
                }
            }

            var result = await _ditchClient.CreateOrEdit(model, ct);

            //log parent post to perform update
            Trace($"post/@{model.ParentAuthor}/{model.ParentPermlink}/comment", model.Login, result.Error, $"@{model.ParentAuthor}/{model.ParentPermlink}", ct);//.Wait(5000);
            return(result);
        }
コード例 #4
0
        public async Task <OperationResult <VoidResponse> > CreateOrEditComment(CreateOrEditCommentModel model, CancellationToken ct)
        {
            var results = Validate(model);

            if (results != null)
            {
                return(new OperationResult <VoidResponse>(results));
            }

            if (!model.IsEditMode)
            {
                var bKey = _ditchClient.Chain;
                if (_beneficiariesCash.ContainsKey(bKey))
                {
                    model.Beneficiaries = _beneficiariesCash[bKey];
                }
                else
                {
                    var beneficiaries = await GetBeneficiaries(ct);

                    if (beneficiaries.IsSuccess)
                    {
                        _beneficiariesCash[bKey] = model.Beneficiaries = beneficiaries.Result.Beneficiaries;
                    }
                }
            }

            var result = await _ditchClient.CreateOrEdit(model, ct);

            //log parent post to perform update
            await Trace($"post/@{model.ParentAuthor}/{model.ParentPermlink}/comment", model.Login, result.Exception, $"@{model.ParentAuthor}/{model.ParentPermlink}", ct);

            return(result);
        }
コード例 #5
0
        private async Task <ErrorBase> EditComment(CreateOrEditCommentModel model, Post post, CancellationToken ct)
        {
            var response = await Api.CreateOrEditComment(model, ct);

            if (response.IsSuccess)
            {
                post.Body = model.Body;
            }
            return(response.Error);
        }
コード例 #6
0
        public async Task <ErrorBase> TryEditComment(UserInfo userInfo, Post parentPost, Post post, string body, IAppInfo appInfo)
        {
            if (string.IsNullOrEmpty(body) || parentPost == null || post == null)
            {
                return(null);
            }

            var model = new CreateOrEditCommentModel(userInfo, parentPost, post, body, appInfo);
            var error = await TryRunTask(EditComment, OnDisposeCts.Token, model, post);

            NotifySourceChanged(nameof(TryEditComment), true);
            return(error);
        }
コード例 #7
0
        public async Task CreateComment_20_Seconds_Delay(KnownChains apiName)
        {
            // Arrange
            var user             = Users[apiName];
            var userPostsRequest = new UserPostsModel(user.Login);

            userPostsRequest.ShowLowRated = true;
            userPostsRequest.ShowNsfw     = true;
            var userPostsResponse = await Api[apiName].GetUserPosts(userPostsRequest, CancellationToken.None);
            var lastPost          = userPostsResponse.Result.Results.First();
            var body = $"Test comment {DateTime.Now:G}";
            var createCommentModel = new CreateOrEditCommentModel(Users[apiName], lastPost, body, AppSettings.AppInfo);

            // Act
            var response1 = await Api[apiName].CreateOrEditComment(createCommentModel, CancellationToken.None);
            var response2 = await Api[apiName].CreateOrEditComment(createCommentModel, CancellationToken.None);

            // Assert
            AssertResult(response1);
            AssertResult(response2);
            Assert.That(response2.Error.Message.Contains("You may only comment once every 20 seconds.") || response2.Error.Message.Contains("Duplicate transaction check failed"), response2.Error.Message);
        }
コード例 #8
0
        private void CreateCommentTest(StringBuilder sb, int num)
        {
            sb.Append($"{num}) CreateCommentTest : ");
            StepFinished?.Invoke(sb.ToString());

            // Load last created post
            var getPosts = new PostsModel(PostType.New)
            {
                Login = _user.Login
            };

            var postsResp = _api.GetPosts(getPosts, CancellationToken.None)
                            .Result;

            if (!postsResp.IsSuccess)
            {
                sb.AppendLine($"fail. Reason:{Environment.NewLine} {postsResp.Error.Message}");
                return;
            }
            if (postsResp.Result.Results.Count == 0)
            {
                sb.AppendLine("fail. Reason:{Environment.NewLine} There are no Posts!");
                return;
            }

            var testPost = postsResp.Result.Results.First();
            var req      = new CreateOrEditCommentModel(_user, testPost, "Hi, I am a bot for testing Ditch api, please ignore this comment.", _appInfo);
            var rez      = _api.CreateOrEditComment(req, CancellationToken.None)
                           .Result;

            if (!UrlHelper.TryCastUrlToAuthorAndPermlink(testPost.Url, out var parentAuthor, out var parentPermlink))
            {
                sb.AppendLine($"fail. Reason:{Environment.NewLine} url to permlink cast.");
                return;
            }

            var permlink = OperationHelper.CreateReplyPermlink(_user.Login, parentAuthor, parentPermlink);

            if (!rez.IsSuccess)
            {
                sb.AppendLine($"fail. Reason:{Environment.NewLine} {rez.Error.Message}");
                return;
            }

            Task.Delay(10000);

            var getComm = new NamedInfoModel(testPost.Url)
            {
                Offset = permlink, Limit = 1
            };
            var verifyPostresp = _api.GetComments(getComm, CancellationToken.None)
                                 .Result;

            if (!verifyPostresp.IsSuccess)
            {
                sb.AppendLine($"fail. Reason:{Environment.NewLine} {verifyPostresp.Error.Message}");
                return;
            }
            if (verifyPostresp.Result.Results.Count != 1)
            {
                sb.AppendLine($"fail. Reason:{Environment.NewLine} Comment ({permlink}) not found!");
                return;
            }

            sb.AppendLine("pass.");
        }
コード例 #9
0
 private async Task <OperationResult <VoidResponse> > CreateComment(CreateOrEditCommentModel model, CancellationToken ct)
 {
     return(await Api.CreateOrEditComment(model, ct));
 }
コード例 #10
0
        public async Task <OperationResult <VoidResponse> > TryCreateComment(Post parentPost, string body)
        {
            var model = new CreateOrEditCommentModel(AppSettings.User.UserInfo, parentPost, body, AppSettings.AppInfo);

            return(await TryRunTask <CreateOrEditCommentModel, VoidResponse>(CreateComment, OnDisposeCts.Token, model));
        }