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))); }
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); }
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); }
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); }
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); }
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); }
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); }
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."); }
private async Task <OperationResult <VoidResponse> > CreateComment(CreateOrEditCommentModel model, CancellationToken ct) { return(await Api.CreateOrEditComment(model, ct)); }
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)); }