public async Task UserPosts(KnownChains apiName)
        {
            // Arrange
            var user    = Users[apiName];
            var request = new UserPostsModel(user.Login);

            request.ShowNsfw     = true;
            request.ShowLowRated = true;
            // Act
            var response = await Api[apiName].GetUserPosts(request, CancellationToken.None);

            // Assert
            AssertResult(response);
            Assert.That(response.Result.Results, Is.Not.Empty);
            Assert.That(response.Result.Results.First().Body, Is.Not.Empty);
            Assert.That(response.Result.Results.First().Title, Is.Not.Empty);
            Assert.That(response.Result.Results.First().Url, Is.Not.Empty);
            Assert.That(response.Result.Results.First().Category, Is.Not.Empty);
            Assert.That(response.Result.Results.First().Author, Is.Not.Empty);
            Assert.That(response.Result.Results.First().Avatar, Is.Not.Null);
            Assert.That(response.Result.Results.First().AuthorRewards, Is.Not.Null);
            Assert.That(response.Result.Results.First().AuthorReputation, Is.Not.Null);
            Assert.That(response.Result.Results.First().NetVotes, Is.Not.Null);
            Assert.That(response.Result.Results.First().Children, Is.Not.Null);
            Assert.That(response.Result.Results.First().Created, Is.Not.Null);
            Assert.That(response.Result.Results.First().CuratorPayoutValue, Is.Not.Null);
            Assert.That(response.Result.Results.First().TotalPayoutValue, Is.Not.Null);
            Assert.That(response.Result.Results.First().PendingPayoutValue, Is.Not.Null);
            Assert.That(response.Result.Results.First().MaxAcceptedPayout, Is.Not.Null);
            Assert.That(response.Result.Results.First().TotalPayoutReward, Is.Not.Null);
            Assert.That(response.Result.Results.First().Vote, Is.Not.Null);
            Assert.That(response.Result.Results.First().Tags, Is.Not.Empty);
            Assert.That(response.Result.Results.First().Depth, Is.Not.Null);
        }
Exemplo n.º 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);
        }
        public async Task UserPosts_With_User_Some_Votes_True(KnownChains apiName)
        {
            var user    = Users[apiName];
            var request = new UserPostsModel(user.Login)
            {
                Login = user.Login
            };

            request.ShowNsfw     = true;
            request.ShowLowRated = true;
            var voded = false;

            for (var i = 0; i < 10; i++)
            {
                var response = await Api[apiName].GetUserPosts(request, CancellationToken.None);
                AssertResult(response);
                voded = response.Result.Results.Any(x => x.Vote);
                if (voded)
                {
                    break;
                }
                request.Offset = response.Result.Results.Last().Url;
            }

            Assert.IsTrue(voded);
        }
Exemplo n.º 4
0
        public async Task Flag_Down_Already_Flagged(KnownChains apiName)
        {
            // Load last post
            var user             = Users[apiName];
            var userPostsRequest = new UserPostsModel(user.Login);

            userPostsRequest.ShowNsfw     = true;
            userPostsRequest.ShowLowRated = true;
            var posts    = await Api[apiName].GetUserPosts(userPostsRequest, CancellationToken.None);
            var lastPost = posts.Result.Results.First();

            // Arrange
            var request = new VoteModel(Users[apiName], lastPost, VoteType.Down);

            // Act
            var response  = await Api[apiName].Vote(request, CancellationToken.None);
            var response2 = await Api[apiName].Vote(request, CancellationToken.None);

            // Assert
            AssertResult(response2);
            AssertResult(response2);
            Assert.That(response2.Error.Message.Contains("You have already voted in a similar way.") ||
                        response2.Error.Message.Contains("Can only vote once every 3 seconds.") ||
                        response2.Error.Message.Contains("Duplicate transaction check failed") ||
                        response2.Error.Message.Contains("Vote weight cannot be 0.") ||
                        response2.Error.Message.Contains("('Voter has used the maximum number of vote changes on this comment.',)"), response2.Error.Message);
        }
Exemplo n.º 5
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)));
        }
        //base
        private void GetUserPostsTest(StringBuilder sb, int num)
        {
            sb.Append($"{num}) GetUserPostsTest : ");
            StepFinished?.Invoke(sb.ToString());

            var limit   = 3;
            var request = new UserPostsModel(_user.Login)
            {
                ShowNsfw = _user.IsNsfw, ShowLowRated = _user.IsLowRated, Limit = limit
            };
            var response = _api.GetUserPosts(request, CancellationToken.None).Result;

            if (IsError1(sb, limit, response, response.Result.Results.Count))
            {
                return;
            }

            request.Offset = response.Result.Results.Last().Url;
            response       = _api.GetUserPosts(request, CancellationToken.None).Result;

            if (IsError2(sb, limit, response, request.Offset))
            {
                return;
            }

            sb.AppendLine("pass.");
        }
