예제 #1
0
        public async Task RegisterStudentForCourseAsync_returns_message_noStudentfound()
        {
            //Arrange
            var _courseRepository  = new Mock <ICourseRepository>();
            var _studentRepository = new Mock <IStudentRepository>();

            var testStudent = new Student
            {
                Id           = 2,
                SubjectCount = 4,
            };

            var testCourse = new Course
            {
                CourseId = 1,
                Capacity = 20,
                Enrolled = 18,
            };

            var request = new RegisterStudentForCourseRequest
            {
                CourseId  = testCourse.CourseId,
                StudentId = testStudent.Id
            };

            _studentRepository.Setup(s => s.GetStudentInformationAsync(testStudent.Id)).Returns(Task.FromResult <Student>(null));
            _courseRepository.Setup(c => c.GetCourseInformation(testCourse.CourseId)).Returns(testCourse);
            _courseRepository.Setup(c => c.SaveRegisterationOfStudentForCourse(testCourse, request, testStudent)).Returns(Task.FromResult(true));

            var sut = new CourseService(_courseRepository.Object, _studentRepository.Object);
            //Act and Assert
            var exception = await Assert.ThrowsAsync <StudentCourseRegistrationException>(() => sut.RegisterStudentForCourseAsync(request));

            Assert.Equal("Student Not Found", exception.Message);
        }
예제 #2
0
        public async Task <ActionResult <bool> > RegisterStudentForCourse([FromBody] RegisterStudentForCourseRequest registerStudent)
        {
            try
            {
                var result = await _courseService.RegisterStudentForCourseAsync(registerStudent);

                return(Ok(result));
            }
            catch (StudentCourseRegistrationException cex)
            {
                var response = new Response(cex.Message);
                return(BadRequest(response));
            }
        }
예제 #3
0
        /// <summary>
        /// Save student registeration for the course
        /// </summary>
        /// <param name="course"></param>
        /// <param name="registerStudent"></param>
        /// <param name="student"></param>
        /// <returns></returns>
        public async Task <bool> SaveRegisterationOfStudentForCourse(Course course, RegisterStudentForCourseRequest registerStudent, Student student)
        {
            var enrollment = new Enrollment
            {
                CourseId  = registerStudent.CourseId,
                StudentId = registerStudent.StudentId
            };

            await IncrementCourseCountAsync(course);
            await IncrementStudentSubjectCount(student);

            _context.Enrollments.Add(enrollment);
            var success = await _context.SaveChangesAsync() > 0;

            return(success);
        }
        /// <summary>
        /// Registers Students for a course
        /// </summary>
        /// <param name="registerStudent"></param>
        /// <returns></returns>
        public async Task <bool> RegisterStudentForCourseAsync(RegisterStudentForCourseRequest registerStudent)
        {
            var student = await _studentRepository.GetStudentInformationAsync(registerStudent.StudentId);

            student
            .EnsureNotNull("Student Not Found")
            .EnsureNotAlreadyRegistered(registerStudent.CourseId)
            .EnsureStudentHasNotEnrolledMaxAmount();

            var course = _courseRepository.GetCourseInformation(registerStudent.CourseId);

            course
            .EnsureNotNull("Course Not Found")
            .EnsureCapacityNotFull();

            return(await _courseRepository.SaveRegisterationOfStudentForCourse(course, registerStudent, student));
        }
예제 #5
0
        public async Task RegisterStudentForCourseAsync_returns_ok_successfully_registered()
        {
            //Arrange
            var _courseRepository  = new Mock <ICourseRepository>();
            var _studentRepository = new Mock <IStudentRepository>();

            var testStudent = new Student
            {
                Id           = 2,
                SubjectCount = 4,
                Enrollments  = new List <Enrollment>
                {
                    new Enrollment {
                        CourseId = 3
                    }
                }
            };

            var testCourse = new Course
            {
                CourseId = 1,
                Capacity = 20,
                Enrolled = 18,
            };

            var request = new RegisterStudentForCourseRequest
            {
                CourseId  = testCourse.CourseId,
                StudentId = testStudent.Id
            };

            _studentRepository.Setup(s => s.GetStudentInformationAsync(testStudent.Id)).Returns(Task.FromResult(testStudent));
            _courseRepository.Setup(c => c.GetCourseInformation(testCourse.CourseId)).Returns(testCourse);
            _courseRepository.Setup(c => c.SaveRegisterationOfStudentForCourse(testCourse, request, testStudent)).Returns(Task.FromResult(true));

            var sut = new CourseService(_courseRepository.Object, _studentRepository.Object);

            //Act
            var response = await sut.RegisterStudentForCourseAsync(request);

            //Assert
            Assert.True(response, "Register Student Returned False");
        }
        public async Task POST_ReturnsError_WhenStudentDoesnotExistForRegistrationUnSuccessful()
        {
            //Arrange
            var request = new RegisterStudentForCourseRequest
            {
                StudentId = 1,
                CourseId  = 100
            };

            var requestJson = JsonConvert.SerializeObject(request);
            var body        = new StringContent(requestJson, Encoding.UTF8, "application/json");

            //Act
            var response = await TestClient.PostAsync("/api/course", body);

            var resultString = await response.Content.ReadAsStringAsync();

            var result = JsonConvert.DeserializeObject <StudentCourseRegistrationException>(resultString);

            Assert.Equal("Course Not Found", result.Message);
        }
        public async Task POST_ReturnsTrue_WhenStudentRegistrationIsSuccessful()
        {
            //Arrange
            var request = new RegisterStudentForCourseRequest
            {
                StudentId = 1,
                CourseId  = 5,
            };

            var requestJson = JsonConvert.SerializeObject(request);
            var body        = new StringContent(requestJson, Encoding.UTF8, "application/json");

            //Act
            var response = await TestClient.PostAsync("/api/course", body);

            //Assert
            Assert.True(response.IsSuccessStatusCode, response.ReasonPhrase);

            var resultString = await response.Content.ReadAsStringAsync();

            var result = JsonConvert.DeserializeObject <bool>(resultString);

            Assert.True(result);
        }