/** * Construct. * * @param context $pagecontext The current page context. * @param framework_processor $processor The processor. * @param competency_framework $frameworkfrom Framework from. * @param competency_framework $frameworkto Framework to. * @param array $unmappedfrom Competencies from unmapped. * @param array $unmappedto Competencies to unmapped. */ public function __construct(context $pagecontext, framework_processor $processor, competency_framework $frameworkfrom, competency_framework $frameworkto, array $unmappedfrom = array(), array $unmappedto = array()) { if (!$processor->has_run()) { throw new \coding_exception('The processor has not run.'); } $this->pagecontext = $pagecontext; $this->processor = $processor; $this->unmappedfrom = $unmappedfrom; $this->unmappedto = $unmappedto; $this->frameworkfrom = $frameworkfrom; $this->frameworkto = $frameworkto; }
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']); }