public function test_permission_exception() { global $DB; if ($DB->get_dbfamily() === 'postgres' or $DB->get_dbfamily() === 'mssql') { $this->markTestSkipped('The processor is having issues with the transaction initialised in ' . 'advanced_testcase::runBare().'); return; } $dg = $this->getDataGenerator(); $u = $dg->create_user(); $role = $dg->create_role(); $sysctx = context_system::instance(); $dg->enrol_user($u->id, $this->c1->id, 'editingteacher'); $dg->enrol_user($u->id, $this->c2->id, 'editingteacher'); assign_capability('moodle/competency:coursecompetencymanage', CAP_PROHIBIT, $role, $sysctx->id); role_assign($role, $u->id, context_course::instance($this->c1->id)->id); role_assign($role, $u->id, context_module::instance($this->cms[$this->c2->id]['F1']->cmid)->id); accesslib_clear_all_caches_for_unit_testing(); $this->setUser($u); // Do C1 first. $mapper = new framework_mapper($this->f1->get_id(), $this->f2->get_id()); $mapper->automap(); $processor = new framework_processor($mapper); $processor->set_allowedcourses(array($this->c1->id)); $processor->proceed(); $this->assertEquals(1, $processor->get_courses_found_count()); $this->assertEquals(3, $processor->get_expected_course_competency_migrations()); $this->assertEquals(0, $processor->get_course_competency_migrations()); $this->assertEquals(0, $processor->get_course_competency_removals()); $this->assertEquals(2, $processor->get_cms_found_count()); $this->assertEquals(3, $processor->get_expected_module_competency_migrations()); $this->assertEquals(0, $processor->get_module_competency_migrations()); $this->assertEquals(0, $processor->get_module_competency_removals()); $this->assertEquals(array(), $processor->get_warnings()); $errors = $processor->get_errors(); $this->assertCount(2, $errors); $this->assertEquals($this->c1->id, $errors[0]['courseid']); $this->assertEquals($this->f1comps['A1']->get_id(), $errors[0]['competencyid']); $this->assertEquals(null, $errors[0]['cmid']); $this->assertRegexp('/Sorry, but you do not currently have permissions to do that/', $errors[0]['message']); $this->assertEquals($this->f1comps['A3']->get_id(), $errors[1]['competencyid']); $this->assertCourseCompetencyNotMigrated($this->c1, $this->f1comps['A1'], $this->f2comps['A1']); $this->assertCourseCompetencyNotMigrated($this->c1, $this->f1comps['A3'], $this->f2comps['A3']); $this->assertModuleCompetencyNotMigrated($this->cms[$this->c1->id]['F1'], $this->f1comps['A1'], $this->f2comps['A1']); $this->assertModuleCompetencyNotMigrated($this->cms[$this->c1->id]['P1'], $this->f1comps['A3'], $this->f2comps['A3']); // Do C2 now. $processor = new framework_processor($mapper); $processor->set_allowedcourses(array($this->c2->id)); $processor->proceed(); $this->assertEquals(1, $processor->get_courses_found_count()); $this->assertEquals(2, $processor->get_expected_course_competency_migrations()); $this->assertEquals(2, $processor->get_course_competency_migrations()); $this->assertEquals(0, $processor->get_course_competency_removals()); $this->assertEquals(1, $processor->get_cms_found_count()); $this->assertEquals(2, $processor->get_expected_module_competency_migrations()); $this->assertEquals(0, $processor->get_module_competency_migrations()); $this->assertEquals(0, $processor->get_module_competency_removals()); $this->assertEquals(array(), $processor->get_warnings()); $errors = $processor->get_errors(); $this->assertCount(2, $errors); $this->assertEquals($this->c2->id, $errors[0]['courseid']); $this->assertEquals($this->f1comps['A2']->get_id(), $errors[0]['competencyid']); $this->assertEquals($this->cms[$this->c2->id]['F1']->cmid, $errors[0]['cmid']); $this->assertRegexp('/Sorry, but you do not currently have permissions to do that/', $errors[0]['message']); $this->assertEquals($this->f1comps['A3']->get_id(), $errors[1]['competencyid']); // The new competencies were added to the course, but the old ones were not removed because they are still in modules. $this->assertCourseCompetencyExists($this->c2, $this->f1comps['A2']); $this->assertCourseCompetencyExists($this->c2, $this->f1comps['A3']); $this->assertCourseCompetencyExists($this->c2, $this->f2comps['A2']); $this->assertCourseCompetencyExists($this->c2, $this->f2comps['A3']); // Module competencies were not migrated because permissions are lacking. $this->assertModuleCompetencyNotMigrated($this->cms[$this->c2->id]['F1'], $this->f1comps['A2'], $this->f2comps['A2']); $this->assertModuleCompetencyNotMigrated($this->cms[$this->c2->id]['F1'], $this->f1comps['A3'], $this->f2comps['A2']); }