private ThreadDetailsViewModel GetModel(IReadOnlyCollection <Section> sections, IReadOnlyCollection <Commentary> comments, Thread thread, int likesAmount, int likeStatus) { var sectionModels = sections.Select(s => new SectionViewModel { SectionName = s.Name }).ToList(); var commentsModels = comments.OrderByDescending(c => c.CommentTime).Select(c => new CommentThreadViewModel { AuthorNickname = c.Author.Username, CommentTime = c.CommentTime, Content = c.Content }).ToList(); var threadModel = new ThreadViewModel { ThreadId = thread.Id, AuthorNickname = thread.Author.Username, Content = thread.Content, Title = thread.Title }; var isAuthor = User.Identity.IsAuthenticated ? thread.Author.Username == User.Identity.Name : false; var model = new ThreadDetailsViewModel { LikesAmount = likesAmount, LikeStatus = likeStatus, IsAuthor = isAuthor, Sections = sectionModels, Comments = commentsModels, Thread = threadModel }; return(model); }
public static string GetUri(this ThreadDetailsViewModel threadDetailsViewModel, IUrlHelper urlHelper) { return(urlHelper.Action("Details", "Threads", new { categoryAlias = threadDetailsViewModel.CategoryAlias, threadId = threadDetailsViewModel.Id, })); }
public void CallDeleteThread_OnActivation() { // Arrange _target = new ThreadDetailsViewModel(1, _schedulerService, _viewStackService.Object, _threadServiceMock.Object, commentService: _commentServiceMock.Object); // Act _target.Activator.Activate(); // Assert _threadServiceMock.Verify(x => x.Delete(1), Times.AtMostOnce); }
public void GetComments_UpdatesTheCommentsCache() { // Arrange _target = new ThreadDetailsViewModel(1, _schedulerService, _viewStackService.Object, _threadServiceMock.Object, commentService: _commentServiceMock.Object); // Act Observable.Return(25).InvokeCommand(_target.GetComments); _schedulerService.AdvanceBy(1000); // Assert _commentServiceMock.Verify(x => x.GetComments(1, 25), Times.AtLeastOnce); }
public void CallDeleteComment_OnActivation() { // Arrange _target = new ThreadDetailsViewModel(1, _schedulerService, _viewStackService.Object, _threadServiceMock.Object, commentService: _commentServiceMock.Object); // Act Observable.Return(25).InvokeCommand(_target.GetComments); _schedulerService.AdvanceBy(1000); // Assert _commentServiceMock.Verify(x => x.Delete(1), Times.AtMostOnce); }
public void AddCommand_ShouldBeEnabled_IfCommentTextIsNotEmpty() { // Arrange _target = new ThreadDetailsViewModel(1, _schedulerService, _viewStackService.Object, _threadServiceMock.Object, commentService: _commentServiceMock.Object); // Act _target.Activator.Activate(); _target.CommentText = "Comment text 1"; _schedulerService.AdvanceBy(1000); // Assert _target.AddComment.CanExecute.Subscribe(canExecute => Assert.IsTrue(canExecute)); }
public void WhenExecuted_CheckIfPopPageIsCalled() { // Arrange _target = new ThreadDetailsViewModel(1, _schedulerService, _viewStackService.Object, _threadServiceMock.Object, commentService: _commentServiceMock.Object); // _target.Title = "Title"; // _target.Content = "Content"; // Act Observable.Return(Unit.Default).InvokeCommand(_target.DeleteThread); // Assert _threadServiceMock .Verify(x => x.Delete( It.IsAny <int>()), Times.Once); }
public ActionResult Details(int? id, int? NumberOfPosts, int? NoOfPage) { // Create local variables int TotalNumberOfPostsInThread; PostContext PostContextDB; ThreadDetailsViewModel ThreadDetails; // Check if id of the topic was send properly if (id == null) { Response.StatusCode = (int)HttpStatusCode.BadRequest; } Thread thread = db.Thread.Find(id); if (thread == null) { Response.StatusCode = (int)HttpStatusCode.NotFound; } // Get total number of posts ThreadDetails = new ThreadDetailsViewModel(); PostContextDB = new PostContext(); TotalNumberOfPostsInThread = PostContextDB.Post.Where(x => x.CorrespondingTopicID == id).Count(); // Compute the amount of records needed if (NumberOfPosts == null || NumberOfPosts <= 0) ThreadDetails.NumberOfPostsToDisplay = 10; else ThreadDetails.NumberOfPostsToDisplay = (int)NumberOfPosts; // Compute the page number if (NoOfPage == null) { ThreadDetails.NumberOfPageToDisplay = (int)Math.Floor(Convert.ToDouble(TotalNumberOfPostsInThread / ThreadDetails.NumberOfPostsToDisplay)); ThreadDetails.IsLast = true; ThreadDetails.IsFirst = false; ThreadDetails.NumberOfPostsToDisplay = TotalNumberOfPostsInThread - ThreadDetails.NumberOfPageToDisplay * ThreadDetails.NumberOfPostsToDisplay; } else if (NoOfPage < 0 || NoOfPage >= (int)Math.Floor(Convert.ToDouble(TotalNumberOfPostsInThread / ThreadDetails.NumberOfPostsToDisplay))) { ThreadDetails.NumberOfPageToDisplay = (int)Math.Floor(Convert.ToDouble(TotalNumberOfPostsInThread / ThreadDetails.NumberOfPostsToDisplay)); ThreadDetails.IsLast = true; ThreadDetails.IsFirst = false; ThreadDetails.NumberOfPostsToDisplay = TotalNumberOfPostsInThread - ThreadDetails.NumberOfPageToDisplay * ThreadDetails.NumberOfPostsToDisplay; } else if (NoOfPage == 0) { ThreadDetails.NumberOfPageToDisplay = 0; ThreadDetails.IsLast = false; ThreadDetails.IsFirst = true; } else { ThreadDetails.NumberOfPageToDisplay = (int)NoOfPage; ThreadDetails.IsLast = false; ThreadDetails.IsFirst = false; } // Create instances of PostContext and ThreadDetailsViewModel ThreadDetails.ListOfCorrespondingPosts = PostContextDB.Post.Where(x => x.CorrespondingTopicID == id).OrderBy(x => x.CreationDate).ToList().GetRange(ThreadDetails.NumberOfPageToDisplay * ThreadDetails.NumberOfPostsToDisplay, ThreadDetails.NumberOfPostsToDisplay); ThreadDetails.ThreadID = (int)id; return View(ThreadDetails); }