Пример #1
0
        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);
        }
Пример #8
0
        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);
        }