Example #1
0
        public void ModifyExistingNewsItemWithCorrectData_ShouldModifyTheNewsItem()
        {
            var controller = new NewsController(this.context);

            this.SetupController(controller);

            var news = new NewsModel
            {
                Id          = 555,
                Title       = "Fire in the motel",
                Content     = "The fire fighters are doing their best.",
                PublishDate = DateTime.Now
            };

            var modifiedNews = new NewsBindingModel
            {
                Title   = "Random title",
                Content = "Random Content"
            };

            this.context.Add(news);

            var response = controller.UpdateNews(555, modifiedNews).ExecuteAsync(CancellationToken.None).Result;
            var newsInDb = controller.GetNews().ExecuteAsync(CancellationToken.None).Result
                           .Content.ReadAsAsync <IEnumerable <NewsModel> >().Result
                           .FirstOrDefault(n => n.Id == news.Id);

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            Assert.AreEqual(modifiedNews.Title, newsInDb.Title);
            Assert.AreEqual(modifiedNews.Content, newsInDb.Content);
        }
Example #2
0
        public IHttpActionResult Edit(int id, NewsBindingModel model)
        {
            var news = this.NewsRepo.All().FirstOrDefault(n => n.Id == id);

            if (news == null)
            {
                return(this.BadRequest("Non-existing news."));
            }

            if (model == null)
            {
                return(this.BadRequest("Enter valid data."));
            }

            if (model.Title != null)
            {
                news.Title = model.Title;
            }

            if (model.Content != null)
            {
                news.Content = model.Content;
            }

            if (model.PublishedDate != null)
            {
                news.PublishedDate = model.PublishedDate;
            }

            this.NewsRepo.SaveChanges();

            return(this.Ok(news));
        }
Example #3
0
        public void ModifyExistingNewsItemWithIncorrectData_ShouldReturnBadRequest()
        {
            var controller = new NewsController(this.context);

            this.SetupController(controller);

            // Forcing validation error
            controller.ModelState.AddModelError("Title", "Title should be atleast 3 symbols.");

            var news = new NewsModel
            {
                Id          = 101,
                Title       = "Fire in the motel",
                Content     = "The fire fighters are doing their best.",
                PublishDate = DateTime.Now
            };

            var modifiedNews = new NewsBindingModel
            {
                Title   = "1",
                Content = "222"
            };

            this.context.Add(news);

            var response = controller.UpdateNews(101, modifiedNews).ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
        public void CreateNews_Should_Successfully_Add_To_Repository()
        {
            var fakeNews = new List<News>();

            this.mocks.NewsRepositoryMock.Setup(r => r.Add(It.IsAny<News>()))
                .Callback((News news) => { fakeNews.Add(news); });

            var newsToAdd = new NewsBindingModel
            {
                Title = "News to add Title.",
                Content = "News to add Content.",
                PublishDate = DateTime.Now.AddDays(-3)
            };

            var response = this.newsController.CreateNews(newsToAdd)
                .ExecuteAsync(CancellationToken.None).Result;
            var createdNews = response.Content.ReadAsAsync<News>().Result;

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            Assert.AreEqual(createdNews.Title, newsToAdd.Title);
            Assert.AreEqual(createdNews.Content, newsToAdd.Content);

            this.mockContext.Verify(c => c.SaveChanges(), Times.Once);
            Assert.AreEqual(1, fakeNews.Count);
        }
Example #5
0
        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);
        }
Example #6
0
        public void TestAddValidNews()
        {
            var controller = new NewsController(repoMock.Object);

            SetupController(controller, "News");

            var news = new List <News>
            {
                new News {
                    Title = "Zaglavie", Content = "dadadada"
                },
                new News {
                    Title = "Asdjoqwe", Content = "asodojk"
                }
            };

            repoMock.Setup(repo => repo.Add(It.IsAny <News>())).Callback((News n) => news.Add(n));

            var newNews = new NewsBindingModel {
                Title = "Teadsad", Content = "koko6ki"
            };
            var result = controller.AddNews(newNews).ExecuteAsync(new CancellationToken()).Result;

            Assert.AreEqual(HttpStatusCode.Created, result.StatusCode);
            Assert.AreEqual(newNews.Title, news.Last().Title);
            Assert.AreEqual(newNews.Content, news.Last().Content);
            Assert.IsNotNull(news.Last().PublishDate);
        }
