public DbSnapShot(SampleWebAppDb db) { NumBlogs = db.Blogs.Count(); NumPostTagLinks = db.Database.SqlQuery<int>("SELECT COUNT(*) FROM dbo.TagPosts").First(); NumPosts = db.Posts.Count(); NumTags = db.Tags.Count(); }
public void FixtureSetUp() { using (var db = new SampleWebAppDb()) { DataLayerInitialise.InitialiseThis(false, true); DataLayerInitialise.ResetBlogs(db, TestDataSelection.Small); } }
public void CheckSnapShot(SampleWebAppDb db, int postsChange = 0, int postTagLinkChange = 0, int blogsChange = 0, int tagsChange = 0) { var newSnap = new DbSnapShot(db); newSnap.NumPosts.ShouldEqual(NumPosts + postsChange, "posts wrong"); newSnap.NumPostTagLinks.ShouldEqual(NumPostTagLinks + postTagLinkChange, "posttaglinks wrong"); newSnap.NumBlogs.ShouldEqual(NumBlogs + blogsChange, "blogs wrong"); newSnap.NumTags.ShouldEqual(NumTags + tagsChange, "tags wrong"); }
public void Check01ReadBlogsNoPostsOk() { using (var db = new SampleWebAppDb()) { //SETUP //ATTEMPT var blogs = db.Blogs.ToList(); //VERIFY blogs.Count.ShouldEqual(2); blogs.All(x => x.Posts == null).ShouldEqual(true); } }
public void Check02ReadBlogsWithPostsOk() { using (var db = new SampleWebAppDb()) { //SETUP //ATTEMPT var blogs = db.Blogs.Include(x => x.Posts).ToList(); //VERIFY blogs.Count.ShouldEqual(2); blogs.All(x => x.Posts != null).ShouldEqual(true); blogs.All(x => x.Posts.All(y => y.Tags == null)).ShouldEqual(true); } }
public void Check10BlogsResetSmallOk() { using (var db = new SampleWebAppDb()) { //SETUP DataLayerInitialise.InitialiseThis(false, true); //ATTEMPT DataLayerInitialise.ResetBlogs(db, TestDataSelection.Small); //VERIFY db.Blogs.Count().ShouldEqual(2); db.Posts.Count().ShouldEqual(3); db.Tags.Count().ShouldEqual(3); } }
public void Check01ValidateTagOk() { using (var db = new SampleWebAppDb()) { //SETUP var snap = new DbSnapShot(db); //ATTEMPT var dupTag = new Tag { Name = "non-duplicate slug", Slug = Guid.NewGuid().ToString("N") }; db.Tags.Add(dupTag); var status = db.SaveChangesWithChecking(); //VERIFY status.IsValid.ShouldEqual(true, status.Errors); snap.CheckSnapShot(db, 0,0,0,1); } }
public void Check02ValidateTagError() { using (var db = new SampleWebAppDb()) { //SETUP var existingTag = db.Tags.First(); //ATTEMPT var dupTag = new Tag {Name = "duplicate slug", Slug = existingTag.Slug}; db.Tags.Add(dupTag); var status = db.SaveChangesWithChecking();; //VERIFY status.IsValid.ShouldEqual(false); status.Errors.Count.ShouldEqual(1); status.Errors[0].ErrorMessage.ShouldEqual("The Slug on tag 'duplicate slug' must be unique and is already being used."); } }
public void Check16ValidatePostTitleError() { using (var db = new SampleWebAppDb()) { //SETUP var existingTag = db.Tags.First(); var existingBlogger = db.Blogs.First(); //ATTEMPT var newPost = new Post() { Blogger = existingBlogger, Title = "Test post?", Content = "Nothing special", Tags = new[] { existingTag } }; db.Posts.Add(newPost); var status = db.SaveChangesWithChecking();; //VERIFY status.IsValid.ShouldEqual(false); status.Errors.Count.ShouldEqual(1); status.Errors[0].ErrorMessage.ShouldEqual("Sorry, but you can't ask a question, i.e. the title can't end with '?'."); } }
public void Check21ValidatePostContentTwoErrors() { using (var db = new SampleWebAppDb()) { //SETUP var existingTag = db.Tags.First(); var existingBlogger = db.Blogs.First(); //ATTEMPT var newPost = new Post() { Blogger = existingBlogger, Title = "Test post", Content = "Should not end sentence with sheep. Nor end sentence with lamb.", Tags = new[] { existingTag } }; db.Posts.Add(newPost); var status = db.SaveChangesWithChecking();; //VERIFY status.IsValid.ShouldEqual(false); status.Errors.Count.ShouldEqual(2); status.Errors[0].ErrorMessage.ShouldEqual("Sorry. Not allowed to end a sentance with 'sheep'."); status.Errors[1].ErrorMessage.ShouldEqual("Sorry. Not allowed to end a sentance with 'lamb'."); } }
public static string GetNumPosts(SampleWebAppDb db) { var numPosts = db.Posts.Count(); return string.Format("The total number of Posts is {0}", numPosts); }
public static void ResetBlogs(SampleWebAppDb context, TestDataSelection selection) { try { context.Posts.ToList().ForEach(x => context.Posts.Remove(x)); context.Tags.ToList().ForEach(x => context.Tags.Remove(x)); context.Blogs.ToList().ForEach(x => context.Blogs.Remove(x)); context.SaveChanges(); } catch (Exception ex) { _logger.Critical("Exception when resetting the blogs", ex); throw; } var bloggers = LoadDbDataFromXml.FormBlogsWithPosts(XmlBlogsDataFileManifestPath[selection]); context.Blogs.AddRange(bloggers); var status = context.SaveChangesWithChecking(); if (!status.IsValid) { _logger.CriticalFormat("Error when resetting courses data. Error:\n{0}", string.Join(",", status.Errors)); throw new FormatException("problem writing to database. See log."); } }
//----------------------------------------------------- //Code used in https://www.simple-talk.com/dotnet/.net-framework/the-.net-4.5-asyncawait-commands-in-promise-and-practice/ public ActionResult NumPosts(SampleWebAppDb db) { //The cast to object is to stop the View using the string as a view name return View((object)GetNumPosts(db)); }
public ActionResult Reset(SampleWebAppDb db) { DataLayerInitialise.ResetBlogs(db, TestDataSelection.Medium); TempData["message"] = "Successfully reset the blogs data"; return RedirectToAction("Index"); }
public void Check10ReadTAllocatedTagsWithUglySlugOk() { using (var db = new SampleWebAppDb()) { //SETUP //ATTEMPT var postsWithuglyTags = db.Posts.Where(x => x.Tags.Any(y => y.Slug == "ugly")).ToList(); var uglyTagPosts = db.Tags.Include(x => x.Posts).Single(y => y.Slug == "ugly").Posts; //VERIFY postsWithuglyTags.Count.ShouldEqual(2); uglyTagPosts.Count().ShouldEqual(2); } }
public void Check25UpdatePostToAddTagOk() { using (var db = new SampleWebAppDb()) { //SETUP var snap = new DbSnapShot(db); var badTag = db.Tags.Single(x => x.Slug == "bad"); var firstPost = db.Posts.First(); //ATTEMPT db.Entry(firstPost).Collection(x => x.Tags).Load(); firstPost.Tags.Add(badTag); var status = db.SaveChangesWithChecking(); //VERIFY status.IsValid.ShouldEqual(true, status.Errors); snap.CheckSnapShot(db, 0, 1); firstPost = db.Blogs.Include(x => x.Posts.Select(y => y.Tags)).First().Posts.First(); firstPost.Tags.Count.ShouldEqual(3); } }
public void Check21CheckUpdateSimpleOk() { using (var db = new SampleWebAppDb()) { //SETUP var snap = new DbSnapShot(db); var newGuid = Guid.NewGuid().ToString(); //ATTEMPT var firstPost = db.Posts.First(); firstPost.Title = newGuid; var status = db.SaveChangesWithChecking(); //VERIFY status.IsValid.ShouldEqual(true, status.Errors); snap.CheckSnapShot(db); db.Posts.First().Title.ShouldEqual(newGuid); } }
public void Check10ValidatePostOk() { using (var db = new SampleWebAppDb()) { //SETUP var snap = new DbSnapShot(db); var existingTag = db.Tags.First(); var existingBlogger = db.Blogs.First(); //ATTEMPT var newPost = new Post() { Blogger = existingBlogger, Title = "Test post", Content = "Nothing special", Tags = new[] { existingTag } }; db.Posts.Add(newPost); var status = db.SaveChangesWithChecking();; //VERIFY status.IsValid.ShouldEqual(true, status.Errors); snap.CheckSnapShot(db,1,1); } }
public void Check31CheckCreateDataOk() { using (var db = new SampleWebAppDb()) { //SETUP var snap = new DbSnapShot(db); var firstPostUntracked = db.Posts.AsNoTracking().First(); //ATTEMPT firstPostUntracked.Title = Guid.NewGuid().ToString(); firstPostUntracked.Blogger = db.Blogs.First(); firstPostUntracked.Tags = db.Tags.Take(2).ToList(); db.Posts.Add(firstPostUntracked); var status = db.SaveChangesWithChecking(); //VERIFY status.IsValid.ShouldEqual(true, status.Errors); snap.CheckSnapShot(db,1,2); var loadedPost = db.Posts.Include( x => x.Blogger).Include( x => x.Tags).Single(x => x.PostId == firstPostUntracked.PostId); loadedPost.Blogger.BlogId.ShouldEqual(db.Blogs.First().BlogId); CollectionAssert.AreEquivalent(db.Tags.Take(2).Select(x => x.TagId), loadedPost.Tags.Select(x => x.TagId)); } }
public void Check30CheckCreateLastUpdatedOk() { using (var db = new SampleWebAppDb()) { //SETUP var snap = new DbSnapShot(db); var firstPostUntracked = db.Posts.AsNoTracking().First(); var originalDateTime = firstPostUntracked.LastUpdated; Thread.Sleep(400); //ATTEMPT firstPostUntracked.Title = Guid.NewGuid().ToString(); firstPostUntracked.Blogger = db.Blogs.First(); firstPostUntracked.Tags = db.Tags.Take(2).ToList(); db.Posts.Add(firstPostUntracked); var status = db.SaveChangesWithChecking(); //VERIFY status.IsValid.ShouldEqual(true, status.Errors); snap.CheckSnapShot(db,1,2); var loadedPost = db.Posts.Single(x => x.PostId == firstPostUntracked.PostId); Assert.GreaterOrEqual(loadedPost.LastUpdated.Subtract(originalDateTime).Milliseconds, 400); } }
public void Check26ReplaceTagsOk() { using (var db = new SampleWebAppDb()) { //SETUP var snap = new DbSnapShot(db); var firstPost = db.Posts.First(); var tagsNotInFirstPostTracked = db.Tags.Where(x => x.Posts.All(y => y.PostId != firstPost.PostId)).ToList(); //ATTEMPT db.Entry(firstPost).Collection(x => x.Tags).Load(); firstPost.Tags = tagsNotInFirstPostTracked; var status = db.SaveChangesWithChecking(); //VERIFY status.IsValid.ShouldEqual(true, status.Errors); snap.CheckSnapShot(db, 0, -1); firstPost = db.Blogs.Include(x => x.Posts.Select(y => y.Tags)).First().Posts.First(); firstPost.Tags.Count.ShouldEqual(1); } }
public void Check20AddPostOk() { using (var db = new SampleWebAppDb()) { //SETUP var snap = new DbSnapShot(db); //ATTEMPT var uglyTag = db.Tags.Single(x => x.Slug == "ugly"); var jonBlogger = db.Blogs.First(); var newPost = new Post { Blogger = jonBlogger, Content = "a few simple words.", Title = "A new post", Tags = new[] { uglyTag } }; db.Posts.Add(newPost); var status = db.SaveChangesWithChecking(); //VERIFY status.IsValid.ShouldEqual(true, status.Errors); snap.CheckSnapShot(db, 1, 1); var uglyPosts = db.Tags.Include(x => x.Posts).Single(y => y.Slug == "ugly").Posts; uglyPosts.Count.ShouldEqual(3); } }
//----------------------------------------------------- //Code used in https://www.simple-talk.com/dotnet/.net-framework/the-.net-4.5-asyncawait-commands-in-promise-and-practice/ public async Task<ActionResult> NumPosts(SampleWebAppDb db) { return View((object)await GetNumPostsAsync(db)); }
private static async Task<string> GetNumPostsAsync(SampleWebAppDb db) { var numPosts = await db.Posts.CountAsync(); return string.Format("The total number of Posts is {0}", numPosts); }
public void Check22CheckUpdateLastUpdatedOk() { using (var db = new SampleWebAppDb()) { //SETUP var snap = new DbSnapShot(db); var firstPost = db.Posts.First(); var originalDateTime = firstPost.LastUpdated; Thread.Sleep(400); //ATTEMPT firstPost.Title = Guid.NewGuid().ToString(); var status = db.SaveChangesWithChecking(); //VERIFY status.IsValid.ShouldEqual(true, status.Errors); snap.CheckSnapShot(db); Assert.GreaterOrEqual(db.Posts.First().LastUpdated.Subtract(originalDateTime).Milliseconds, 400); } }
public void Check20NullInitialiserOk() { Check10BlogsResetSmallOk(); //we call this to ensure the database is setup using (var db = new SampleWebAppDb()) { //SETUP DataLayerInitialise.InitialiseThis(false, false); //select null initialiser //ATTEMPT DataLayerInitialise.ResetBlogs(db, TestDataSelection.Small); //VERIFY db.Blogs.Count().ShouldEqual(2); db.Posts.Count().ShouldEqual(3); db.Tags.Count().ShouldEqual(3); } }
public void Check06ReadPostsWithTagsOk() { using (var db = new SampleWebAppDb()) { //SETUP //ATTEMPT var posts = db.Posts.Include(x => x.Tags).ToList(); //VERIFY posts.Count.ShouldEqual(3); posts.All(x => x.Blogger != null).ShouldEqual(true); posts.All(x => x.Tags != null).ShouldEqual(true); } }