public void Create_News_With_Correct_Data_Should_Return_201Created_Add_News_In_Repo_And_Return_News()
        {
            // Arrange
            var newNews = new NewsBindingModel
            {
                Title = "Title 10",
                Content = "Content 1010101010",
                PublishDate = new DateTime(2015, 9, 1)
            };

            var mockContext = new Mock<INewsData>();
            mockContext.Setup(c => c.News)
                .Returns(this.mock.NewsRepositoryMock.Object);

            var newsController = new NewsController(mockContext.Object);
            this.SetupController(newsController);

            // Act
            var response = newsController.PostNews(newNews)
                .ExecuteAsync(CancellationToken.None).Result;

            // Assert
            var fakeNews = this.mock.NewsRepositoryMock.Object.All().ToList();
            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
            mockContext.Verify(c => c.SaveChanges(), Times.Once);
            Assert.AreEqual(6, fakeNews.Count);
            Assert.AreEqual(newNews.Title, fakeNews[5].Title);
            Assert.AreEqual(newNews.Content, fakeNews[5].Content);
            Assert.AreEqual(newNews.PublishDate, fakeNews[5].PublishDate);
        }
        public void Creating_News_Should_Create_And_Return_The_News()
        {
            var news = new List<Models.News>();

            _mocks.NewsRepoMock
                .Setup(r => r.Add(It.IsAny<Models.News>()))
                .Callback((Models.News n) => { news.Add(n); });

            var fakeNews = new NewsBindingModel
            {
                Title = "Sample title",
                Content = "Sample content",
                PublishedOn = DateTime.Now
            };

            var mockContext = new Mock<INewsData>();

            mockContext.Setup(c => c.News)
                .Returns(_mocks.NewsRepoMock.Object);

            var newsController = new NewsController(mockContext.Object);
            SetupController(newsController);

            var response = newsController.PostNews(fakeNews).ExecuteAsync(CancellationToken.None).Result;

            var newsResponse = response.Content.ReadAsAsync<NewsBindingModel>().Result;

            Assert.AreEqual(response.StatusCode, HttpStatusCode.Created);

            mockContext.Verify(c => c.SaveChanges(), Times.Once);

            Assert.AreEqual(news.Count, 1);

            //It's something
            Assert.AreEqual(fakeNews.Title, newsResponse.Title);
        }
        public void Creating_News_With_Incorrect_Data_Should_Return_BadRequest()
        {
            var news = new List<Models.News>();

            _mocks.NewsRepoMock
                .Setup(r => r.Add(It.IsAny<Models.News>()))
                .Callback((Models.News n) => { news.Add(n); });

            var fakeNews = new NewsBindingModel
            {
                Title = null,
                Content = null,
                PublishedOn = DateTime.Now
            };

            var mockContext = new Mock<INewsData>();

            mockContext.Setup(c => c.News)
                .Returns(_mocks.NewsRepoMock.Object);

            var newsController = new NewsController(mockContext.Object);
            SetupController(newsController);

            var response = newsController.PostNews(fakeNews).ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(response.StatusCode, HttpStatusCode.BadRequest);

            mockContext.Verify(c => c.SaveChanges(), Times.Never);
        }
        public void Add_Correct_NewsRecord_Should_Add_NewsRecord_to_DB()
        {
            var mockRepo = new Mock<IRepository<NewsRecord>>();
            var news = new List<NewsRecord>()
            {
                new NewsRecord()
                {
                    Title = "HopHop1",
                    Content = "The hoppy hop",
                    PublishDate = DateTime.Now
                },
                new NewsRecord()
                {
                    Title = "HopHop2",
                    Content = "The hoppy hop2",
                    PublishDate = DateTime.Now.AddDays(+5)
                },
                new NewsRecord()
                {
                    Title = "HopHop3",
                    Content = "The hoppy hop3",
                    PublishDate = DateTime.Now.AddDays(+10)
                }
            };

            mockRepo.Setup(r => r.Add(It.IsNotNull<NewsRecord>()))
                .Callback((NewsRecord n) => news.Add(n));

            var controller = new NewsController(mockRepo.Object);
            this.SetupController(controller, "NewsController");

            var newsToPost = new NewsRecordBindingModel()
            {
                Title = "Lets see",
                Content = "Messy shit",
            };

            var response = controller.PostNews(newsToPost).ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
            Assert.IsTrue(news.Count == 4);
            Assert.AreEqual("Messy shit", news.Last().Content);
            Assert.AreEqual(newsToPost.Title, news.Last().Title);
            Assert.IsNotNull(news.Last().PublishDate);
        }
        public void Add_InCorrect_NewsRecord_Should_Throw_Exception()
        {
            var mockRepo = new Mock<IRepository<NewsRecord>>();
            var news = new List<NewsRecord>()
            {
                new NewsRecord()
                {
                    Title = "HopHop1",
                    Content = "The hoppy hop",
                    PublishDate = DateTime.Now
                },
                new NewsRecord()
                {
                    Title = "HopHop2",
                    Content = "The hoppy hop2",
                    PublishDate = DateTime.Now.AddDays(+5)
                },
                new NewsRecord()
                {
                    Title = "HopHop3",
                    Content = "The hoppy hop3",
                    PublishDate = DateTime.Now.AddDays(+10)
                }
            };

            mockRepo.Setup(r => r.Add(It.IsNotNull<NewsRecord>()))
                .Callback((NewsRecord n) => news.Add(n));

            var controller = new NewsController(mockRepo.Object);
            this.SetupController(controller, "NewsController");
            controller.ModelState.AddModelError("key", "error message");

            var newsToPost = new NewsRecordBindingModel()
            {
                Title = "",
                Content = "Messy shit",
            };

            var response = controller.PostNews(newsToPost).ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
        public void Create_News_With_InCorrect_Data_Should_Return_400BadRequest()
        {
            // Arrange
            var newNews = new NewsBindingModel
            {
                Title = "T", // invalid MinLength
                Content = "Content 1010101010",
                PublishDate = new DateTime(2015, 9, 1)
            };

            var mockContext = new Mock<INewsData>();
            mockContext.Setup(c => c.News)
                .Returns(this.mock.NewsRepositoryMock.Object);

            var newsController = new NewsController(mockContext.Object);
            this.SetupController(newsController);
            newsController.ModelState.AddModelError("Title", "Title MinLength is 5.");

            // Act
            var response = newsController.PostNews(newNews)
                .ExecuteAsync(CancellationToken.None).Result;

            // Assert
            var fakeNews = this.mock.NewsRepositoryMock.Object.All().ToList();
            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
            mockContext.Verify(c => c.SaveChanges(), Times.Never);
            Assert.AreEqual(5, fakeNews.Count);
        }