public void Modifying_Non_Existing_News_Should_Return_BadRequest()
        {
            var updatedNews = new NewsBindingModel
            {
                Title = "Update",
                Content = "Update",
                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.UpdateNews(100000, updatedNews).ExecuteAsync(CancellationToken.None).Result;

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

            mockContext.Verify(c => c.SaveChanges(), Times.Never);
        }
        public void Modify_Existing_News_Item_With_Correct_Data_Modifies_The_Item()
        {
            var updatedNews = new NewsBindingModel
            {
                Title = "Update",
                Content = "Update",
                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.UpdateNews(1,updatedNews).ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(response.StatusCode, HttpStatusCode.OK);
            
            mockContext.Verify(c => c.SaveChanges(), Times.Once);
        }
        public void TestModifyUnexistingNews()
        {
            var controller = new NewsController(repoMock.Object);
            SetupController(controller, "News");

            repoMock.Setup(repo => repo.Find(It.IsAny<object>())).Returns(null as News);

            var updatedNews = new NewsBindingModel { Title = "Zaglavie", Content = "Changed content" };
            var result = controller.UpdateNews(18, updatedNews).ExecuteAsync(new CancellationToken()).Result;
            Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode);
        }
        public void TestModifyValidNews()
        {
            var controller = new NewsController(repoMock.Object);
            SetupController(controller, "News");

            var news = new News { Id = 18, Title = "Zaglavie", Content = "dadadada" };
            repoMock.Setup(repo => repo.Find(It.IsAny<object>())).Returns(news);

            var updatedNews = new NewsBindingModel { Title = "Zaglavie", Content = "Changed content" };
            var result = controller.UpdateNews(18, updatedNews).ExecuteAsync(new CancellationToken()).Result;
            Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
            var returnedNews = result.Content.ReadAsAsync<News>().Result;
            Assert.AreEqual(updatedNews.Title, returnedNews.Title);
            Assert.AreEqual(updatedNews.Content, returnedNews.Content);
            Assert.AreEqual(news.Title, returnedNews.Title);
        }
        public void TestModifyInvalidNews()
        {
            var controller = new NewsController(repoMock.Object);
            SetupController(controller, "News");

            var news = new News { Id = 18, Title = "Zaglavie", Content = "dadadada" };
            repoMock.Setup(repo => repo.Find(It.IsAny<object>())).Returns(news);

            var invalidNews = new NewsBindingModel { Content = "No title" };

            // it's not the controller's job to validate - there is a validator
            controller.ModelState.AddModelError("Title", "Required");
            var result = controller.UpdateNews(18, invalidNews).ExecuteAsync(new CancellationToken()).Result;
            Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode);
        }