public async Task Can_enroll_and_drop_a_student() { // Arrange var student = await CreateAndSaveTestStudent(); var course = await CreateAndSaveTestCourse(); var repository = new DatabaseCourseRepository(_db); // Act await repository.AddStudentAsync( courseId : course.Id, studentId : student.Id); // Assert var actualCourse = await repository.GetOneByIdAsync(course.Id); Assert.Contains(actualCourse.Enrollments, e => e.StudentId == student.Id); // Act await repository.DropStudentAsync( courseId : course.Id, studentId : student.Id); // Assert actualCourse = await repository.GetOneByIdAsync(course.Id); Assert.DoesNotContain(actualCourse.Enrollments, e => e.StudentId == student.Id); }
RemoveModule() { Setup(); string name = Guid.NewGuid().ToString("N"); DatabaseCourseRepository r; Course course; using (var db = new DemoDbContext()) { r = new DatabaseCourseRepository(db); course = new Course(name); course.AddModule(new Module("m1")); course.AddModule(new Module("m2")); r.Add(course); Assert(r.All.Where(c => c.Name == name).Single().Modules.Count == 2); db.SaveChanges(); } using (var db = new DemoDbContext()) { r = new DatabaseCourseRepository(db); course = r.All.Where(c => c.Name == name).Single(); course.RemoveModule(course.Modules.First()); db.SaveChanges(); } using (var db = new DemoDbContext()) { r = new DatabaseCourseRepository(db); course = r.All.Where(c => c.Name == name).Single(); Assert(course.Modules.Count == 1); } }
LoadingFromDBDoesntUpdateModified() { Setup(); string name = Guid.NewGuid().ToString("N"); DatabaseCourseRepository r; Course course; DateTimeOffset modified; using (var db = new DemoDbContext()) { r = new DatabaseCourseRepository(db); course = new Course(name); modified = course.Modified; r.Add(course); db.SaveChanges(); } // // Only check down to the second because .NET and the RDBMS DateTime // resolutions probably aren't the same. And even if they were the same // for some RDBMS', they might not be for others. // Thread.Sleep(1500); using (var db = new DemoDbContext()) { r = new DatabaseCourseRepository(db); course = r.All.Where(c => c.Name == name).Single(); Assert( course.Modified.Minute == modified.Minute && course.Modified.Second == modified.Second); } }
public ActionResult Course(string courseName) { courseName = (courseName ?? "").Trim(); bool creating = (courseName == ""); bool updating = !creating; ViewBag.CourseName = courseName; ViewBag.Creating = creating; ViewBag.Updating = false; if (creating) { return(View(new Course())); } using (var db = new DemoDbContext()) { var course = new DatabaseCourseRepository(db) .All .Where(c => c.Name == courseName) .SingleOrDefault(); if (course == null) { return(HttpNotFound()); } return(View(course)); } }
All() { Setup(); DatabaseCourseRepository r; string name1 = Guid.NewGuid().ToString("N"); string name2 = Guid.NewGuid().ToString("N"); using (var db = new DemoDbContext()) { r = new DatabaseCourseRepository(db); r.Add(new Course(name1)); r.Add(new Course(name2)); Assert(r.All.Any(c => c.Name == name1)); Assert(r.All.Any(c => c.Name == name2)); db.SaveChanges(); } using (var db = new DemoDbContext()) { r = new DatabaseCourseRepository(db); Assert(r.All.Any(c => c.Name == name1)); Assert(r.All.Any(c => c.Name == name2)); } }
Remove() { DatabaseCourseRepository r; Setup(); string name = Guid.NewGuid().ToString("N"); using (var db = new DemoDbContext()) { r = new DatabaseCourseRepository(db); var course = new Course(name); r.Add(course); r.Remove(course); Assert(!r.All.Any(c => c.Name == name)); db.SaveChanges(); } using (var db = new DemoDbContext()) { r = new DatabaseCourseRepository(db); var course = new Course(name); r.Add(course); db.SaveChanges(); } using (var db = new DemoDbContext()) { r = new DatabaseCourseRepository(db); var course = r.All.Single(c => c.Name == name); r.Remove(course); db.SaveChanges(); } using (var db = new DemoDbContext()) { r = new DatabaseCourseRepository(db); Assert(!r.All.Any(c => c.Name == name)); } }
public ActionResult Course(Course course) { string courseName = (RouteData.Values["courseName"] ?? "").ToString().Trim(); string action = (Request.Form["action"] ?? "").Trim().ToLowerInvariant(); bool deleting = (action == "delete" && courseName != ""); bool creating = (!deleting && courseName == ""); bool updating = (!deleting && !creating); bool cancelling = (action == "cancel"); ViewBag.CourseName = courseName; ViewBag.Creating = creating; ViewBag.Updating = updating; if (cancelling) { if (creating) { return(RedirectToRoute("Courses")); } else { return(RedirectToRoute("Course", new { courseName = courseName })); } } if (!ModelState.IsValid) { return(View(course)); } using (var db = new DemoDbContext()) { ICourseRepository courses = new DatabaseCourseRepository(db); Course existing = !creating ? courses.All.Single(c => c.Name == courseName) : null; if (deleting) { courses.Remove(existing); db.SaveChanges(); return(RedirectToRoute("Courses")); } try { if (creating) { courses.Add(course); } else { course.CopyShallowTo(existing); } } catch (InvalidOperationException ioe) { ModelState.AddModelError("", ioe.Message); } catch (ArgumentException ae) { ModelState.AddModelError("", ae.Message); } if (!ModelState.IsValid) { return(View(course)); } db.SaveChanges(); return(RedirectToRoute("Course", new { courseName = course.Name })); } }
public ActionResult Module(Module module) { string courseName = (RouteData.Values["courseName"] ?? "").ToString().Trim(); string moduleName = (RouteData.Values["moduleName"] ?? "").ToString().Trim(); string action = (Request.Form["action"] ?? "").Trim().ToLowerInvariant(); if (courseName == "") { return(HttpNotFound()); } bool deleting = (action == "delete" && moduleName != ""); bool creating = (!deleting && moduleName == ""); bool updating = (!deleting && !creating); bool cancelling = (action == "cancel"); ViewBag.CourseName = courseName; ViewBag.ModuleName = moduleName; ViewBag.Creating = creating; ViewBag.Updating = updating; if (cancelling) { if (creating) { return(RedirectToRoute("Course", new { courseName = courseName })); } else { return(RedirectToRoute("Module", new { courseName = courseName, moduleName = moduleName })); } } if (!ModelState.IsValid) { return(View(module)); } using (var db = new DemoDbContext()) { var course = new DatabaseCourseRepository(db) .All .Where(c => c.Name == courseName) .SingleOrDefault(); if (course == null) { return(HttpNotFound()); } Module existing = !creating ? course.Modules.Single(c => c.Name == moduleName) : null; if (deleting) { course.RemoveModule(existing); db.SaveChanges(); return(RedirectToRoute("Course", new { courseName = courseName })); } try { if (creating) { course.AddModule(module); } else { module.CopyShallowTo(existing); } } catch (InvalidOperationException ioe) { ModelState.AddModelError("", ioe.Message); } catch (ArgumentException ae) { ModelState.AddModelError("", ae.Message); } if (!ModelState.IsValid) { return(View(module)); } db.SaveChanges(); return(RedirectToRoute("Module", new { courseName = courseName, moduleName = module.Name })); } }