Example #7
0
        public IHttpActionResult EditMock(int id, NewsBindingModel model)
        {
            var mockNews = MockDb.News().FirstOrDefault(n => n.Id == id);

            if (mockNews == null)
            {
                return(this.BadRequest("Non-existing news."));
            }

            if (model.Title == null && model.Content == null && model.PublishedDate == null)
            {
                return(this.BadRequest("Enter valid data."));
            }

            if (model.Title != null)
            {
                mockNews.Title = model.Title;
            }

            if (model.Content != null)
            {
                mockNews.Content = model.Content;
            }

            if (model.PublishedDate != null)
            {
                mockNews.PublishedDate = model.PublishedDate;
            }

            this.NewsRepo.Update(mockNews);

            return(this.Ok(mockNews));
        }
Example #8
0
        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);
        }
Example #9
0
        public void Modify_Existing_News_With_InCorrect_Data_Should_Return_400BadRequest()
        {
            // Arrange
            var fakeNewsToModify = this.mock.NewsRepositoryMock.Object.All().FirstOrDefault();

            var newNews = new NewsBindingModel
            {
                Title       = "T", // invalid MinLength
                Content     = "Modified content",
                PublishDate = new DateTime(2013, 12, 12)
            };

            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.ChangeNews(fakeNewsToModify.Id, 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(fakeNewsToModify.Title, fakeNews[0].Title);
            Assert.AreEqual(fakeNewsToModify.Content, fakeNews[0].Content);
            Assert.AreEqual(fakeNewsToModify.PublishDate, fakeNews[0].PublishDate);
        }
Example #10
0
        public void Modify_NonExisting_News_Should_Return_400BadRequest()
        {
            // Arrange
            int id = this.GenerateNonExistingId();

            var newNews = new NewsBindingModel
            {
                Title       = "Modified title",
                Content     = "Modified content",
                PublishDate = new DateTime(2013, 12, 12)
            };

            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.ChangeNews(id, newNews)
                           .ExecuteAsync(CancellationToken.None).Result;

            // Assert
            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
            mockContext.Verify(c => c.SaveChanges(), Times.Never);
        }
Example #11
0
        public void Modify_Existing_News_With_Correct_Data_Should_Return_200OK_And_Modify_News_In_Repository()
        {
            // Arrange
            var fakeNewsToModify = this.mock.NewsRepositoryMock.Object.All().FirstOrDefault();

            var newNews = new NewsBindingModel
            {
                Title       = "Modified Title",
                Content     = "Modified content",
                PublishDate = new DateTime(2013, 12, 12)
            };

            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.ChangeNews(fakeNewsToModify.Id, newNews)
                           .ExecuteAsync(CancellationToken.None).Result;

            // Assert
            var fakeNews = this.mock.NewsRepositoryMock.Object.All().ToList();

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            mockContext.Verify(c => c.SaveChanges(), Times.Once);
            Assert.AreEqual(newNews.Title, fakeNews[4].Title);
            Assert.AreEqual(newNews.Content, fakeNews[4].Content);
            Assert.AreEqual(newNews.PublishDate, fakeNews[4].PublishDate);
        }
Example #12
0
        public IHttpActionResult ChangeNews([FromUri] int id, [FromBody] NewsBindingModel model)
        {
            var newsInDb = this.Data.News.All()
                           .FirstOrDefault(n => n.Id == id);

            if (newsInDb == null)
            {
                return(this.BadRequest("There is no news with given id."));
            }

            if (model == null)
            {
                return(this.BadRequest("No parameters to update news."));
            }

            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            newsInDb.Title       = model.Title;
            newsInDb.Content     = model.Content;
            newsInDb.PublishDate = model.PublishDate;

            this.Data.News.Update(newsInDb);
            this.Data.SaveChanges();

            return(this.Ok(newsInDb));
        }
Example #13
0
        public void EditNews_WithCorrectData_ShouldReturn200OkModifiesTheNewsInCorrectWay()
        {
            var news = MockDb.News();

            var mockRepo = new Mock <IRepository <News> >();

            mockRepo.Setup(n => n.Update(It.IsAny <News>())).Callback((News n) => news[CorrectNewsId - 1] = n);

            var controller = new NewsController(mockRepo.Object);

            SetupController(controller, "news");

            var bindigModel = new NewsBindingModel()
            {
                Title         = "Vremeto",
                Content       = "...",
                PublishedDate = DateTime.Now.ToString("D")
            };

            var result = controller.EditMock(CorrectNewsId, bindigModel).ExecuteAsync(new CancellationToken()).Result;

            Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
            Assert.AreEqual(bindigModel.Title, news.First().Title);
            Assert.AreEqual("Moda", news.Last().Title);
            Assert.IsTrue(news.Count == 3);
        }
Example #14
0
        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);
        }
