public async Task AssignStudentToCourse(Guid courseId, Guid studentId) { var courseStudentEntity = new CourseStudentEntity { CourseId = courseId, StudentId = studentId }; await _appDataContext.CourseStudents.AddAsync(courseStudentEntity); try { await _appDataContext.SaveChangesAsync(); } catch { if (await _appDataContext.CourseStudents.SingleOrDefaultAsync(entity => entity.CourseId == courseId && entity.StudentId == studentId) != null) { throw new ArgumentOutOfRangeException(nameof(studentId), studentId, "Specified student is already assigned to this course."); } if (!await DoesExist(courseId)) { throw new ArgumentOutOfRangeException(nameof(courseId), courseId, "Course with specified id does not exist."); } if (!await _studentEntitiesRepository.DoesExist(studentId)) { throw new ArgumentOutOfRangeException(nameof(studentId), studentId, "Student with specified id does not exist."); } throw; } }
public async Task Can_Get_Courses_For_Student() { // arrange var course = _fixture.CourseFaker.Generate(); _fixture.Context.Courses.Add(course); var student = _fixture.StudentFaker.Generate(); _fixture.Context.Students.Add(student); var reg = new CourseStudentEntity(course, student); _fixture.Context.Registrations.Add(reg); _fixture.Context.SaveChanges(); var route = $"/api/v1/students/{student.Id}/courses"; // act var response = await _fixture.SendAsync("GET", route, null); var responseBody = await response.Content.ReadAsStringAsync(); var deserializedBody = _fixture.Server.GetService <IJsonApiDeSerializer>() .DeserializeList <CourseResource>(responseBody); // assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotNull(deserializedBody); Assert.NotEmpty(deserializedBody); }
public async Task Can_Get_Course_With_Relationships() { // arrange var dept = _fixture.DepartmentFaker.Generate(); _fixture.Context.Departments.Add(dept); var course = _fixture.CourseFaker.Generate(); course.Department = dept; _fixture.Context.Courses.Add(course); var student = _fixture.StudentFaker.Generate(); _fixture.Context.Students.Add(student); var reg = new CourseStudentEntity(course, student); _fixture.Context.Registrations.Add(reg); _fixture.Context.SaveChanges(); var route = $"/api/v1/courses/{course.Id}?include=students,department"; // act var(response, data) = await _fixture.GetAsync <CourseResource>(route); // assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotNull(data); Assert.Equal(course.Number, data.Number); Assert.Equal(course.Title, data.Title); Assert.Equal(course.Description, data.Description); Assert.NotEmpty(data.Students); Assert.NotNull(data.Students[0]); Assert.Equal(student.Id, data.Students[0].Id); Assert.Equal(student.LastName, data.Students[0].LastName); Assert.NotNull(data.Department); Assert.Equal(dept.Id, data.Department.Id); Assert.Equal(dept.Name, data.Department.Name); }
public async Task Can_Get_Student_With_Relationships() { // arrange var course = _fixture.CourseFaker.Generate(); _fixture.Context.Courses.Add(course); _fixture.Context.SaveChanges(); var student = _fixture.StudentFaker.Generate(); _fixture.Context.Students.Add(student); _fixture.Context.SaveChanges(); var reg = new CourseStudentEntity(course, student); _fixture.Context.Registrations.Add(reg); _fixture.Context.SaveChanges(); var httpMethod = new HttpMethod("GET"); var route = $"/api/v1/students/{student.Id}?include=courses"; var request = new HttpRequestMessage(httpMethod, route); // act var response = await _fixture.Server.CreateClient().SendAsync(request); var responseBody = await response.Content.ReadAsStringAsync(); var deserializedBody = (StudentResource)_fixture.Server.GetService <IJsonApiDeSerializer>() .Deserialize(responseBody); // assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotNull(deserializedBody); Assert.Equal(student.FirstName, deserializedBody.FirstName); Assert.Equal(student.LastName, deserializedBody.LastName); Assert.NotEmpty(deserializedBody.Courses); }
protected override void OnModelCreating(ModelBuilder modelBuilder) { #region FluentConfiguration modelBuilder.Entity <CourseStudentEntity>().HasKey(courseStudentEntity => new { courseStudentEntity.StudentId, courseStudentEntity.CourseId }); #endregion #region SeedConfiguration CourseEntity mathCourseEntity = new CourseEntity { Id = Guid.NewGuid(), Title = "Math" }, programmingCourseEntity = new CourseEntity { Id = Guid.NewGuid(), Title = "Programming" }; StudentEntity laskovStudentEntity = new StudentEntity { Id = Guid.NewGuid(), FirstName = "Sviat", LastName = "Laskov" }, petrovStudentEntity = new StudentEntity { Id = Guid.NewGuid(), FirstName = "Ivan", LastName = "Petrov" }; CourseStudentEntity mathCoursePetrovStudentEntity = new CourseStudentEntity { CourseId = mathCourseEntity.Id, StudentId = petrovStudentEntity.Id }, programmingCourseLaskovStudentEntity = new CourseStudentEntity { CourseId = programmingCourseEntity.Id, StudentId = laskovStudentEntity.Id }, programmingCoursePetrovStudentEntity = new CourseStudentEntity { CourseId = programmingCourseEntity.Id, StudentId = petrovStudentEntity.Id }; modelBuilder.Entity <CourseEntity>().HasData(mathCourseEntity, programmingCourseEntity); modelBuilder.Entity <StudentEntity>().HasData(laskovStudentEntity, petrovStudentEntity); modelBuilder.Entity <CourseStudentEntity>().HasData(mathCoursePetrovStudentEntity, programmingCourseLaskovStudentEntity, programmingCoursePetrovStudentEntity); #endregion base.OnModelCreating(modelBuilder); }