public void ThreadEditPresenter_EditThreadShouldSetRightSection()
        {
            var view = new Mock <IThreadEditView>();

            view.SetupAllProperties();
            var forumData         = new Mock <IForumData>();
            var threadsRepository = new Mock <IThreadsRepository>();

            var thread = new Thread()
            {
                Id = 1, IsVisible = true
            };

            forumData.Setup(f => f.ThreadsRepository).Returns(threadsRepository.Object);
            forumData.Setup(f => f.ThreadsRepository.GetThreadById(It.IsAny <int>())).Returns(thread);
            forumData.Setup(f => f.SectionsRepository.GetSectionByName(It.IsAny <string>())).Returns(new Section()
            {
                Name = "Test"
            });

            var presenter = new ThreadEditPresenter(view.Object, forumData.Object);

            var testContent = "TestContent Should be at least 50 characters long!!";

            view.Raise(v => v.EditThread += null, new ThreadEditEventArgs("TestTitle", testContent, "TestSection", 1));

            forumData.Verify(r => r.ThreadsRepository.UpdateThread(It.Is <Thread>(t => t.Section.Name == "Test")), Times.Once);
        }
        public void ThreadEditPresenter_GetThreadShouldGetRighThread()
        {
            var view = new Mock <IThreadEditView>();

            view.SetupAllProperties();
            var forumData = new Mock <IForumData>();

            var presenter = new ThreadEditPresenter(view.Object, forumData.Object);

            var thread = new Thread()
            {
                Id = 1, IsVisible = true
            };
            var answer1 = new Answer()
            {
                Id = 1, IsVisible = true
            };
            var answer2 = new Answer()
            {
                Id = 2, IsVisible = true
            };
            var comment = new Comment()
            {
                Id = 1, IsVisible = true
            };

            answer1.Comments.Add(comment);
            thread.Answers.Add(answer1);
            thread.Answers.Add(answer2);

            var sections = new List <Section>()
            {
                new Section()
                {
                    Name = "Important", Id = 1
                },
                new Section()
                {
                    Name = "Crazy", Id = 2
                }
            };

            forumData.Setup(t => t.ThreadsRepository.GetThreadById(It.Is <int>(x => x == 1))).Returns(thread);
            forumData.Setup(x => x.SectionsRepository.GetAllSections()).Returns(sections.AsQueryable);

            view.Raise(v => v.GetThread += null, view.Object, new GetByIdEventArgs(1));

            Assert.AreEqual(thread, view.Object.Model.Thread);
        }
        public void ThreadEditPresenter_EditThreadShouldThrowIfDbThreadFail()
        {
            var view = new Mock <IThreadEditView>();

            view.SetupAllProperties();
            var forumData         = new Mock <IForumData>();
            var threadsRepository = new Mock <IThreadsRepository>();

            threadsRepository.Setup(t => t.GetThreadById(It.IsAny <int>())).Throws(new Exception());
            var presenter = new ThreadEditPresenter(view.Object, forumData.Object);

            var testContent = "TestContent Should be at least 50 characters long!!";

            Assert.Throws <HttpException>(() => view.Raise(v => v.EditThread += null, new ThreadEditEventArgs("TestTitle", testContent, "TestSection", 1)));
        }
        public void ThreadEditPresenter_GetThreadShouldReturnRightSections()
        {
            var view = new Mock <IThreadEditView>();

            view.SetupAllProperties();
            var forumData = new Mock <IForumData>();

            var thread = new Thread()
            {
                Id = 1, IsVisible = true
            };

            var sections = new List <Section>()
            {
                new Section()
                {
                    Name = "Important", Id = 1
                },
                new Section()
                {
                    Name = "Crazy", Id = 2
                }
            };

            var expected = new List <string>()
            {
                "Important",
                "Crazy"
            };

            forumData.Setup(t => t.ThreadsRepository.GetThreadById(It.Is <int>(x => x == 1))).Returns(thread);
            forumData.Setup(x => x.SectionsRepository.GetAllSections()).Returns(sections.AsQueryable);

            var presenter = new ThreadEditPresenter(view.Object, forumData.Object);

            view.Raise(v => v.GetThread += null, view.Object, new GetByIdEventArgs(1));

            CollectionAssert.AreEqual(expected, view.Object.Model.Sections);
        }
        public void ThreadEditPresenter_EditThreadShouldReturnMessageWhenContentLengthNotInRange(string testContent)
        {
            var view = new Mock <IThreadEditView>();

            view.SetupAllProperties();
            var forumData         = new Mock <IForumData>();
            var threadsRepository = new Mock <IThreadsRepository>();

            var thread = new Thread()
            {
                Id = 1, IsVisible = true
            };

            forumData.Setup(f => f.ThreadsRepository).Returns(threadsRepository.Object);
            forumData.Setup(f => f.ThreadsRepository.GetThreadById(It.IsAny <int>())).Returns(thread);

            var presenter = new ThreadEditPresenter(view.Object, forumData.Object);

            view.Raise(v => v.EditThread += null, new ThreadEditEventArgs("TestTitle", testContent, "TestSection", 1));

            StringAssert.Contains("Content must be between", view.Object.Model.Error);
        }
        public void ThreadEditPresenter_EditThreadShouldThrowIfUpdateThreadFail()
        {
            var view = new Mock <IThreadEditView>();

            view.SetupAllProperties();
            var forumData         = new Mock <IForumData>();
            var threadsRepository = new Mock <IThreadsRepository>();

            var thread = new Thread()
            {
                Id = 1, IsVisible = true
            };

            forumData.Setup(f => f.ThreadsRepository).Returns(threadsRepository.Object);
            forumData.Setup(f => f.ThreadsRepository.GetThreadById(It.IsAny <int>())).Returns(thread);
            forumData.Setup(f => f.SectionsRepository.GetSectionByName(It.IsAny <string>())).Returns(new Section());
            forumData.Setup(t => t.ThreadsRepository.UpdateThread(It.IsAny <Thread>())).Throws(new Exception());

            var presenter = new ThreadEditPresenter(view.Object, forumData.Object);

            var testContent = "TestContent Should be at least 50 characters long!!";

            Assert.Throws <HttpException>(() => view.Raise(v => v.EditThread += null, new ThreadEditEventArgs("TestTitle", testContent, "TestSection", 1)));
        }