Example #15
0
        // POST api/news
        public IHttpActionResult PostNews(NewsBindingModel model)
        {
            if (model.Title == null)
            {
                return(this.BadRequest("The title cannot be empty."));
            }

            if (model.Content == null)
            {
                return(this.BadRequest("The content cannot be empty."));
            }

            var news = new News
            {
                Title         = model.Title,
                Content       = model.Content,
                PublishedDate = DateTime.Now.ToString("D")
            };

            this.NewsRepo.Add(news);

            this.NewsRepo.SaveChanges();

            return(this.CreatedAtRoute("DefaultApi", new object(), news));
        }
        public IHttpActionResult CreateNews(NewsBindingModel model)
        {
            if (model == null)
            {
                return this.BadRequest("No data provide to create news.");
            }

            if (!this.ModelState.IsValid)
            {
                return this.BadRequest("Invalid news info.");
            }

            var newsToAdd = new News
            {
                Title = model.Title,
                Content = model.Content,
                PublishDate = DateTime.Now
            };

            this.Data.News.Add(newsToAdd);
            this.Data.SaveChanges();

            var newsView = NewsViewModel.CreateMethod(newsToAdd);

            return this.Ok(newsView);
        }
Example #17
0
        public IHttpActionResult PostNews([FromBody] NewsBindingModel m)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (m.Title == null || m.Content == null)
            {
                return(BadRequest());
            }

            var news = new News.Models.News
            {
                Title       = m.Title,
                Content     = m.Content,
                PublishDate = m.PublishedOn
            };

            Data.News.Add(news);

            Data.SaveChanges();

            return(this.Created("PostNews", news));
        }
