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;
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }