public async Task CommitAsync_should_create_messages_from_domain_events() { await using var dbContext = _fixture.BuildDbContext(); var studentsRepo = new StudentsRepository(dbContext); var coursesRepo = new CoursesRepository(dbContext); var messagesRepository = NSubstitute.Substitute.For <IMessagesRepository>(); var eventSerializer = NSubstitute.Substitute.For <IEventSerializer>(); var sut = new SchoolUnitOfWork(dbContext, coursesRepo, studentsRepo, messagesRepository, eventSerializer); var course = new Course(Guid.NewGuid(), "course"); await sut.CoursesRepository.CreateAsync(course, CancellationToken.None); var student = new Student(Guid.NewGuid(), "firstname", "lastname"); student.Enroll(course); student.Complete(course); await sut.StudentsRepository.CreateAsync(student, CancellationToken.None); await sut.CommitAsync(CancellationToken.None); var messages = await dbContext.Messages.ToListAsync(); messages.Should().HaveCount(2); }
static void UpdateTeacher() { Console.WriteLine("Update teacher..."); // Get a teacher to update Teacher teacher; using (SchoolUnitOfWork schoolUnitOfWork = new SchoolUnitOfWork(new SchoolDbContext())) { teacher = schoolUnitOfWork.TeacherRepository.Get(p => p.LastName == "Pulling").FirstOrDefault(); Console.WriteLine("\tBefore:: " + teacher); } // change the last name teacher.LastName = DateTime.Now.ToString(); using (SchoolUnitOfWork schoolUnitOfWork = new SchoolUnitOfWork(new SchoolDbContext())) { schoolUnitOfWork.TeacherRepository.Add(teacher); schoolUnitOfWork.Commit(); } using (SchoolUnitOfWork schoolUnitOfWork = new SchoolUnitOfWork(new SchoolDbContext())) { teacher = schoolUnitOfWork.TeacherRepository.Get(2); Console.WriteLine("\tAfter:: " + teacher); } }
public async Task Handle_should_enroll_student() { await using var dbContext = _fixture.BuildDbContext(); var student = new Student(Guid.NewGuid(), "student", "to enroll"); dbContext.Students.Add(student); var course = new Course(Guid.NewGuid(), "course"); dbContext.Courses.Add(course); await dbContext.SaveChangesAsync(); //dbContext.Entry(student).State = Microsoft.EntityFrameworkCore.EntityState.Detached; //dbContext.Entry(course).State = Microsoft.EntityFrameworkCore.EntityState.Detached; var studentsRepo = new StudentsRepository(dbContext); var coursesRepo = new CoursesRepository(dbContext); var messagesRepository = NSubstitute.Substitute.For <IMessagesRepository>(); var eventSerializer = NSubstitute.Substitute.For <IEventSerializer>(); var unitOfWork = new SchoolUnitOfWork(dbContext, coursesRepo, studentsRepo, messagesRepository, eventSerializer); var sut = new EnrollHandler(new FakeValidator <Enroll>(), unitOfWork); var command = new Enroll(course.Id, student.Id); await sut.Handle(command, CancellationToken.None); var loadedStudent = await dbContext.Students.FindAsync(student.Id); loadedStudent.Courses.Count.Should().Be(1); }
static void CleanSchool() { Console.WriteLine("\nRemoving all students and teachers...\n"); using (SchoolUnitOfWork unitOfWork = new SchoolUnitOfWork(new SchoolDbContext())) { unitOfWork.StudentRepository.RemoveRange(unitOfWork.StudentRepository.GetAll()); unitOfWork.TeacherRepository.RemoveRange(unitOfWork.TeacherRepository.GetAll()); unitOfWork.Commit(); } }
public virtual void ReadEntityWithOneToManyLaterAdded() { using (var collection = CreateTransactionalCollection()) { using (var unitOfWork = new SchoolUnitOfWork(collection)) { unitOfWork.SchoolRepository.Save(Known.Schools.SchoolWithOneChild); unitOfWork.SchoolRepository.Commit(); } } using (var collection = CreateTransactionalCollection()) { using (var unitOfWork = new SchoolUnitOfWork(collection)) { unitOfWork.ChildOnlyRepository.Count() .Should().Be.EqualTo(Known.Schools.SchoolWithOneChild.Children.Count); } } }
public virtual void AddEntityAndGet() { using (var collection = CreateTransactionalCollection()) { using (var unitOfWork = new SchoolUnitOfWork(collection)) { unitOfWork.SchoolRepository.Save(Known.Schools.School); unitOfWork.SchoolRepository.Commit(); } } using (var collection = CreateTransactionalCollection()) { using (var unitOfWork = new SchoolUnitOfWork(collection)) { unitOfWork.SchoolRepository.Single() .Name.Should().Be.EqualTo(Known.Schools.School.Name); } } }
public async Task Handle_should_create_entity() { await using var dbContext = _fixture.BuildDbContext(); var studentsRepo = new StudentsRepository(dbContext); var coursesRepo = new CoursesRepository(dbContext); var messagesRepository = NSubstitute.Substitute.For <IMessagesRepository>(); var eventSerializer = NSubstitute.Substitute.For <IEventSerializer>(); var unitOfWork = new SchoolUnitOfWork(dbContext, coursesRepo, studentsRepo, messagesRepository, eventSerializer); var sut = new CreateCourseHandler(new FakeValidator <CreateCourse>(), unitOfWork); var command = new CreateCourse(Guid.NewGuid(), "new course"); await sut.Handle(command, CancellationToken.None); var createdCourse = await coursesRepo.FindByIdAsync(command.CourseId, CancellationToken.None); createdCourse.Should().NotBeNull(); createdCourse.Id.Should().Be(command.CourseId); createdCourse.Title.Should().Be(command.CourseTitle); }
static void PopulateSchool() { Console.WriteLine("\nAdding students and teachers...\n"); using (SchoolUnitOfWork schoolUnitOfWork = new SchoolUnitOfWork(new SchoolDbContext())) { Teacher teacher1 = new Teacher() { FirstName = "Mathew", LastName = "Ernsto" }; teacher1.Students.Add(new Student() { FirstName = "Michael", LastName = "Wong" }); teacher1.Students.Add(new Student() { FirstName = "Janice", LastName = "Song" }); teacher1.Students.Add(new Student() { FirstName = "Jules", LastName = "Bong" }); schoolUnitOfWork.TeacherRepository.Add(teacher1); Teacher teacher2 = new Teacher() { FirstName = "Susan", LastName = "Pulling" }; teacher2.Students.Add(new Student() { FirstName = "Debra", LastName = "Stafford" }); teacher2.Students.Add(new Student() { FirstName = "Millie", LastName = "Himpton" }); teacher2.Students.Add(new Student() { FirstName = "Jill", LastName = "Abbie" }); schoolUnitOfWork.TeacherRepository.Add(teacher2); schoolUnitOfWork.Commit(); Console.WriteLine("\nteacherRepo.FindById({0})", teacher1.TeacherId); teacher1 = schoolUnitOfWork.TeacherRepository.Get(teacher1.TeacherId); Console.WriteLine(teacher1); Console.WriteLine("Removing teacher with id = {0}", teacher1.TeacherId); schoolUnitOfWork.TeacherRepository.Remove(teacher1); Console.WriteLine("\nteacherRepo.Find(p => p.FirstName.Contains(\"a\"):"); var listOfTeachers = schoolUnitOfWork.TeacherRepository.Get(p => p.FirstName.Contains("a")); foreach (Teacher t in listOfTeachers) { Console.WriteLine(t); } Console.WriteLine("\nList of all students:"); foreach (Student s in schoolUnitOfWork.StudentRepository.GetAll()) { Console.WriteLine(s); } var teacherWithStudents = schoolUnitOfWork.TeacherRepository.GetTeacherAndStudents(teacher2.TeacherId); Console.WriteLine("\n{0} with students", teacher2); foreach (Student s in teacher2.Students) { Console.WriteLine(string.Format("\t{0}", s)); } } }