Example #18
0
        public IHttpActionResult UpdateNews(int id, [FromBody] NewsBindingModel m)
        {
            if (!Data.News.All().Any(n => n.Id == id))
            {
                return(BadRequest("News with the Id specified doesnt exist."));
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (m.Title == null || m.Content == null)
            {
                return(BadRequest());
            }

            var news = Data.News.All().First(n => n.Id == id);

            news.Title       = m.Title;
            news.Content     = m.Content;
            news.PublishDate = m.PublishedOn;

            Data.SaveChanges();

            return(Ok(news));
        }
Example #19
0
        public IHttpActionResult PutUpdateNews([FromUri] int id, [FromBody] NewsBindingModel model)
        {
            if (model == null)
            {
                return(this.BadRequest("Invalid news model"));
            }

            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            var news = this.Data.News.GetById(id);

            if (news == null)
            {
                return(this.BadRequest("No news with id: " + id));
            }

            news.Title       = model.Title;
            news.Content     = model.Content;
            news.PublishDate = model.PublishDate;

            this.Data.SaveChanges();

            var newNews  = this.Data.News.GetById(id);
            var newsView = new NewsViewModel()
            {
                Title       = newNews.Title,
                Content     = newNews.Content,
                PublishData = newNews.PublishDate
            };

            return(this.Ok(newsView));
        }
        public IHttpActionResult UpdateNews(int id, NewsBindingModel newsModel)
        {
            var newsToUpdate = this.NewsData.Find(id);

            if (newsToUpdate == null)
            {
                return(this.BadRequest("There is no such news."));
            }

            if (newsToUpdate.UserId != this.UserIdProvider.GetUserId())
            {
                return(this.Unauthorized());
            }

            if (newsModel == null || !this.ModelState.IsValid)
            {
                return(this.BadRequest("The news title and content are required."));
            }

            newsToUpdate.Title   = newsModel.Title;
            newsToUpdate.Content = newsModel.Content;
            if (newsModel.PublishDate != null)
            {
                newsToUpdate.PublishDate = newsModel.PublishDate.Value;
            }

            this.NewsData.Update(newsToUpdate);
            this.NewsData.SaveChanges();

            return(this.Ok(newsToUpdate));
        }
Example #21
0
        public void PostNews_WithCorrectData_ShouldReturn201CreatedAndCreatedNews()
        {
            var news = MockDb.News();

            var mockRepository = new Mock <IRepository <News> >();

            mockRepository.Setup(r => r.Add(It.IsAny <News>())).Callback((News n) => news.Add(n));

            var controller = new NewsController(mockRepository.Object);

            SetupController(controller, "news");

            var bindigModel = new NewsBindingModel()
            {
                Title         = "Novina",
                Content       = "...",
                PublishedDate = DateTime.Now.ToString("D")
            };

            var result = controller.PostNews(bindigModel).ExecuteAsync(new CancellationToken()).Result;

            Assert.AreEqual(HttpStatusCode.Created, result.StatusCode);
            Assert.AreEqual("Novini", news.First().Title);
            Assert.AreEqual(bindigModel.Title, news.Last().Title);
            Assert.IsTrue(news.Count == 4);
        }
Example #22
0
        public IHttpActionResult PostNewNews([FromBody] NewsBindingModel model)
        {
            if (model == null)
            {
                return(this.BadRequest("Invalid news model"));
            }

            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            var news = new News()
            {
                Content     = model.Content,
                Title       = model.Title,
                PublishDate = model.PublishDate
            };

            this.Data.News.Add(news);
            this.Data.SaveChanges();

            var newsView = new NewsViewModel()
            {
                Title       = news.Title,
                Content     = news.Content,
                PublishData = news.PublishDate
            };

            return(this.Created(Uri.UriSchemeHttp, newsView));
        }
        public IHttpActionResult UpdateNews(int newsId, NewsBindingModel model)
        {
            if (model == null)
            {
                return this.BadRequest("No data provide to update news.");
            }

            if (!this.ModelState.IsValid)
            {
                return this.BadRequest("Invalid news info.");
            }

            var newsToUpdate = this.Data.News.Find(newsId);

            if (newsToUpdate == null)
            {
                return this.BadRequest("No such news.");
            }

            newsToUpdate.Title = model.Title;
            newsToUpdate.Content = model.Content;
            if (model.PublishDate.HasValue)
            {
                newsToUpdate.PublishDate = model.PublishDate.Value;
            }


            this.Data.News.Update(newsToUpdate);
            this.Data.SaveChanges();

            var newsView = NewsViewModel.CreateMethod(newsToUpdate);

            return this.Ok(newsView);
        }
Example #24
0
        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);
        }
Example #25
0
        public void ModifyNonExistingNewsItem_ShouldReturnBadRequest()
        {
            var controller = new NewsController(this.context);

            this.SetupController(controller);

            var modifiedNews = new NewsBindingModel
            {
                Title   = "Fire in the motel",
                Content = "The fire fighters are doing their best."
            };

            var response = controller.UpdateNews(1895, modifiedNews).ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
Example #26
0
        public void TestAddInvalidNews()
        {
            var controller = new NewsController(repoMock.Object);

            SetupController(controller, "News");

            var invalidNews = new NewsBindingModel {
                Title = "No content"
            };

            // it's not the controller's job to validate - there is a validator
            controller.ModelState.AddModelError("Content", "Required");
            var result = controller.AddNews(invalidNews).ExecuteAsync(new CancellationToken()).Result;

            Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode);
        }
