public void Initialize() { this.mocks = new MockContainer(); this.mocks.PrepareMocks(); this.mockContext = new Mock<IUnitOfWorkData>(); this.mockContext.Setup(c => c.News).Returns(this.mocks.NewsRepositoryMock.Object); this.controller = new NewsController(this.mockContext.Object); this.controller.Request = new HttpRequestMessage { RequestUri = new Uri("http://localhost") }; this.controller.Configuration = new HttpConfiguration(); this.controller.Configuration.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new { id = RouteParameter.Optional }); this.newsItem = new NewsBindingModel { Title = "New News", Content = "New News Content", PublishDate = DateTime.Now }; this.fakeNewsCountBefore = this.mockContext.Object.News.GetAll().Count(); }
public void Listing_All_News_Should_Return_Them_Correctly() { var fakeNews = _mocks.NewsRepoMock.Object.All(); var mockContext = new Mock<INewsData>(); mockContext.Setup(c => c.News.All()) .Returns(fakeNews); var newsController = new NewsController(mockContext.Object); SetupController(newsController); var response = newsController.GetAllNews().ExecuteAsync(CancellationToken.None).Result; Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); var newsResponse = response.Content.ReadAsAsync<IEnumerable<NewsViewModel>>() .Result .Select(n => n.Id) .ToList(); var fakeNewsList = fakeNews .OrderByDescending(n => n.PublishDate) .Select(n => n.Id) .ToList(); CollectionAssert.AreEqual(newsResponse, fakeNewsList); }
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 List_All_News_Should_Return_200OK_And_Return_News_Correctly() { // Arrange var fakeNews = this.mock.NewsRepositoryMock.Object.All(); var mockContext = new Mock<INewsData>(); mockContext.Setup(c => c.News.All()) .Returns(fakeNews); var newsController = new NewsController(mockContext.Object); this.SetupController(newsController); // Act var response = newsController.GetNews() .ExecuteAsync(CancellationToken.None).Result; // Assert Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); var newsResponse = response.Content .ReadAsAsync<IEnumerable<News>>() .Result .ToList(); var orderedFakeNews = fakeNews .OrderBy(n => n.PublishDate) .ToList(); CollectionAssert.AreEqual(orderedFakeNews, newsResponse); }
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); }
public void CreateNewsWithWrongBindingModelShouldReturnBadRequest() { var controller = new NewsController(this.mock.NewsRepositoryMock.Object); this.SetupController(controller); var newsBind = new NewsBindingModel(); controller.ModelState.AddModelError("BadRequest", "Content can't be empty."); var response = controller.CreateNews(newsBind).ExecuteAsync(CancellationToken.None).Result; Assert.IsNotNull(response); Assert.AreEqual(response.StatusCode, HttpStatusCode.BadRequest); }
public void ModifyExistingNewsShouldReturnOk() { var controller = new NewsController(this.mock.NewsRepositoryMock.Object); this.SetupController(controller); var newsBind = new NewsBindingModel { Title = "Edit", Content = "Edit", PublishedDate = DateTime.Now }; var response = controller.EditNews(1, newsBind).ExecuteAsync(CancellationToken.None).Result; var editedNews = this.mock.NewsRepositoryMock.Object.Find(1); Assert.AreEqual(editedNews.Title, "Edit"); Assert.AreEqual(editedNews.Content, "Edit"); Assert.AreEqual(response.StatusCode, HttpStatusCode.OK); }
public void CreateNews_WithIncorrectData_ShouldReturnBadRequestWithOutAddingTheNews() { // Arrange var controller = new NewsController(this.dataLayerMocked); this.SetupController(controller, "news"); // Act var httpResponse = controller.CreateNew(null).ExecuteAsync(new CancellationToken()).Result; var httpGetResponse = controller.GetAllNews().ExecuteAsync(new CancellationToken()).Result; var newsFromService = httpGetResponse.Content.ReadAsAsync<News[]>().Result; // Arrange Assert.AreEqual(HttpStatusCode.BadRequest, httpResponse.StatusCode); Assert.AreEqual(0, newsFromService.Count()); }
public void CreateNewsAddToRepositoryShouldReturnCreated() { var controller = new NewsController(this.mock.NewsRepositoryMock.Object); this.SetupController(controller); var newsBind = new NewsBindingModel { Title = "Some new news", Content = "Content", PublishedDate = DateTime.Now }; var response = controller.CreateNews(newsBind).ExecuteAsync(CancellationToken.None).Result; Assert.IsNotNull(response); Assert.AreEqual(response.StatusCode, HttpStatusCode.Created); }
public void CreateNewsItemWithCorrectData() { var repo = new RepositoryMock<News>(); repo.IsSaveCalled = false; repo.Entities = new Dictionary<object, News>(); var news = new News() { Id = 1, AuthorId = "valid", Title = "valid", Content = "valid", PublishDate = DateTime.Now }; var controller = new NewsController(repo); this.SetupController(controller, "news"); // Act var httpResponse = controller.CreateNews(new NewsBindingModel() { Id = news.Id, AuthorId = news.AuthorId, Title = news.Title, Content = news.Content, PublishDate = news.PublishDate }).ExecuteAsync(new CancellationToken()).Result; // Assert Assert.AreEqual(HttpStatusCode.Created, httpResponse.StatusCode); Assert.IsNotNull(httpResponse.Headers.Location); var newsFromService = httpResponse.Content.ReadAsAsync<News>().Result; Assert.AreEqual(newsFromService.Title, news.Title); Assert.AreEqual(newsFromService.AuthorId, news.AuthorId); Assert.AreEqual(newsFromService.Content, news.Content); Assert.AreEqual(newsFromService.Id, news.Id); Assert.IsNotNull(newsFromService.PublishDate); Assert.AreEqual(repo.Entities.Count, 1); var newsInRepo = repo.Entities.First().Value; Assert.AreEqual(news.Title, newsInRepo.Title); Assert.AreEqual(news.Id, newsInRepo.Id); Assert.AreEqual(news.Content, newsInRepo.Content); Assert.AreEqual(news.AuthorId, newsInRepo.AuthorId); Assert.IsNotNull(newsInRepo.PublishDate); Assert.IsTrue(repo.IsSaveCalled); }
public void ListAllNewsShouldReturnOk() { var controller = new NewsController(this.mock.NewsRepositoryMock.Object); this.SetupController(controller); var response = controller.GetAllNews() .ExecuteAsync(CancellationToken.None).Result; Assert.AreEqual( this.mock.NewsRepositoryMock.Object.All().Count(), 3, "Counts of news are not currect."); Assert.AreEqual( response.StatusCode, HttpStatusCode.OK, "Expect status code OK."); }
public void List_All_Items_Should_Work_Correctly() { 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.GetAll()).Returns(news.AsQueryable()); var controller = new NewsController(mockRepo.Object); this.SetupController(controller, "NewsController"); var response = controller.GetAll().ExecuteAsync(new CancellationToken()).Result; Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); var content = response.Content.ReadAsStringAsync().Result; var resultNews = JsonConvert.DeserializeObject<List<NewsRecord>>(content); for (int i = 0; i < resultNews.Count; i++) { Assert.AreEqual(news[i].Id, resultNews[i].Id); Assert.AreEqual(news[i].Title, resultNews[i].Title); Assert.AreEqual(news[i].Content, resultNews[i].Content); Assert.AreEqual(news[i].PublishDate, resultNews[i].PublishDate); } }
public void ListAllNewsItemsCorrectly() { var repo = new RepositoryMock<News>(); var news = new Dictionary<object, News>(); news.Add(1, new News() { Id = 1, AuthorId = "test", Content = "News1 Content", Title = "News1 Title", PublishDate = DateTime.Now }); news.Add(2, new News() { Id = 2, AuthorId = "test", Content = "News2 Content", Title = "News2 Title", PublishDate = DateTime.Now }); news.Add(3, new News() { Id = 3, AuthorId = "test", Content = "News3 Content", Title = "News3 Title", PublishDate = DateTime.Now }); repo.Entities = news; var controller = new NewsController(repo); var result = controller.GetAllNews().ExecuteAsync(new CancellationToken()).Result; Assert.AreEqual(HttpStatusCode.Created, result.StatusCode); var theNews = JsonConvert.DeserializeObject<Dictionary<object, News>>(result.Content.ReadAsStringAsync().Result); // Assert CollectionAssert.AreEquivalent(news, theNews); }
public void TestListAll() { var controller = new NewsController(repoMock.Object); SetupController(controller, "News"); var news = new[] { new News { Title = "Zaglavie", Content = "dadadada" }, new News { Title = "Asdjoqwe", Content = "asodojk" } }; repoMock.Setup(repo => repo.All()).Returns(news.AsQueryable()); var result = controller.GetAll().ExecuteAsync(new CancellationToken()).Result; Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); var returnedNews = result.Content.ReadAsAsync<List<News>>().Result; Assert.AreEqual(2, returnedNews.Count); CollectionAssert.AreEquivalent(news, returnedNews); }
public void Delete_WithExistingNews_ShouldDeleteTheNewsAndReturn200Ok() { // Arrange var initialNew = new News() { Id = 1, Title = "Test news #1", Content = "Test content #1", }; var controller = new NewsController(this.dataLayerMocked); this.SetupController(controller, "news"); // Act this.dataLayerMocked.News.Add(initialNew); var httpGetResponse = controller.GetAllNews().ExecuteAsync(new CancellationToken()).Result; var newsFromService = httpGetResponse.Content.ReadAsAsync<List<News>>().Result; var newsId = newsFromService[0].Id; var httpDeleteResponse = controller.DeleteNewById(newsId).ExecuteAsync(new CancellationToken()).Result; Assert.AreEqual(0, this.dataLayerMocked.News.All().Count()); Assert.AreEqual(HttpStatusCode.OK, httpDeleteResponse.StatusCode); }
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); }
public void CreateNews_WithCorrectData_ShouldCreateNewsAndReturn201Created() { // Arrange var news = new CreateNewInputModel() { Title = "Test news #1", Content = "Test content #1", }; this.dataLayerMocked.IsChangeSaved = false; var controller = new NewsController(this.dataLayerMocked); this.SetupController(controller, "news"); // Act var httpResponse = controller.CreateNew(news).ExecuteAsync(new CancellationToken()).Result; var newsFromService = httpResponse.Content.ReadAsAsync<News>().Result; // Arrange Assert.IsTrue(this.dataLayerMocked.IsChangeSaved); Assert.AreEqual(HttpStatusCode.Created, httpResponse.StatusCode); Assert.AreEqual(news.Title, newsFromService.Title); Assert.AreEqual(news.Content, newsFromService.Content); }
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 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 Deleteing_Non_Existing_Item_Should_Return_BadRequest() { 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.DeleteNews(1000000).ExecuteAsync(CancellationToken.None).Result; Assert.AreEqual(response.StatusCode, HttpStatusCode.BadRequest); mockContext.Verify(c => c.SaveChanges(), Times.Never); }
private void SetupController(NewsController controller) { controller.Request = new HttpRequestMessage(); controller.Configuration = new HttpConfiguration(); }
public void DeleteNonExistingNewsShouldReturnNotFound() { var controller = new NewsController(this.mock.NewsRepositoryMock.Object); this.SetupController(controller); var response = controller.DeleteNews(12).ExecuteAsync(CancellationToken.None).Result; Assert.IsNotNull(response); Assert.AreEqual(response.StatusCode, HttpStatusCode.NotFound); }
public void ModifyNonExistingNewsShouldReturnBadRequest() { var newsRepository = new Mock<IRepository<News>>(); var controller = new NewsController(newsRepository.Object); this.SetupController(controller); var response = controller.EditNews(3, new NewsBindingModel()) .ExecuteAsync(CancellationToken.None).Result; Assert.IsNotNull(response); Assert.AreEqual(response.StatusCode, HttpStatusCode.NotFound); }
public void DeleteNonExistingNewsItem() { var repo = new RepositoryMock<News>(); var controller = new NewsController(repo); this.SetupController(controller, "news"); var deleteResult = controller.DeletelNews(20).ExecuteAsync(new CancellationToken()).Result; Assert.AreEqual(HttpStatusCode.BadRequest, deleteResult.StatusCode); }
public void DeleteExistingNewsItem() { var repo = new RepositoryMock<News>(); var controller = new NewsController(repo); this.SetupController(controller, "news"); // Act var news = new News() { Id = 1, Title = "valid", AuthorId = "valid", PublishDate = DateTime.Now, Content = "valid" }; var result = controller.CreateNews(new NewsBindingModel() { Id = news.Id, AuthorId = news.AuthorId, Title = news.Title, Content = news.Content, PublishDate = news.PublishDate }).ExecuteAsync(new CancellationToken()).Result; var theCreatedNews = repo.Entities.First().Value; var deleteResult = controller.DeletelNews(theCreatedNews.Id).ExecuteAsync(new CancellationToken()).Result; Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); Assert.AreEqual(repo.Entities.Count, 0); }
public void ModifyNonExistingNewsItem() { var repo = new RepositoryMock<News>(); var controller = new NewsController(repo); this.SetupController(controller, "news"); // Act // Not added var news = new News() { Id = 1, Title = "valid", AuthorId = "valid", PublishDate = DateTime.Now, Content = "valid" }; var result = controller.EditNews(news.Id, new NewsBindingModel() { Id = news.Id, AuthorId = news.AuthorId, Title = news.Title, Content = news.Content, PublishDate = news.PublishDate }).ExecuteAsync(new CancellationToken()).Result; Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode); }
public void ModifyExistingNewsItemWithIncorrectData() { var repo = new RepositoryMock<News>(); var controller = new NewsController(repo); this.SetupController(controller, "news"); // Act var news = new News() { Id = 1, Title = "valid", AuthorId = "valid", PublishDate = DateTime.Now, Content = "valid" }; var result = controller.CreateNews(new NewsBindingModel() { Id = news.Id, AuthorId = news.AuthorId, Title = news.Title, Content = news.Content, PublishDate = news.PublishDate }).ExecuteAsync(new CancellationToken()).Result; var theCreatedNews = repo.Entities.First().Value; theCreatedNews.Content = null; var editResult = controller.EditNews(theCreatedNews.Id, new NewsBindingModel() { Id = theCreatedNews.Id, AuthorId = theCreatedNews.AuthorId, Title = theCreatedNews.Title, Content = theCreatedNews.Content, PublishDate = theCreatedNews.PublishDate }).ExecuteAsync(new CancellationToken()).Result; Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode); }
public void ModifyExistingNewsIncorrectDataShouldReturnBadReques() { var controller = new NewsController(this.mock.NewsRepositoryMock.Object); this.SetupController(controller); controller.ModelState.AddModelError("BadRequest", "Empty binding model."); var response = controller.EditNews(1, new NewsBindingModel()) .ExecuteAsync(CancellationToken.None).Result; Assert.IsNotNull(response); Assert.AreEqual(response.StatusCode, HttpStatusCode.BadRequest); }
public void CreateNewsItemWithIncorrectData() { var repo = new RepositoryMock<News>(); var controller = new NewsController(repo); this.SetupController(controller, "news"); // Act var news = new News() { Id = 1, Title = "valid", AuthorId = "valid", PublishDate = DateTime.Now, Content = null }; var result = controller.CreateNews(new NewsBindingModel() { Id = news.Id, AuthorId = news.AuthorId, Title = news.Title, Content = news.Content, PublishDate = news.PublishDate }).ExecuteAsync(new CancellationToken()).Result; // Assert Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode); }