public void TestGetAllPostWhenHasNewsShouldReturnNewsSortedDescendingByDate()
        {
            //Setup fake news
            var fakeNews = new List<Models.News>()
            {
                new Models.News()
                {
                    Id = 1,
                    Title = "1",
                    Content = "1",
                    PublishedData = new DateTime(2000, 01, 01)
                },
                new Models.News()
                {
                    Id = 2,
                    Title = "2",
                    Content = "2",
                    PublishedData = new DateTime(2000, 01, 02)
                },
                new Models.News()
                {
                    Id = 3,
                    Title = "3",
                    Content = "3",
                    PublishedData = new DateTime(2000, 01, 03)
                }
            };

            //Setup repositories
            var mockedRepository = new Mock<IRepository<Models.News>>();
            mockedRepository.Setup(r => r.All()).Returns(fakeNews.AsQueryable());

            //Setup data layer
            var mockedContext = new Mock<INewsData>();
            mockedContext.Setup(c => c.News).Returns(mockedRepository.Object);

            //Setup controller
            var controller = new NewsController(mockedContext.Object);
            controller.Request = new HttpRequestMessage();
            controller.Configuration = new HttpConfiguration();

            var response = controller.GetNews().ExecuteAsync(CancellationToken.None).Result;
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            var news = response.Content
                .ReadAsAsync<IEnumerable<NewsViewModel>>()
                .Result
                .Select(n => n.Title)
                .ToList();

            var orderedFakeNews = fakeNews
                .OrderByDescending(n => n.PublishedData)
                .Select(n => n.Title)
                .ToList();

            CollectionAssert.AreEqual(orderedFakeNews, news);
        }
        public void TestPostNewNewsWithValidDataShouldAddNewNews()
        {
            //Setup fake news
            var fakeNews = new List<Models.News>();
            var isNewsSaved = false;

            //Setup repositories
            var mockedRepository = new Mock<IRepository<Models.News>>();
            mockedRepository.Setup(r => r.Add(It.IsAny<Models.News>()))
                .Callback((Models.News n) =>
                {
                    fakeNews.Add(n);
                });

            //Setup data layer
            var mockedContext = new Mock<INewsData>();
            mockedContext.Setup(c => c.News).Returns(mockedRepository.Object);
            mockedContext.Setup(r => r.SaveChanges())
                .Callback(() =>
                {
                    isNewsSaved = true;
                });

            // Setup controller
            var controller = new NewsController(mockedContext.Object);
            controller.Request = new HttpRequestMessage();
            controller.Configuration = new HttpConfiguration();

            var response = controller.PostNewNews(new NewsBindingModel()
            {
                Content = "test",
                Title = "test",
                PublishDate = DateTime.Now,
            }).ExecuteAsync(CancellationToken.None).Result;
            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);

            var news = response.Content
                .ReadAsAsync<NewsViewModel>()
                .Result;

            var orderedFakeNews = fakeNews
                .Select(n => n.Title)
                .ToList();

            Assert.AreEqual(orderedFakeNews[0], news.Title);
            Assert.IsTrue(isNewsSaved);
        }