Example #27
0
        private void SendPostReq(object sender, System.EventArgs e)
        {
            var title   = FindViewById <EditText>(Resource.Id.editText1);
            var content = FindViewById <EditText>(Resource.Id.editText2);

            var model = new NewsBindingModel
            {
                Title   = title.Text,
                Content = content.Text
            };

            try
            {
                var stringContent = new StringContent(
                    JsonConvert.SerializeObject(model),
                    Encoding.UTF8,
                    "application/json");

                var response = httpClient.PostAsync("http://10.0.2.2:56624/api/News", stringContent)
                               .GetAwaiter()
                               .GetResult();


                if (response.IsSuccessStatusCode)
                {
                    OpenSuccessDialog();
                }
                else
                {
                    var result = response.Content
                                 .ReadAsStringAsync()
                                 .GetAwaiter()
                                 .GetResult();

                    var messageModel = JsonConvert.DeserializeObject <MessageModel>(result);

                    OpenUnSuccessDialog(messageModel.Messages.First());
                }

                title.Text   = string.Empty;
                content.Text = string.Empty;
            }
            catch (Exception ex)
            {
                throw;
            }
        }
Example #28
0
        public void CreatingItemWithIncorrectData_ShouldReturnBadRequest()
        {
            var controller = new NewsController(this.context);

            this.SetupController(controller);

            // Forcing validation error
            controller.ModelState.AddModelError("Title", "Title should be atleast 3 symbols.");

            var newsBindingModel = new NewsBindingModel
            {
                Title   = "1",
                Content = "2222"
            };

            var response = controller.CreateNews(newsBindingModel).ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
Example #29
0
        public IHttpActionResult CreateNews(NewsBindingModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            var news = new NewsModel
            {
                Title       = model.Title,
                Content     = model.Content,
                PublishDate = DateTime.Now
            };

            this.repo.Add(news);
            this.repo.SaveChanges();

            return(this.Created($"api/News/{news.Id}", news));
        }
Example #30
0
        public void EditNews_WithIncorrectData_ShouldReturn400BadRequest()
        {
            var news = MockDb.News();

            var mockRepo = new Mock <IRepository <News> >();

            mockRepo.Setup(n => n.Update(It.IsAny <News>())).Callback((News n) => news[CorrectNewsId - 1] = n);

            var controller = new NewsController(mockRepo.Object);

            SetupController(controller, "news");

            //Incorect data - empty BindigModel
            var bindigModel = new NewsBindingModel();

            var result = controller.EditMock(CorrectNewsId, bindigModel).ExecuteAsync(new CancellationToken()).Result;

            Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode);
        }
Example #31
0
        public ActionResult Add(NewsBindingModel newsModel)
        {
            var imageUrls = newsModel.ImageUrls.Select(url => new ImageUrl()
            {
                Url = url
            }).ToList();
            var news = new News()
            {
                Title   = newsModel.Title,
                Content = newsModel.Content
            };

            this.Data.News.Add(news);
            this.Data.SaveChanges();
            news.ImageUrls = imageUrls;
            this.Data.SaveChanges();


            return(this.RedirectToAction("Details", "News", new { area = "", id = news.Id }));
        }
        public IHttpActionResult AddNews(NewsBindingModel newsModel)
        {
            if (newsModel == null || !this.ModelState.IsValid)
            {
                return(this.BadRequest("The news title and content are required."));
            }

            var newsToAdd = new News
            {
                Title       = newsModel.Title,
                Content     = newsModel.Content,
                PublishDate = newsModel.PublishDate ?? DateTime.Now,
                UserId      = this.UserIdProvider.GetUserId()
            };

            this.NewsData.Add(newsToAdd);
            this.NewsData.SaveChanges();

            return(this.CreatedAtRoute("DefaultApi", new { id = newsToAdd.Id }, newsToAdd));
        }
