예제 #1
0
        public void ValidStudentEnrollment_Should_EnrollStudentInCourse()
        {
            // ARRANGE
            var courseId  = 1;
            var studentId = 1;

            var mockCourseRepository = new MockCourseRepository();

            mockCourseRepository.GetIncludingProfessorsStudents(courseId, new Course
            {
                Students = new List <Student>(),
                Credits  = 2
            });

            var mockStudent = new Student
            {
                Courses = new List <Course>
                {
                    new Course
                    {
                        Credits = 1
                    }
                }
            };
            var mockStudentRepository = new MockStudentRepository();

            mockStudentRepository.GetIncludingCourses(studentId, mockStudent);

            // ACT
            var enrollmentService = new EnrollmentService(mockCourseRepository.Object, mockStudentRepository.Object);
            var result            = enrollmentService.Enroll(1, 1);

            // ASSERT
            result.Should().BeEmpty("Successfully enrolling in a course should not return validation errors");
        }
        public async Task <IHttpActionResult> postEnroll(string studentId, int classId)
        {
            try
            {
                if (User.Identity.GetUserId() != studentId && !User.IsInRole("admin"))
                {
                    throw new AuthenticationException();
                }

                await _enrollments.Enroll(studentId, classId);

                return(Ok());
            }
            catch (AuthenticationException)
            {
                ModelState.AddModelError("Authorization", "You don't have authority to enroll this student.");
            }
            catch (StudentAlreadyEnrolledException)
            {
                ModelState.AddModelError("StudentAlreadyEnrolledException"
                                         , User.Identity.GetUserId() == studentId
                    ? "You're already enrolled in this class."
                    : "Student's already enrolled in this class.");
            }

            return(BadRequest(ModelState));
        }
예제 #3
0
        public void Student_ShouldOnlyBeAbleToEnroll_InCourseWithLessThanTenCredits(int courseCredits, int studentCredits, bool shouldAllowEnrollment)
        {
            // ARRANGE
            var courseId  = 1;
            var studentId = 1;

            // Course to enroll in
            var mockCourseRepository = new MockCourseRepository();

            mockCourseRepository.GetIncludingProfessorsStudents(courseId, new Course
            {
                Students = new List <Student>(),
                Credits  = courseCredits
            });

            var mockStudent = new Student
            {
                Courses = new List <Course>
                {
                    new Course
                    {
                        Credits = studentCredits
                    }
                }
            };
            var mockStudentRepository = new MockStudentRepository();

            mockStudentRepository.GetIncludingCourses(studentId, mockStudent);

            // ACT
            var enrollmentService = new EnrollmentService(mockCourseRepository.Object, mockStudentRepository.Object);
            var result            = enrollmentService.Enroll(1, 1);

            // ASSERT
            if (shouldAllowEnrollment)
            {
                result.Should().BeEmpty();
            }
            else
            {
                result.First().Should().BeEquivalentTo("Student is already enrolled in more than 10 credits of courses");
            }
        }