public async Task Should_query_for_command() { var englishDept = new Department { Name = "English", StartDate = DateTime.Today }; var english101 = new Course { Department = englishDept, Title = "English 101", Credits = 4, Id = 123 }; var command = new CreateEdit.Command { FirstMidName = "George", LastName = "Costanza", OfficeAssignmentLocation = "Austin", HireDate = DateTime.Today, SelectedCourses = new [] { english101.Id.ToString() } }; var instructorId = await SendAsync(command); await InsertAsync(englishDept, english101); var result = await SendAsync(new Delete.Query { Id = instructorId }); result.ShouldNotBeNull(); result.FirstMidName.ShouldBe(command.FirstMidName); result.OfficeAssignmentLocation.ShouldBe(command.OfficeAssignmentLocation); }
public void Handle(CreateEdit.Command message, IEnumerable <Course> courses) { UpdateDetails(message); UpdateInstructorCourses(message.SelectedCourses, courses); }
public async Task Should_create_new_instructor(SliceFixture fixture) { var admin = new Instructor { FirstMidName = "George", LastName = "Costanza", HireDate = DateTime.Today, }; await fixture.ExecuteDbContextAsync(async db => { db.Instructors.Add(admin); await db.SaveChangesAsync(); }); var command = new CreateEdit.Command { }; //await fixture.SendAsync(command); //await fixture.ExecuteDbContextAsync(async db => //{ // var created = await db.Departments.Where(d => d.Name == command.Name).SingleOrDefaultAsync(); // created.ShouldNotBeNull(); // created.Budget.ShouldBe(command.Budget.GetValueOrDefault()); // created.StartDate.ShouldBe(command.StartDate.GetValueOrDefault()); // created.InstructorID.ShouldBe(admin.ID); //}); }
public async Task Should_delete_instructor(CreateEdit.Command instructor, Department dept, Course course, CreateEdit.Command command) { var instructorId = await SendAsync(instructor); dept.InstructorID = instructorId; course.Id = 123; course.Department = dept; await InsertAsync(dept, course); command.Id = instructorId; command.SelectedCourses = new[] { course.Id.ToString() }; await SendAsync(command); await SendAsync(new Delete.Command { ID = instructorId }); var instructorCount = await ExecuteDbContextAsync(db => db.Instructors.CountAsync()); instructorCount.ShouldBe(0); var deptId = dept.Id; dept = await ExecuteDbContextAsync(db => db.Departments.FindAsync(deptId)); dept.InstructorID.ShouldBeNull(); var courseInstructorCount = await ExecuteDbContextAsync(db => db.CourseInstructors.CountAsync()); courseInstructorCount.ShouldBe(0); }
public async Task CanGetDetails(SliceFixture fixture) { //Arrange var department = new Department { Name = "Some department" }; var course = new Course { Title = "Course", Credits = 3, Department = department }; await fixture.InsertAsync(course); var createInstructorCommand = new CreateEdit.Command { FirstName = "John", LastName = "Smith", HireDate = new DateTime(2012, 03, 01), SelectedCourses = new List <CourseInstructor>() { new CourseInstructor() { Course = course, CourseId = course.Id } } }; var createdInstructor = await fixture.SendAsync(createInstructorCommand); //Act var detailsQuery = new Details.Query { Id = createdInstructor.Id }; var response = await fixture.SendAsync(detailsQuery); //Assert var instructorInDb = await fixture.ExecuteDbContextAsync(context => context .Instructors .Include(i => i.CourseInstructors) .ThenInclude(c => c.Course) .FirstOrDefaultAsync(i => i.Id == createdInstructor.Id)); response.ShouldNotBeNull(); response.Id.ShouldBe(instructorInDb.Id); response.FirstName.ShouldBe(instructorInDb.FirstName); response.LastName.ShouldBe(instructorInDb.LastName); response.HireDate.ShouldBe(instructorInDb.HireDate); response.Courses.ElementAt(0).Id .ShouldBe(instructorInDb.CourseInstructors.ElementAt(0).CourseId); response.Courses.ElementAt(0).Title .ShouldBe(instructorInDb.CourseInstructors.ElementAt(0).Course.Title); }
public async Task Should_merge_course_instructors(SliceFixture fixture) { var englishDept = new Department { Name = "English", StartDate = DateTime.Today }; var english101 = new Course { Department = englishDept, Title = "English 101", Credits = 4, Id = 123 }; var english201 = new Course { Department = englishDept, Title = "English 201", Credits = 4, Id = 456 }; var instructor = new Instructor { OfficeAssignment = new OfficeAssignment { Location = "Austin" }, FirstMidName = "George", LastName = "Costanza", HireDate = DateTime.Today, }; instructor.CourseInstructors.Add(new CourseInstructor { Course = english101, Instructor = instructor }); await fixture.InsertAsync(englishDept, english101, english201, instructor); var command = new CreateEdit.Command { FirstMidName = "Jerry", LastName = "Seinfeld", HireDate = DateTime.Today, OfficeAssignmentLocation = "Houston", SelectedCourses = new[] { english201.Id.ToString() }, Id = instructor.Id }; await fixture.SendAsync(command); var edited = await fixture.ExecuteDbContextAsync(db => db.Instructors.Where(i => i.Id == instructor.Id).Include(i => i.CourseInstructors).Include(i => i.OfficeAssignment).SingleOrDefaultAsync()); edited.FirstMidName.ShouldBe(command.FirstMidName); edited.LastName.ShouldBe(command.LastName); edited.HireDate.ShouldBe(command.HireDate.GetValueOrDefault()); edited.OfficeAssignment.ShouldNotBeNull(); edited.OfficeAssignment.Location.ShouldBe(command.OfficeAssignmentLocation); edited.CourseInstructors.Count.ShouldBe(1); edited.CourseInstructors.First().CourseID.ShouldBe(english201.Id); }
public async Task Should_edit_instructor_details() { var englishDept = new Department { Name = "English", StartDate = DateTime.Today }; var english101 = new Course { Department = englishDept, Title = "English 101", Credits = 4, Id = NextCourseNumber() }; var english201 = new Course { Department = englishDept, Title = "English 201", Credits = 4, Id = NextCourseNumber() }; await InsertAsync(englishDept, english101, english201); var instructorId = await SendAsync(new CreateEdit.Command { FirstMidName = "George", LastName = "Costanza", OfficeAssignmentLocation = "Austin", HireDate = DateTime.Today, }); var command = new CreateEdit.Command { FirstMidName = "Jerry", LastName = "Seinfeld", HireDate = DateTime.Today, OfficeAssignmentLocation = "Houston", SelectedCourses = new string[0], Id = instructorId }; await SendAsync(command); var edited = await ExecuteDbContextAsync(db => db.Instructors.Where(i => i.Id == instructorId).Include(i => i.CourseAssignments).Include(i => i.OfficeAssignment).SingleOrDefaultAsync()); edited.FirstMidName.ShouldBe(command.FirstMidName); edited.LastName.ShouldBe(command.LastName); edited.HireDate.ShouldBe(command.HireDate.GetValueOrDefault()); edited.OfficeAssignment.ShouldNotBeNull(); edited.OfficeAssignment.Location.ShouldBe(command.OfficeAssignmentLocation); }
public async Task CanDelete(SliceFixture fixture) { //Arrange var department = new Department { Name = "Some department" }; var course = new Course { Title = "Course", Credits = 3, Department = department }; await fixture.InsertAsync(course); var createInstructorCommand = new CreateEdit.Command { FirstName = "John", LastName = "Smith", HireDate = new DateTime(2012, 03, 01), SelectedCourses = new List <CourseInstructor>() { new CourseInstructor() { Course = course, Instructor = new Instructor() } } }; var createdInstructor = await fixture.SendAsync(createInstructorCommand); //Act var deleteCommand = new Delete.Command { Id = createdInstructor.Id }; await fixture.SendAsync(deleteCommand); //Assert var instructorInDb = await fixture.ExecuteDbContextAsync(context => context .Instructors .FirstOrDefaultAsync(i => i.Id == createdInstructor.Id)); instructorInDb.ShouldBeNull(); }
public async Task ResponseReturnsCorrectData(SliceFixture fixture) { //Arrange var department = new Department { Name = "Some department" }; var course = new Course { Title = "Course", Credits = 3, Department = department }; await fixture.InsertAsync(course); var createInstructorCommand = new CreateEdit.Command { FirstName = "John", LastName = "Smith", HireDate = new DateTime(2012, 03, 01), SelectedCourses = new List <CourseInstructor>() { new CourseInstructor() { Course = course, CourseId = course.Id } } }; //Act var response = await fixture.SendAsync(createInstructorCommand); //Assert var instructorInDb = await fixture.ExecuteDbContextAsync(context => context .Instructors .Include(i => i.CourseInstructors) .ThenInclude(c => c.Course) .FirstOrDefaultAsync(c => c.Id == response.Id)); response.Id.ShouldBe(instructorInDb.Id); response.FirstName.ShouldBe(instructorInDb.FirstName); response.LastName.ShouldBe(instructorInDb.LastName); response.HireDate.ShouldBe(instructorInDb.HireDate); }
public async Task Should_create_new_instructor() { var englishDept = new Department { Name = "English", StartDate = DateTime.Today }; var english101 = new Course { Department = englishDept, Title = "English 101", Credits = 4, Id = NextCourseNumber() }; var english201 = new Course { Department = englishDept, Title = "English 201", Credits = 4, Id = NextCourseNumber() }; await InsertAsync(englishDept, english101, english201); var command = new CreateEdit.Command { FirstMidName = "Jerry", LastName = "Seinfeld", HireDate = DateTime.Today, OfficeAssignmentLocation = "Houston", SelectedCourses = new [] { english101.Id.ToString(), english201.Id.ToString() } }; var id = await SendAsync(command); var created = await ExecuteDbContextAsync( async db => await db.Instructors.Where(i => i.Id == id).Include(i => i.CourseAssignments).Include(i => i.OfficeAssignment).SingleOrDefaultAsync() ); created.FirstMidName.ShouldBe(command.FirstMidName); created.LastName.ShouldBe(command.LastName); created.HireDate.ShouldBe(command.HireDate.GetValueOrDefault()); created.OfficeAssignment.ShouldNotBeNull(); created.OfficeAssignment.Location.ShouldBe(command.OfficeAssignmentLocation); created.CourseAssignments.Count.ShouldBe(2); }
public async Task Should_query_for_command(Department dept, Course course, CreateEdit.Command command) { course.Id = 123; course.Department = dept; command.SelectedCourses = new[] { course.Id.ToString() }; var instructorId = await SendAsync(command); await InsertAsync(dept, course); var result = await SendAsync(new Delete.Query { Id = instructorId }); result.ShouldNotBeNull(); result.FirstMidName.ShouldBe(command.FirstMidName); result.OfficeAssignmentLocation.ShouldBe(command.OfficeAssignmentLocation); }
public async Task Should_create_new_course() { var adminId = await SendAsync(new ContosoUniversity.Features.Instructors.CreateEdit.Command { FirstMidName = "George", LastName = "Costanza", HireDate = DateTime.Today, }); var dept = new Department { Name = "History", InstructorID = adminId, Budget = 123m, StartDate = DateTime.Today }; CreateEdit.Command command = null; await ExecuteDbContextAsync(async (ctxt, mediator) => { await ctxt.Departments.AddAsync(dept); command = new CreateEdit.Command { Credits = 4, Department = dept, Number = NextCourseNumber(), Title = "English 101" }; await mediator.Send(command); }); var created = await ExecuteDbContextAsync(db => db.Courses.Where(c => c.Id == command.Number).SingleOrDefaultAsync()); created.ShouldNotBeNull(); created.DepartmentID.ShouldBe(dept.Id); created.Credits.ShouldBe(command.Credits); created.Title.ShouldBe(command.Title); }
private void UpdateDetails(CreateEdit.Command message) { FirstMidName = message.FirstMidName; LastName = message.LastName; HireDate = message.HireDate.GetValueOrDefault(); if (string.IsNullOrWhiteSpace(message.OfficeAssignmentLocation)) { OfficeAssignment = null; } else if (OfficeAssignment == null) { OfficeAssignment = new OfficeAssignment { Location = message.OfficeAssignmentLocation }; } else { OfficeAssignment.Location = message.OfficeAssignmentLocation; } }
public void Handle(CreateEdit.Command message) { UpdateDetails(message); UpdateInstructorCourses(message.Courses); }
public async Task Should_get_list_instructor_with_details(Department dept, Course course, Course course2, CreateEdit.Command instructor, CreateEdit.Command instructor2, Student student1, Student student2) { course.Id = 123; course.Department = dept; course2.Id = 456; course2.Department = dept; await InsertAsync(dept, course, course2); instructor.SelectedCourses = new[] { course.Id.ToString(), course2.Id.ToString() }; var instructor1Id = await SendAsync(instructor); await SendAsync(instructor2); await InsertAsync(student1, student2); var enrollment1 = new Enrollment { StudentID = student1.Id, CourseID = course.Id }; var enrollment2 = new Enrollment { StudentID = student2.Id, CourseID = course.Id }; await InsertAsync(enrollment1, enrollment2); var result = await SendAsync(new Index.Query { Id = instructor1Id, CourseID = course.Id }); result.ShouldNotBeNull(); result.Instructors.ShouldNotBeNull(); result.Instructors.Count.ShouldBe(2); result.Courses.ShouldNotBeNull(); result.Courses.Count.ShouldBe(2); result.Enrollments.ShouldNotBeNull(); result.Enrollments.Count.ShouldBe(2); }
public async Task CanEdit(SliceFixture fixture) { //Arrange var department = new Department { Name = "Some department" }; var course = new Course { Title = "Course", Credits = 3, Department = department }; var anotherDepartment = new Department { Name = "Another department" }; var anotherCourse = new Course { Title = "Another course", Credits = 2, Department = anotherDepartment }; await fixture.InsertAsync(course); await fixture.InsertAsync(anotherCourse); var createInstructorCommand = new CreateEdit.Command { FirstName = "John", LastName = "Smith", HireDate = new DateTime(2012, 03, 01), SelectedCourses = new List <CourseInstructor>() { new CourseInstructor() { Course = course, CourseId = course.Id } } }; var createdInstructor = await fixture.SendAsync(createInstructorCommand); //Act var editCommand = new CreateEdit.Command { Id = createdInstructor.Id, FirstName = "Carlos", LastName = "Mocha", HireDate = new DateTime(2011, 05, 01), SelectedCourses = new List <CourseInstructor>() { new CourseInstructor() { Course = anotherCourse, CourseId = anotherCourse.Id } } }; await fixture.SendAsync(editCommand); //Assert var instructorInDb = await fixture.ExecuteDbContextAsync(context => context .Instructors .Include(i => i.CourseInstructors) .ThenInclude(c => c.Course) .FirstOrDefaultAsync(i => i.Id == createdInstructor.Id)); instructorInDb.ShouldNotBeNull(); instructorInDb.Id.ShouldBe(createdInstructor.Id); instructorInDb.FirstName.ShouldBe(editCommand.FirstName); instructorInDb.LastName.ShouldBe(editCommand.LastName); instructorInDb.HireDate.ShouldBe((DateTime)editCommand.HireDate); instructorInDb.CourseInstructors.ElementAt(0).Course.Title.ShouldBe(anotherCourse.Title); instructorInDb.CourseInstructors.ElementAt(0).Course.Credits.ShouldBe(anotherCourse.Credits); instructorInDb.CourseInstructors.ElementAt(0).Course.DepartmentId.ShouldBe(anotherCourse.DepartmentId); }
public async Task Should_merge_course_instructors(Department dept, Course course, Course course2, CreateEdit.Command instructor, CreateEdit.Command command) { course.Id = 123; course.Department = dept; course2.Id = 456; course2.Department = dept; await InsertAsync(dept, course, course2); instructor.SelectedCourses = new[] { course.Id.ToString() }; var instructorId = await SendAsync(instructor); command.Id = instructorId; command.SelectedCourses = new[] { course2.Id.ToString() }; await SendAsync(command); var edited = await ExecuteDbContextAsync(db => db.Instructors.Where(i => i.Id == instructorId).Include(i => i.CourseInstructors).Include(i => i.OfficeAssignment).SingleOrDefaultAsync()); edited.FirstMidName.ShouldBe(command.FirstMidName); edited.LastName.ShouldBe(command.LastName); edited.HireDate.ShouldBe(command.HireDate.GetValueOrDefault()); edited.OfficeAssignment.ShouldNotBeNull(); edited.OfficeAssignment.Location.ShouldBe(command.OfficeAssignmentLocation); edited.CourseInstructors.Count.ShouldBe(1); edited.CourseInstructors.First().CourseID.ShouldBe(course2.Id); }
public async Task ListsAllInstructors(SliceFixture fixture) { //Arrange var department = new Department { Name = "Some department" }; var course = new Course { Title = "Course", Credits = 3, Department = department }; await fixture.InsertAsync(course); var createInstructorsCommands = new CreateEdit.Command[] { new CreateEdit.Command { FirstName = "John", LastName = "Smith", HireDate = new DateTime(2012, 03, 01), SelectedCourses = new List <CourseInstructor>() { new CourseInstructor() { CourseId = course.Id, Course = course } } }, new CreateEdit.Command { FirstName = "Marcus", LastName = "Ruhl", HireDate = new DateTime(2011, 04, 01), SelectedCourses = new List <CourseInstructor>() { new CourseInstructor() { CourseId = course.Id, Course = course } } }, }; foreach (var command in createInstructorsCommands) { await fixture.SendAsync(command); } var indexQuery = new Index.Query(); //Act var response = await fixture.SendAsync(indexQuery); //Assert response.ShouldNotBeNull(); response.Instructors.Count.ShouldBe(createInstructorsCommands.Length); response.Instructors.ElementAt(0).FirstName.ShouldBe(createInstructorsCommands[0].FirstName); response.Instructors.ElementAt(0).LastName.ShouldBe(createInstructorsCommands[0].LastName); response.Instructors.ElementAt(0).HireDate.ShouldBe((DateTime)createInstructorsCommands[0].HireDate); response.Instructors.ElementAt(0).Courses.Count.ShouldBe(createInstructorsCommands[0].SelectedCourses.Count); response.Instructors.ElementAt(0).Courses.ElementAt(0).Title .ShouldBe(createInstructorsCommands[0].SelectedCourses.ElementAt(0).Course.Title); response.Instructors.ElementAt(1).FirstName.ShouldBe(createInstructorsCommands[1].FirstName); response.Instructors.ElementAt(1).LastName.ShouldBe(createInstructorsCommands[1].LastName); response.Instructors.ElementAt(1).HireDate.ShouldBe((DateTime)createInstructorsCommands[1].HireDate); response.Instructors.ElementAt(1).Courses.Count.ShouldBe(createInstructorsCommands[1].SelectedCourses.Count); response.Instructors.ElementAt(1).Courses.ElementAt(0).Title .ShouldBe(createInstructorsCommands[1].SelectedCourses.ElementAt(0).Course.Title); }