Example #1
0
        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);
        }
Example #2
0
        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);
            //});
        }
Example #4
0
        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);
        }
Example #5
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);
        }
Example #8
0
        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();
        }
Example #9
0
        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);
        }
Example #10
0
        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);
        }
Example #11
0
        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);
        }
Example #12
0
        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);
        }
Example #13
0
        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;
            }
        }
Example #14
0
        public void Handle(CreateEdit.Command message)
        {
            UpdateDetails(message);

            UpdateInstructorCourses(message.Courses);
        }
Example #15
0
        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);
        }
Example #16
0
        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);
        }
Example #17
0
        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);
        }
Example #18
0
        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);
        }