Example #33
0
        public IHttpActionResult UpdateNews(int id, NewsBindingModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            var newsInDb = this.repo.Find(id);

            if (newsInDb == null)
            {
                return(this.BadRequest($"News with id {id} doesn't exists."));
            }

            newsInDb.Title   = model.Title;
            newsInDb.Content = model.Content;
            this.repo.SaveChanges();

            return(this.Ok());
        }
        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 CreateNews_Should_Return_400BadRequest_If_Data_Is_Invalid()
        {
            var fakeNews = new List<News>();

            this.mocks.NewsRepositoryMock.Setup(r => r.Add(It.IsAny<News>()))
                .Callback((News news) => { fakeNews.Add(news); });

            var newsToAdd = new NewsBindingModel
            {
                Title = "News",
                PublishDate = DateTime.Now.AddDays(-3)
            };

            this.newsController.Validate(newsToAdd);

            var response = this.newsController.CreateNews(newsToAdd)
                .ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
            this.mockContext.Verify(c => c.SaveChanges(), Times.Never);
            Assert.AreEqual(0, fakeNews.Count);
        }
        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 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 UpdateNews_Should_Return_400BadRequest_If_Data_Is_Invalid()
        {
            var fakeNews = this.mocks.NewsRepositoryMock.Object.All().ToList();

            this.mocks.NewsRepositoryMock.Setup(r => r.Update(It.IsAny<News>()))
                .Callback((News news) => { fakeNews[0] = news; });

            var newsToUpdate = fakeNews.FirstOrDefault();
            if (newsToUpdate == null)
            {
                Assert.Fail("Cannot perform test - No news in the repository.");
            }

            var updatedNews = new NewsBindingModel
            {
                Content = "News",
                PublishDate = DateTime.Now.AddDays(-1)
            };

            this.newsController.Validate(updatedNews);

            var response = this.newsController.UpdateNews(newsToUpdate.Id, updatedNews)
                .ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
            Assert.AreEqual(newsToUpdate.Title, newsToUpdate.Title);
            Assert.AreEqual(newsToUpdate.Content, newsToUpdate.Content);

            this.mockContext.Verify(c => c.SaveChanges(), Times.Never);
        }
        public void UpdateNews_Should_Throw_Exeption_If_Data_Is_Invalid()
        {
            var repository = new GenericRepository<News>(new NewsContext());

            var newsToUpdate = repository.All().FirstOrDefault();
            if (newsToUpdate == null)
            {
                Assert.Fail("Cannot run test - no news in the repository");
            }

            var newsModel = new NewsBindingModel
            {
                Title = "Upda",
                Content = "Upda"
            };

            newsToUpdate.Title = newsModel.Title;
            newsToUpdate.Content = newsModel.Content;
            if (newsModel.PublishDate.HasValue)
            {
                newsToUpdate.PublishDate = newsModel.PublishDate.Value;
            }

            repository.Update(newsToUpdate);
            repository.SaveChanges();
        }
        public void UpdateNews_Should_Successfully_Update_News()
        {
            var repository = new GenericRepository<News>(new NewsContext());

            var newsToUpdate = repository.All().FirstOrDefault();
            if (newsToUpdate == null)
            {
                Assert.Fail("Cannot run test - no news in the repository");
            }

            var newsModel = new NewsBindingModel
            {
                Title = "Updated Sample title.",
                Content = "Updated Sample content",
                PublishDate = DateTime.Now
            };

            newsToUpdate.Title = newsModel.Title;
            newsToUpdate.Content = newsModel.Content;
            if (newsModel.PublishDate.HasValue)
            {
                newsToUpdate.PublishDate = newsModel.PublishDate.Value;
            }

            repository.Update(newsToUpdate);
            repository.SaveChanges();
        }
        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 UpdateNews_Should_Successfully_Update_News()
        {
            var fakeNews = this.mocks.NewsRepositoryMock.Object.All().ToList();

            this.mocks.NewsRepositoryMock.Setup(r => r.Update(It.IsAny<News>()))
                .Callback((News news) => { fakeNews[0] = news; });

            var newsToUpdate = fakeNews.FirstOrDefault();
            if (newsToUpdate == null)
            {
                Assert.Fail("Cannot perform test - No news in the repository.");
            }

            var updatedNews = new NewsBindingModel
            {
                Title = "UPDATED NEWS.",
                Content = "UPDATED NEWS CONTENT.",
                PublishDate = DateTime.Now.AddDays(-1)
            };

            var response = this.newsController.UpdateNews(newsToUpdate.Id, updatedNews)
                .ExecuteAsync(CancellationToken.None).Result;
            var updateResultContent = response.Content.ReadAsAsync<NewsViewModel>().Result;

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            Assert.AreEqual(newsToUpdate.Title, updateResultContent.Title);
            Assert.AreEqual(newsToUpdate.Content, updateResultContent.Content);

            this.mockContext.Verify(c => c.SaveChanges(), Times.Once);
            Assert.AreEqual(2, fakeNews.Count);
        }