Exemplo n.º 7
0
        public async Task VoteCommentTest(KnownChains apiName)
        {
            var user = Users[apiName];

            // Load last created post
            var userPostsRequest = new UserPostsModel(user.Login)
            {
                ShowLowRated = true, ShowNsfw = true
            };
            var userPostsResponse = await Api[apiName].GetUserPosts(userPostsRequest, CancellationToken.None);

            AssertResult(userPostsResponse);
            var lastPost = userPostsResponse.Result.Results.First(i => i.Children > 0);
            // Load comments for this post and check them
            var getCommentsRequest = new NamedInfoModel(lastPost.Url);
            var commentsResponse   = await Api[apiName].GetComments(getCommentsRequest, CancellationToken.None);

            // 5) Vote up comment
            var post = commentsResponse.Result.Results.First();
            var voteUpCommentRequest  = new VoteModel(user, post, VoteType.Up);
            var voteUpCommentResponse = await Api[apiName].Vote(voteUpCommentRequest, CancellationToken.None);

            AssertResult(voteUpCommentResponse);
            Assert.That(voteUpCommentResponse.Result.IsSuccess, Is.True);
            Assert.That(voteUpCommentResponse.Result.NewTotalPayoutReward, Is.Not.Null);
            Assert.That(voteUpCommentResponse.Result.NewTotalPayoutReward, Is.Not.Null);

            // Wait for data to be writed into blockchain
            Thread.Sleep(TimeSpan.FromSeconds(15));
            getCommentsRequest.Login = user.Login;
            var commentsResponse2 = await Api[apiName].GetComments(getCommentsRequest, CancellationToken.None);

            // Check if last comment was voted
            AssertResult(commentsResponse2);
            var comm = commentsResponse2.Result.Results.FirstOrDefault(i => i.Url.Equals(post.Url, StringComparison.OrdinalIgnoreCase));

            Assert.IsNotNull(comm);
            Assert.That(comm.Vote, Is.True);

            // 6) Vote down comment
            var voteDownCommentRequest  = new VoteModel(user, post, VoteType.Down);
            var voteDownCommentResponse = await Api[apiName].Vote(voteDownCommentRequest, CancellationToken.None);

            AssertResult(voteDownCommentResponse);
            Assert.That(voteDownCommentResponse.Result.IsSuccess, Is.True);
            Assert.That(voteDownCommentResponse.Result.NewTotalPayoutReward, Is.Not.Null);
            Assert.That(voteDownCommentResponse.Result.NewTotalPayoutReward, Is.Not.Null);

            // Wait for data to be writed into blockchain
            Thread.Sleep(TimeSpan.FromSeconds(15));
            getCommentsRequest.Login = user.Login;
            var commentsResponse3 = await Api[apiName].GetComments(getCommentsRequest, CancellationToken.None);

            // Check if last comment was voted
            AssertResult(commentsResponse3);
            comm = commentsResponse3.Result.Results.FirstOrDefault(i => i.Url.Equals(post.Url, StringComparison.OrdinalIgnoreCase));
            Assert.IsNotNull(comm);
            Assert.That(comm.Vote, Is.False);
        }
Exemplo n.º 8
0
 public IActionResult Index()
 {
     if (isLogin)
     {
         ViewData["myPost"] = UserPostsModel.myPostList((int)ViewData["uid"]);
     }
     return(View());
 }
        public async Task UserPosts_Invalid_Username(KnownChains apiName)
        {
            // Arrange
            var user    = Users[apiName];
            var request = new UserPostsModel(user.Login + "x");

            // Act
            var response = await Api[apiName].GetUserPosts(request, CancellationToken.None);

            // Assert
            Assert.That(response.Error.Message.Contains("Cannot get posts for this username"));
        }
        public async Task UserPosts_Without_User_All_Votes_False(KnownChains apiName)
        {
            // Arrange
            var user    = Users[apiName];
            var request = new UserPostsModel(user.Login);

            // Act
            var response = await Api[apiName].GetUserPosts(request, CancellationToken.None);

            // Assert
            AssertResult(response);
            Assert.That(response.Result.Results.Where(x => x.Vote).Any, Is.False);
        }
Exemplo n.º 11
0
        public async Task GetUserPostsTest(KnownChains apiName)
        {
            var user = Users[apiName];

            var request = new UserPostsModel(user.Login)
            {
                ShowNsfw     = true,
                ShowLowRated = true
            };

            var result = await Gateway[apiName].GetUserPosts(request, CancellationToken.None);

            Assert.IsTrue(result.IsSuccess, result.Error?.Message);
        }
