public void TestListAll()
        {
            ClearNews();
            var news = new[]
            {
                new News { Title = "Zaglavie", Content = "dadadada" },
                new News { Title = "Asdjoqwe", Content = "asodojk" }
            };

            using (var dbContext = new NewsDbContext())
            {
                dbContext.News.AddRange(news);
                dbContext.SaveChanges();
            }

            var httpResponse = this.httpClient.GetAsync("/api/news").Result;
            var returnedNews = httpResponse.Content.ReadAsAsync<List<News>>().Result;

            Assert.AreEqual(HttpStatusCode.OK, httpResponse.StatusCode);
            Assert.AreEqual(httpResponse.Content.Headers.ContentType.MediaType, "application/json");
            Assert.AreEqual(2, returnedNews.Count);
            for (var i = 0; i < returnedNews.Count; i++)
            {
                Assert.AreEqual(returnedNews[i].Content, news[i].Content);
                Assert.AreEqual(returnedNews[i].Title, news[i].Title);
                Assert.AreEqual(returnedNews[i].PublishDate.ToString(), news[i].PublishDate.ToString());
                Assert.AreEqual(returnedNews[i].UserId, news[i].UserId);
            }
        }
        public void GetBugsShouldReturnAllBugs()
        {
            DbContext = new NewsDbContext();
            this.data = new NewsData(DbContext);
            // Arrange -> prapare the objects

            this.data.News.Add(new NewsItem
            {
                Title = "Test",
                Content = "Test",
                PublishDate = DateTime.Now
            });

            this.data.News.Add(new NewsItem
            {
                Title = ";sdka;skladfh;aklsj kljoidflkjal",
                Content = "Test;Test;Test;Test",
                PublishDate = DateTime.Now.AddDays(-1)
            });
            this.data.SaveChanges();

            // Act -> perform some logic
            var news = this.data.News.All().Count();

            // Assert -> validate the results
            Assert.AreEqual(2, news);
        }
        public void CreateNewsItemWithoutContentDataShouldThrowException()
        {
            DbContext = new NewsDbContext();
            this.data = new NewsData(DbContext);

            this.data.News.Add(new NewsItem
            {
                Title = "Test",
                PublishDate = DateTime.Now
            });

            this.data.SaveChanges();
        }
        public void AddNewsItemThenGetTheNewItemSouldBeTheSame()
        {
            DbContext = new NewsDbContext();
            this.data = new NewsData(DbContext);

            var news = new NewsItem
            {
                Title = "Test",
                Content = "Test",
                PublishDate = DateTime.Now
            };

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

            Assert.AreEqual(news, this.data.News.All().OrderBy(n => n.Id).FirstOrDefault());
        }
        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);
            }
        }
 private static void ClearUsers()
 {
     using (var dbContext = new NewsDbContext())
     {
         dbContext.Users.Delete();
         dbContext.SaveChanges();
     }
 }
        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 TestAddInvalidNews()
        {
            ClearNews();
            var postContent = new FormUrlEncodedContent(new[] 
            {
                new KeyValuePair<string, string>("title", "No Content")
            });

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

            using (var dbContext = new NewsDbContext())
            {
                var newsFromDb = dbContext.News.FirstOrDefault();
                Assert.IsNull(newsFromDb);
            }
        }
        static void Main(string[] args)
        {
            Database.SetInitializer(new MigrateDatabaseToLatestVersion<NewsDbContext, Configuration>());

            var firstNewsContext = new NewsDbContext();
            var secondNewsContext = new NewsDbContext();

            var allNewsFirst = firstNewsContext.News.ToList();
            var allNewsSecond = secondNewsContext.News.ToList();

            // Print all news content
            foreach (var news in allNewsFirst)
            {
                Console.WriteLine(news.Content);
            }

            Console.WriteLine();
            Console.WriteLine("Application Started !!!");
            Console.WriteLine();

            // Change news Content from first context instance
            foreach (var news in allNewsFirst)
            {
                Console.WriteLine("First User.");
                Console.WriteLine("Text from DB: " + news.Content);
                Console.WriteLine("Enter the correct text.   [Press 'Enter' to save]");

                string newNewsContent = Console.ReadLine();
                news.Content = newNewsContent;
                
                firstNewsContext.SaveChanges();

                Console.WriteLine("Changes successfully saved in the DB.");
                Console.WriteLine();
            }

            // Change news Content from second context instance
            foreach (var news in allNewsSecond)
            {
                Console.WriteLine("Second User.");
                Console.WriteLine("Text from DB: " + news.Content);
                Console.WriteLine("Enter the correct text.   [Press 'Enter' to save]");

                string newNewsContent = Console.ReadLine();
                news.Content = newNewsContent;

                try
                {
                    secondNewsContext.SaveChanges();
                }
                catch (DbUpdateConcurrencyException e)
                {
                    Console.WriteLine("==========================");
                    Console.WriteLine("Conflict!!!");
                    Console.WriteLine("==========================");

                    var thirdNewsContext = new NewsDbContext();

                    var newsWithNewValue = thirdNewsContext.News.Find(news.Id);

                    Console.WriteLine("Text from DB: " + newsWithNewValue.Content);
                    Console.WriteLine("Enter the correct text.   [Press 'Enter' to save]");

                    newNewsContent = Console.ReadLine();
                    news.Content = newNewsContent;

                    thirdNewsContext.SaveChanges();
                }

                Console.WriteLine("Changes successfully saved in the DB.");
                Console.WriteLine();
            }
        }
        public void Init()
        {
            this.dbcontext = new NewsDbContext();
            this.dbcontext.Database.CreateIfNotExists();

            this.transactionScope = new TransactionScope();
        }
        public void ModifyExistingNewsItemWithValidData()
        {
            DbContext = new NewsDbContext();
            this.data = new NewsData(DbContext);

            var news = new NewsItem
            {
                Title = "Tesaat",
                Content = "Testaa",
                PublishDate = DateTime.Now
            };

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

            news.Title = "New title";
            this.data.SaveChanges();

            var itemAfterChange = this.data.News.All().FirstOrDefault();

            Assert.AreEqual("New title", itemAfterChange.Title);
        }