public void TestAddValidNews()
        {
            ClearNews();
            var news = new News { Title = "Zaglavie", Content = "tralala123" };
            var postContent = new FormUrlEncodedContent(new[] 
            {
                new KeyValuePair<string, string>("title", news.Title),
                new KeyValuePair<string, string>("content", news.Content)
            });

            var httpResponse = this.httpClient.PostAsync("/api/news", postContent).Result;
            Assert.AreEqual(HttpStatusCode.Created, httpResponse.StatusCode);
            Assert.IsNotNull(httpResponse.Headers.Location);

            var returnedNews = httpResponse.Content.ReadAsAsync<News>().Result;
            Assert.IsTrue(returnedNews.Id != 0);
            Assert.AreEqual(news.Title, returnedNews.Title);
            Assert.AreEqual(news.Content, returnedNews.Content);
            Assert.AreEqual(news.PublishDate.ToString(), returnedNews.PublishDate.ToString());

            using (var dbContext = new NewsDbContext())
            {
                var newsFromDb = dbContext.News.FirstOrDefault();
                Assert.IsNotNull(newsFromDb);
                Assert.AreEqual(returnedNews.Id, newsFromDb.Id);
                Assert.AreEqual(returnedNews.Title, newsFromDb.Title);
                Assert.AreEqual(returnedNews.PublishDate.ToString(), newsFromDb.PublishDate.ToString());
                Assert.AreEqual(returnedNews.Content, newsFromDb.Content);
            }
        }
예제 #2
0
        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);
        }
        public void TestDeleteNews()
        {
            ClearNews();
            var news = new News { Title = "Zaglavie", Content = "tralala123" };
            using (var dbContext = new NewsDbContext())
            {
                dbContext.News.Add(news);
                dbContext.SaveChanges();
            }

            var httpResponse = this.httpClient.DeleteAsync("/api/news/" + news.Id).Result;
            Assert.AreEqual(HttpStatusCode.OK, httpResponse.StatusCode);

            using (var dbContext = new NewsDbContext())
            {
                var newsFromDb = dbContext.News.FirstOrDefault();
                Assert.IsNull(newsFromDb);
            }
        }
        public void TestModifyInvalidNews()
        {
            ClearNews();
            var news = new News { Title = "Zaglavie", Content = "tralala123" };
            using (var dbContext = new NewsDbContext())
            {
                dbContext.News.Add(news);
                dbContext.SaveChanges();
            }

            var postContent = new FormUrlEncodedContent(new[] 
            {
                new KeyValuePair<string, string>("content", "No Title")
            });

            var httpResponse = this.httpClient.PutAsync("/api/news/" + news.Id, postContent).Result;
            Assert.AreEqual(HttpStatusCode.BadRequest, httpResponse.StatusCode);

            using (var dbContext = new NewsDbContext())
            {
                var newsFromDb = dbContext.News.FirstOrDefault();
                Assert.IsNotNull(newsFromDb);
                Assert.AreEqual(news.Title, newsFromDb.Title);
                Assert.AreEqual(news.Content, newsFromDb.Content);
            }
        }
        public void TestModifyValidNews()
        {
            ClearNews();
            var news = new News { Title = "Zaglavie", Content = "tralala123" };
            using (var dbContext = new NewsDbContext())
            {
                dbContext.News.Add(news);
                dbContext.SaveChanges();
            }

            var postContent = new FormUrlEncodedContent(new[] 
            {
                new KeyValuePair<string, string>("title", "Changed Title"),
                new KeyValuePair<string, string>("content", "Changed Content")
            });

            var httpResponse = this.httpClient.PutAsync("/api/news/" + news.Id, postContent).Result;
            Assert.AreEqual(HttpStatusCode.OK, httpResponse.StatusCode);

            var returnedNews = httpResponse.Content.ReadAsAsync<News>().Result;
            Assert.AreEqual(news.Id, returnedNews.Id);
            Assert.AreEqual("Changed Title", returnedNews.Title);
            Assert.AreEqual("Changed Content", returnedNews.Content);
            Assert.AreEqual(news.PublishDate.ToString(), returnedNews.PublishDate.ToString());

            using (var dbContext = new NewsDbContext())
            {
                var newsFromDb = dbContext.News.FirstOrDefault();
                Assert.IsNotNull(newsFromDb);
                Assert.AreEqual(returnedNews.Id, newsFromDb.Id);
                Assert.AreEqual(returnedNews.Title, newsFromDb.Title);
                Assert.AreEqual(returnedNews.PublishDate.ToString(), newsFromDb.PublishDate.ToString());
                Assert.AreEqual(returnedNews.Content, newsFromDb.Content);
            }
        }
        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 TestDeleteValidNews()
        {
            var controller = new NewsController(repoMock.Object);
            SetupController(controller, "News");

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

            var result = controller.DeleteNews(22).ExecuteAsync(new CancellationToken()).Result;
            Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
        }
        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);
        }