public function CourseGradeTestCase::testCourseGradeAccess in Course 7
Same name and namespace in other branches
- 6 tests/CourseGradeTestCase.test \CourseGradeTestCase::testCourseGradeAccess()
- 7.2 tests/CourseGradeTestCase.test \CourseGradeTestCase::testCourseGradeAccess()
Test that the course grade access plugin functions properly.
File
- tests/CourseGradeTestCase.test, line 50 
Class
- CourseGradeTestCase
- Tests for Course grade.
Code
public function testCourseGradeAccess() {
  $courseNode = $this
    ->createCourseNode();
  // Create a graded course objects.
  $this
    ->createCourseObject($courseNode, TRUE);
  // Add a non-graded course object.
  $this
    ->createCourseObject($courseNode);
  // Reload the course from DB.
  $course = course_get_course($courseNode, $this->student_user, TRUE);
  $courseObjects = array_values($course
    ->getObjects());
  $co1 = $courseObjects[0];
  $co2 = $courseObjects[1];
  // Set object 1 to be included in the course grade.
  $co1
    ->setOption('grade_include', TRUE)
    ->save();
  // Set object 2 to require a course grade of 80.
  $co2
    ->addOptions(array(
    'plugins' => array(
      'access' => array(
        'grade' => array(
          'course_grade_range' => array(
            'low' => 80,
            'high' => 90,
          ),
        ),
      ),
    ),
  ))
    ->save();
  // Enroll the user.
  course_enroll($courseNode, $this->student_user);
  // Complete but don't hit the low grade requirement.
  $course
    ->getObjects()[1]
    ->getFulfillment()
    ->setOption('grade_result', 79)
    ->setComplete(1)
    ->save();
  $course
    ->getTracker()
    ->track();
  $this
    ->assertFalse($co2
    ->access('take', $this->student_user), 'User cannot take course object with lower grade.');
  // Complete but don't hit the high grade requirement.
  $course
    ->getObjects()[1]
    ->getFulfillment()
    ->setOption('grade_result', 91)
    ->setComplete(1)
    ->save();
  $course
    ->getTracker()
    ->track();
  $this
    ->assertFalse($co2
    ->access('take', $this->student_user), 'User cannot take course object with higher grade.');
  // Hit the grade requirement.
  $course
    ->getObjects()[1]
    ->getFulfillment()
    ->setOption('grade_result', 80)
    ->setComplete(1)
    ->save();
  $course
    ->getTracker()
    ->track();
  $this
    ->assertTrue($co2
    ->access('take', $this->student_user), 'User can take course object with required grade.');
}