Ejemplo n.º 1
0
 /**
  * Tests constructing and using condition.
  */
 public function test_usage()
 {
     global $CFG, $USER;
     $this->resetAfterTest();
     $CFG->enableavailability = true;
     // Erase static cache before test.
     condition::wipe_static_cache();
     // Make a test course and user.
     $generator = $this->getDataGenerator();
     $course = $generator->create_course();
     $user = $generator->create_user();
     $generator->enrol_user($user->id, $course->id);
     $info = new \core_availability\mock_info($course, $user->id);
     // Make 2 test groups, one in a grouping and one not.
     $grouping = $generator->create_grouping(array('courseid' => $course->id));
     $group1 = $generator->create_group(array('courseid' => $course->id, 'name' => 'G1!'));
     groups_assign_grouping($grouping->id, $group1->id);
     $group2 = $generator->create_group(array('courseid' => $course->id, 'name' => 'G2!'));
     // Do test (not in group).
     $cond = new condition((object) array('id' => (int) $group1->id));
     // Check if available (when not available).
     $this->assertFalse($cond->is_available(false, $info, true, $user->id));
     $information = $cond->get_description(false, false, $info);
     $this->assertRegExp('~You belong to.*G1!~', $information);
     $this->assertTrue($cond->is_available(true, $info, true, $user->id));
     // Add user to groups and refresh cache.
     groups_add_member($group1, $user);
     groups_add_member($group2, $user);
     get_fast_modinfo($course->id, 0, true);
     // Recheck.
     $this->assertTrue($cond->is_available(false, $info, true, $user->id));
     $this->assertFalse($cond->is_available(true, $info, true, $user->id));
     $information = $cond->get_description(false, true, $info);
     $this->assertRegExp('~do not belong to.*G1!~', $information);
     // Check group 2 works also.
     $cond = new condition((object) array('id' => (int) $group2->id));
     $this->assertTrue($cond->is_available(false, $info, true, $user->id));
     // What about an 'any group' condition?
     $cond = new condition((object) array());
     $this->assertTrue($cond->is_available(false, $info, true, $user->id));
     $this->assertFalse($cond->is_available(true, $info, true, $user->id));
     $information = $cond->get_description(false, true, $info);
     $this->assertRegExp('~do not belong to any~', $information);
     // Admin user doesn't belong to a group, but they can access it
     // either way (positive or NOT).
     $this->setAdminUser();
     $this->assertTrue($cond->is_available(false, $info, true, $USER->id));
     $this->assertTrue($cond->is_available(true, $info, true, $USER->id));
     // Group that doesn't exist uses 'missing' text.
     $cond = new condition((object) array('id' => $group2->id + 1000));
     $this->assertFalse($cond->is_available(false, $info, true, $user->id));
     $information = $cond->get_description(false, false, $info);
     $this->assertRegExp('~You belong to.*\\(Missing group\\)~', $information);
 }