You are here

public function CourseGradeTestCase::testCourseGradeAccess in Course 7.2

Same name and namespace in other branches
  1. 6 tests/CourseGradeTestCase.test \CourseGradeTestCase::testCourseGradeAccess()
  2. 7 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);
  $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($this->student_user)
    ->setOption('grade_result', 79)
    ->setComplete(1)
    ->save();
  $course
    ->getTracker($this->student_user)
    ->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($this->student_user)
    ->setOption('grade_result', 91)
    ->setComplete(1)
    ->save();
  $course
    ->getTracker($this->student_user)
    ->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($this->student_user)
    ->setOption('grade_result', 80)
    ->setComplete(1)
    ->save();
  $course
    ->getTracker($this->student_user)
    ->track();
  $this
    ->assertTrue($co2
    ->access('take', $this->student_user), 'User can take course object with required grade.');
}