public void Forum_ThreadController_Index_ShouldCallViewModelFactoryWithCorrectData(int atPosition, int expectedId)
        {
            // Arrange
            var data             = new Mock <IUowData>();
            var pagerFactory     = new Mock <IPagerViewModelFactory>();
            var viewModelFactory = new Mock <IViewModelFactory>();

            data.Setup(d => d.Threads.All()).Returns(TestThread().AsQueryable());
            data.Setup(d => d.Answers.All()).Returns(AnswersCollection().AsQueryable);

            Mapper.Initialize(cfg =>
            {
                cfg.CreateMap <Thread, ThreadViewModel>();
                cfg.CreateMap <Answer, AnswerViewModel>();
                cfg.CreateMap <Comment, CommentViewModel>();
            });

            var controller = new ThreadController(data.Object, pagerFactory.Object, viewModelFactory.Object);

            // Act
            var result = controller.Index(1) as ViewResult;

            // Assert
            viewModelFactory.Verify(p => p.CreateForumThreadViewModel(It.Is <ThreadViewModel>(t => t.Id == 1 && t.Published == new DateTime(2017, 01, 01)),
                                                                      It.Is <IEnumerable <AnswerViewModel> >(l => l.ElementAt(atPosition).Id == expectedId), null));
        }
        public void Forum_ThreadController_Index_ShouldCallPagerViewModelFactoryWithCorrectData(int page)
        {
            // Arrange
            var data             = new Mock <IUowData>();
            var pagerFactory     = new Mock <IPagerViewModelFactory>();
            var viewModelFactory = new Mock <IViewModelFactory>();

            data.Setup(d => d.Threads.All()).Returns(TestThread().AsQueryable());
            data.Setup(d => d.Answers.All()).Returns(AnswersCollection().AsQueryable);

            Mapper.Initialize(cfg =>
            {
                cfg.CreateMap <Thread, ThreadViewModel>();
                cfg.CreateMap <Answer, AnswerViewModel>();
                cfg.CreateMap <Comment, CommentViewModel>();
            });

            var controller = new ThreadController(data.Object, pagerFactory.Object, viewModelFactory.Object);

            // Act
            var result = controller.Index(1, page) as ViewResult;

            // Assert
            pagerFactory.Verify(p => p.CreatePagerViewModel("Thread", page, 6, WebConstants.PageSize));
        }
        public void Forum_ThreadController_Index_ShouldReturnBadRequestWhenIdIsNull()
        {
            // Arrange
            var data             = new Mock <IUowData>();
            var pagerFactory     = new Mock <IPagerViewModelFactory>();
            var viewModelFactory = new Mock <IViewModelFactory>();

            ThreadController controller = new ThreadController(data.Object, pagerFactory.Object, viewModelFactory.Object);

            // Act
            HttpStatusCodeResult result = controller.Index(null) as HttpStatusCodeResult;

            // Assert
            Assert.AreEqual(400, result.StatusCode);
        }
        public void Forum_ThreadController_Index_ShouldReturnHttpNotFoundIfThreadNull()
        {
            // Arrange
            var data             = new Mock <IUowData>();
            var pagerFactory     = new Mock <IPagerViewModelFactory>();
            var viewModelFactory = new Mock <IViewModelFactory>();

            data.Setup(d => d.Threads.All()).Returns(new List <Thread>().AsQueryable());
            Mapper.Initialize(cfg => cfg.CreateMap <Thread, ThreadViewModel>());

            var controller = new ThreadController(data.Object, pagerFactory.Object, viewModelFactory.Object);

            // Act
            HttpNotFoundResult result = controller.Index(1) as HttpNotFoundResult;

            // Assert
            Assert.AreEqual(404, result.StatusCode);
        }
        //[Test]
        public void ThreadController_Index_ShouldReturnAnswersEqulToPageSizeAndOrederedByPublishedProperyAtPage2()
        {
            // Arrange
            var data             = new Mock <IUowData>();
            var pagerFactory     = new Mock <IPagerViewModelFactory>();
            var viewModelFactory = new Mock <IViewModelFactory>();

            data.Setup(d => d.Threads.All()).Returns(TestThread().AsQueryable());
            data.Setup(d => d.Answers.All()).Returns(AnswersCollection().AsQueryable);

            var controller = new ThreadController(data.Object, pagerFactory.Object, viewModelFactory.Object);

            var expected = new List <Answer>()
            {
                new Answer()
                {
                    Id = 1, IsVisible = true, Published = new DateTime(2017, 01, 04), ThreadId = 1, Content = string.Empty, Comments = new List <Comment>()
                    {
                        new Comment()
                        {
                            Id = 2, IsVisible = false
                        }
                    }
                },
                new Answer()
                {
                    Id = 5, IsVisible = true, Published = new DateTime(2017, 01, 05), ThreadId = 1, Content = string.Empty
                },
                new Answer()
                {
                    Id = 6, IsVisible = true, Published = new DateTime(2017, 01, 06), ThreadId = 1, Content = string.Empty
                }
            };

            // Act
            var result = controller.Index(1, 2) as ViewResult;
            ForumThreadViewModel resultModel = result.Model as ForumThreadViewModel;

            // Assert
            CollectionAssert.AreEqual(expected, resultModel.Answers, new AnswerComparer());
        }
        public void Forum_ThreadController_Index_ShouldReturnCorrectPageViewModelPropertyPageSize(int pageSize)
        {
            // Arrange
            var data                 = new Mock <IUowData>();
            var pagerFactory         = new Mock <IPagerViewModelFactory>();
            var pagerViewModel       = new Mock <IPagerViewModel>();
            var viewModelFactory     = new Mock <IViewModelFactory>();
            var forumThreadViewModel = new Mock <IForumThreadViewModel>();

            data.Setup(d => d.Threads.All()).Returns(TestThread().AsQueryable());
            data.Setup(d => d.Answers.All()).Returns(AnswersCollection().AsQueryable);

            pagerViewModel.Setup(p => p.PageSize).Returns(pageSize);
            pagerFactory.Setup(p => p.CreatePagerViewModel(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>())).Returns(pagerViewModel.Object);
            forumThreadViewModel.Setup(f => f.PagerViewModel).Returns(pagerViewModel.Object);
            forumThreadViewModel.Setup(t => t.Thread).Returns(new ThreadViewModel()
            {
                Id = 1
            });
            viewModelFactory.Setup(v => v.CreateForumThreadViewModel(It.IsAny <ThreadViewModel>(),
                                                                     It.IsAny <IEnumerable <AnswerViewModel> >(), It.IsAny <IPagerViewModel>())).Returns(forumThreadViewModel.Object);

            Mapper.Initialize(cfg =>
            {
                cfg.CreateMap <Thread, ThreadViewModel>();
                cfg.CreateMap <Answer, AnswerViewModel>();
                cfg.CreateMap <Comment, CommentViewModel>();
            });

            var controller = new ThreadController(data.Object, pagerFactory.Object, viewModelFactory.Object);

            // Act
            var result      = controller.Index(1) as ViewResult;
            var resultModel = result.Model as IForumThreadViewModel;

            // Assert
            Assert.AreEqual(pageSize, resultModel.PagerViewModel.PageSize);
        }