Exemplo n.º 12
0
        public ActionResult Update(int id, PostModel model)
        {
            using (var context = new foodiesEntities1())
            {
                // Fetch existing entity
                var thePostToUpdate = context.Posts.FirstOrDefault(m => m.PostID == id);

                // Update entity based on model
                thePostToUpdate.PostTitle = model.PostTitle;

                // Save Changes
                context.SaveChanges();
            }

            var model2 = new UserPostsModel();

            List <Post> postList = null;

            // Use EF to get MemeModels from the Database
            // Unit of Work
            using (var context = new foodiesEntities1())
            {
                // Fetch the Meme Entities!
                postList = context.Posts.Select(m => m).ToList();
            }

            if (postList != null)
            {
                // Convert Meme Entities to Meme Models
                foreach (var post in postList)
                {
                    model2.UserPosts.Add(new PostModel()
                    {
                        PostID    = post.PostID,
                        PostTitle = post.PostTitle,
                        PostURL   = post.PostURL
                    });
                }
            }
            return(RedirectToAction("Gallery"));
        }
Exemplo n.º 13
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);
        }
        private async Task <ErrorBase> LoadNextPosts(CancellationToken ct)
        {
            var request = new UserPostsModel(UserName)
            {
                Login        = AppSettings.User.Login,
                Offset       = OffsetUrl,
                Limit        = string.IsNullOrEmpty(OffsetUrl) ? ItemsLimit : ItemsLimit + 1,
                ShowNsfw     = AppSettings.User.IsNsfw,
                ShowLowRated = AppSettings.User.IsLowRated
            };

            ErrorBase error;
            bool      isNeedRepeat;

            do
            {
                var response = await Api.GetUserPosts(request, ct);

                isNeedRepeat = ResponseProcessing(response, ItemsLimit, out error, nameof(TryLoadNextPosts));
            } while (isNeedRepeat);

            return(error);
        }
Exemplo n.º 15
0
        public ActionResult Gallery(PostModel model)
        {
            var userId = User.Identity.GetUserId();

            var userEmail = UserManager.GetEmail(userId);

            var model2 = new UserPostsModel();

            List <Post> postList = null;

            // Use EF to get MemeModels from the Database
            // Unit of Work
            using (var context = new foodiesEntities1())
            {
                var user = context.DaPrUsers.FirstOrDefault(m => m.UserEmail == userEmail);

                // Fetch the Meme Entities!
                postList = context.Posts.Where(m => m.UserID == user.UserID).ToList();
            }

            if (postList != null)
            {
                // Convert Meme Entities to Meme Models
                foreach (var post in postList)
                {
                    model2.UserPosts.Add(new PostModel()
                    {
                        PostID    = post.PostID,
                        PostTitle = post.PostTitle,
                        PostURL   = post.PostURL,
                        IsVideo   = post.IsVideo
                    });
                }
            }

            return(View(model2));
        }
Exemplo n.º 16
0
        public async Task <OperationResult <ListResponse <Post> > > GetUserPosts(UserPostsModel model, CancellationToken token)
        {
            if (!EnableRead)
            {
                return(null);
            }

            var results = Validate(model);

            if (results.Any())
            {
                return(new OperationResult <ListResponse <Post> >(new ValidationError(string.Join(Environment.NewLine, results.Select(i => i.ErrorMessage)))));
            }

            var parameters = new Dictionary <string, object>();

            AddOffsetLimitParameters(parameters, model.Offset, model.Limit);
            AddLoginParameter(parameters, model.Login);
            AddCensorParameters(parameters, model);

            var endpoint = $"user/{model.Username}/posts";

            return(await Gateway.Get <ListResponse <Post> >(GatewayVersion.V1P1, endpoint, parameters, token));
        }
        public async Task UserPosts_Offset_Limit(KnownChains apiName)
        {
            var user    = Users[apiName];
            var request = new UserPostsModel(user.Login)
            {
                Limit        = 10,
                ShowLowRated = true,
                ShowNsfw     = true
            };

            var response = await Api[apiName].GetUserPosts(request, CancellationToken.None);

            AssertResult(response);
            Assert.IsTrue(response.Result.Count == request.Limit);
            request.Offset = response.Result.Results[5].Url;

            response = await Api[apiName].GetUserPosts(request, CancellationToken.None);

            Assert.IsTrue(response.Result.Results != null);
            var url = response.Result.Results.First().Url;

            Assert.IsFalse(string.IsNullOrEmpty(url));
            Assert.IsTrue(url.Equals(request.Offset));
        }
Exemplo n.º 18
0
        public async Task <OperationResult <ListResponse <Post> > > GetUserPosts(UserPostsModel model, CancellationToken token)
        {
            if (!EnableRead)
            {
                return(null);
            }

            var results = Validate(model);

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

            var parameters = new Dictionary <string, object>();

            AddOffsetLimitParameters(parameters, model.Offset, model.Limit);
            AddLoginParameter(parameters, model.Login);
            AddCensorParameters(parameters, model);

            var endpoint = $"{BaseUrl}/{GatewayVersion.V1P1}/user/{model.Username}/posts";

            return(await HttpClient.Get <ListResponse <Post> >(endpoint, parameters, token));
        }
Exemplo n.º 19
0
 public HomeController(IApiRepo apiRepo, UserPostsModel userPostsModel)
 {
     _apiRepo        = apiRepo;
     _userPostsModel = userPostsModel;
 }