Merge branch 'w30_MDL-40723_m26_creators' of https://github.com/skodak/moodle
This commit is contained in:
@@ -1545,6 +1545,131 @@ class accesslib_testcase extends advanced_testcase {
|
||||
$this->assertFalse(has_all_capabilities($sca, $coursecontext, 0));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if course creator future capability lookup works.
|
||||
*/
|
||||
public function test_guess_if_creator_will_have_course_capability() {
|
||||
global $DB, $CFG, $USER;
|
||||
|
||||
$this->resetAfterTest();
|
||||
|
||||
$category = $this->getDataGenerator()->create_category();
|
||||
$course = $this->getDataGenerator()->create_course(array('category'=>$category->id));
|
||||
|
||||
$syscontext = context_system::instance();
|
||||
$categorycontext = context_coursecat::instance($category->id);
|
||||
$coursecontext = context_course::instance($course->id);
|
||||
$studentrole = $DB->get_record('role', array('shortname'=>'student'), '*', MUST_EXIST);
|
||||
$teacherrole = $DB->get_record('role', array('shortname'=>'editingteacher'), '*', MUST_EXIST);
|
||||
$creatorrole = $DB->get_record('role', array('shortname'=>'coursecreator'), '*', MUST_EXIST);
|
||||
$managerrole = $DB->get_record('role', array('shortname'=>'manager'), '*', MUST_EXIST);
|
||||
|
||||
$this->assertEquals($teacherrole->id, $CFG->creatornewroleid);
|
||||
|
||||
$creator = $this->getDataGenerator()->create_user();
|
||||
$manager = $this->getDataGenerator()->create_user();
|
||||
role_assign($managerrole->id, $manager->id, $categorycontext);
|
||||
|
||||
$this->assertFalse(has_capability('moodle/course:view', $categorycontext, $creator));
|
||||
$this->assertFalse(has_capability('moodle/role:assign', $categorycontext, $creator));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $categorycontext, $creator));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $coursecontext, $creator));
|
||||
$this->assertFalse(guess_if_creator_will_have_course_capability('moodle/course:visibility', $categorycontext, $creator));
|
||||
$this->assertFalse(guess_if_creator_will_have_course_capability('moodle/course:visibility', $coursecontext, $creator));
|
||||
|
||||
$this->assertTrue(has_capability('moodle/role:assign', $categorycontext, $manager));
|
||||
$this->assertTrue(has_capability('moodle/course:visibility', $categorycontext, $manager));
|
||||
$this->assertTrue(has_capability('moodle/course:visibility', $coursecontext, $manager));
|
||||
$this->assertTrue(guess_if_creator_will_have_course_capability('moodle/course:visibility', $categorycontext, $manager->id));
|
||||
$this->assertTrue(guess_if_creator_will_have_course_capability('moodle/course:visibility', $coursecontext, $manager->id));
|
||||
|
||||
$this->assertEquals(0, $USER->id);
|
||||
$this->assertFalse(has_capability('moodle/course:view', $categorycontext));
|
||||
$this->assertFalse(has_capability('moodle/role:assign', $categorycontext));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $categorycontext));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $coursecontext));
|
||||
$this->assertFalse(guess_if_creator_will_have_course_capability('moodle/course:visibility', $categorycontext));
|
||||
$this->assertFalse(guess_if_creator_will_have_course_capability('moodle/course:visibility', $coursecontext));
|
||||
|
||||
$this->setUser($manager);
|
||||
$this->assertTrue(has_capability('moodle/role:assign', $categorycontext));
|
||||
$this->assertTrue(has_capability('moodle/course:visibility', $categorycontext));
|
||||
$this->assertTrue(has_capability('moodle/course:visibility', $coursecontext));
|
||||
$this->assertTrue(guess_if_creator_will_have_course_capability('moodle/course:visibility', $categorycontext));
|
||||
$this->assertTrue(guess_if_creator_will_have_course_capability('moodle/course:visibility', $coursecontext));
|
||||
|
||||
$this->setAdminUser();
|
||||
$this->assertTrue(has_capability('moodle/role:assign', $categorycontext));
|
||||
$this->assertTrue(has_capability('moodle/course:visibility', $categorycontext));
|
||||
$this->assertTrue(has_capability('moodle/course:visibility', $coursecontext));
|
||||
$this->assertTrue(guess_if_creator_will_have_course_capability('moodle/course:visibility', $categorycontext));
|
||||
$this->assertTrue(guess_if_creator_will_have_course_capability('moodle/course:visibility', $coursecontext));
|
||||
$this->setUser(0);
|
||||
|
||||
role_assign($creatorrole->id, $creator->id, $categorycontext);
|
||||
|
||||
$this->assertFalse(has_capability('moodle/role:assign', $categorycontext, $creator));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $categorycontext, $creator));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $coursecontext, $creator));
|
||||
$this->assertTrue(guess_if_creator_will_have_course_capability('moodle/course:visibility', $categorycontext, $creator));
|
||||
$this->assertTrue(guess_if_creator_will_have_course_capability('moodle/course:visibility', $coursecontext, $creator));
|
||||
|
||||
$this->setUser($creator);
|
||||
$this->assertFalse(has_capability('moodle/role:assign', $categorycontext, null));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $categorycontext, null));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $coursecontext, null));
|
||||
$this->assertTrue(guess_if_creator_will_have_course_capability('moodle/course:visibility', $categorycontext, null));
|
||||
$this->assertTrue(guess_if_creator_will_have_course_capability('moodle/course:visibility', $coursecontext, null));
|
||||
$this->setUser(0);
|
||||
|
||||
set_config('creatornewroleid', $studentrole->id);
|
||||
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $categorycontext, $creator));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $coursecontext, $creator));
|
||||
$this->assertFalse(guess_if_creator_will_have_course_capability('moodle/course:visibility', $categorycontext, $creator));
|
||||
$this->assertFalse(guess_if_creator_will_have_course_capability('moodle/course:visibility', $coursecontext, $creator));
|
||||
|
||||
set_config('creatornewroleid', $teacherrole->id);
|
||||
|
||||
role_change_permission($managerrole->id, $categorycontext, 'moodle/course:visibility', CAP_PREVENT);
|
||||
role_assign($creatorrole->id, $manager->id, $categorycontext);
|
||||
|
||||
$this->assertTrue(has_capability('moodle/course:view', $categorycontext, $manager));
|
||||
$this->assertTrue(has_capability('moodle/course:view', $coursecontext, $manager));
|
||||
$this->assertTrue(has_capability('moodle/role:assign', $categorycontext, $manager));
|
||||
$this->assertTrue(has_capability('moodle/role:assign', $coursecontext, $manager));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $categorycontext, $manager));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $coursecontext, $manager));
|
||||
$this->assertFalse(guess_if_creator_will_have_course_capability('moodle/course:visibility', $categorycontext, $manager));
|
||||
$this->assertFalse(guess_if_creator_will_have_course_capability('moodle/course:visibility', $coursecontext, $manager));
|
||||
|
||||
role_change_permission($managerrole->id, $categorycontext, 'moodle/course:view', CAP_PREVENT);
|
||||
$this->assertTrue(has_capability('moodle/role:assign', $categorycontext, $manager));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $categorycontext, $manager));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $coursecontext, $manager));
|
||||
$this->assertTrue(guess_if_creator_will_have_course_capability('moodle/course:visibility', $categorycontext, $manager));
|
||||
$this->assertTrue(guess_if_creator_will_have_course_capability('moodle/course:visibility', $coursecontext, $manager));
|
||||
|
||||
$this->getDataGenerator()->enrol_user($manager->id, $course->id, 0);
|
||||
|
||||
$this->assertTrue(has_capability('moodle/role:assign', $categorycontext, $manager));
|
||||
$this->assertTrue(has_capability('moodle/role:assign', $coursecontext, $manager));
|
||||
$this->assertTrue(is_enrolled($coursecontext, $manager));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $categorycontext, $manager));
|
||||
$this->assertFalse(has_capability('moodle/course:visibility', $coursecontext, $manager));
|
||||
$this->assertTrue(guess_if_creator_will_have_course_capability('moodle/course:visibility', $categorycontext, $manager));
|
||||
$this->assertFalse(guess_if_creator_will_have_course_capability('moodle/course:visibility', $coursecontext, $manager));
|
||||
|
||||
// Test problems.
|
||||
|
||||
try {
|
||||
guess_if_creator_will_have_course_capability('moodle/course:visibility', $syscontext, $creator);
|
||||
$this->fail('Exception expected when non course/category context passed to guess_if_creator_will_have_course_capability()');
|
||||
} catch (moodle_exception $e) {
|
||||
$this->assertInstanceOf('coding_exception', $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test require_capability() exceptions.
|
||||
* @return void
|
||||
|
||||
Reference in New Issue
Block a user