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); }
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)); } }
/// <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)); }
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); }