public IHttpActionResult PutNewsRecord(int id, NewsRecordBindingModel model)
        {
            var newsRecord = repo.GetAll().FirstOrDefault(n => n.Id == id);

            if (newsRecord == null)
            {
                return this.NotFound();
            }

            newsRecord.Title = model.Title;
            newsRecord.Content = model.Content;
            newsRecord.PublishDate = DateTime.Now;

            repo.Update(newsRecord);
            repo.SaveChanges();

            return this.Ok(newsRecord);
        }
        public void Modify_Existing_Data_Should_Update_The_Data()
        {
            var mockRepo = new Mock<IRepository<NewsRecord>>();
            var news = new List<NewsRecord>()
            {
                new NewsRecord
                {
                    Id = 1,
                    Title = "HopHop1",
                    Content = "The hoppy hop",
                    PublishDate = DateTime.Now
                },
                new NewsRecord
                {
                    Id = 2,
                    Title = "HopHop2",
                    Content = "The hoppy hop2",
                    PublishDate = DateTime.Now.AddDays(+5)
                },
                new NewsRecord
                {
                    Id = 3,
                    Title = "HopHop3",
                    Content = "The hoppy hop3",
                    PublishDate = DateTime.Now.AddDays(+10)
                }
            };

            mockRepo.Setup(r => r.Update(It.IsAny<NewsRecord>()))
              .Callback((NewsRecord n) => news[news.FindIndex(x => x.Id == n.Id)] = n);

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

            var newsFromRepo = news.SingleOrDefault(n => n.Title == "HopHop1");
            var newsFromRepoId = newsFromRepo.Id;

            var modifyModel = new NewsRecordBindingModel()
            {
                Title = "Changed Shit",
                Content = "Messy shit",
            };

            var response = controller.PutNewsRecord(newsFromRepoId, modifyModel).ExecuteAsync(CancellationToken.None).Result;

            var newsAfterUpdate = news.SingleOrDefault(n => n.Id == newsFromRepo.Id);

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            Assert.AreEqual("Changed Shit", newsAfterUpdate.Title);
        }
        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);
        }