You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2686 lines
151 KiB
2686 lines
151 KiB
2 years ago
|
<?php
|
||
|
// This file is part of Moodle - http://moodle.org/
|
||
|
//
|
||
|
// Moodle is free software: you can redistribute it and/or modify
|
||
|
// it under the terms of the GNU General Public License as published by
|
||
|
// the Free Software Foundation, either version 3 of the License, or
|
||
|
// (at your option) any later version.
|
||
|
//
|
||
|
// Moodle is distributed in the hope that it will be useful,
|
||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
// GNU General Public License for more details.
|
||
|
//
|
||
|
// You should have received a copy of the GNU General Public License
|
||
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
/**
|
||
|
* Data provider tests.
|
||
|
*
|
||
|
* @package core_competency
|
||
|
* @category test
|
||
|
* @copyright 2018 Frédéric Massart
|
||
|
* @author Frédéric Massart <fred@branchup.tech>
|
||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||
|
*/
|
||
|
|
||
|
defined('MOODLE_INTERNAL') || die();
|
||
|
global $CFG, $DB;
|
||
|
|
||
|
use core_privacy\tests\provider_testcase;
|
||
|
use core_privacy\local\request\contextlist;
|
||
|
use core_privacy\local\request\approved_contextlist;
|
||
|
use core_privacy\local\request\approved_userlist;
|
||
|
use core_privacy\local\request\transform;
|
||
|
use core_privacy\local\request\userlist;
|
||
|
use core_privacy\local\request\writer;
|
||
|
use core_competency\api;
|
||
|
use core_competency\privacy\provider;
|
||
|
|
||
|
/**
|
||
|
* Data provider testcase class.
|
||
|
*
|
||
|
* @package core_competency
|
||
|
* @category test
|
||
|
* @copyright 2018 Frédéric Massart
|
||
|
* @author Frédéric Massart <fred@branchup.tech>
|
||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||
|
*/
|
||
|
class core_competency_privacy_testcase extends provider_testcase {
|
||
|
|
||
|
public function setUp() {
|
||
|
global $PAGE;
|
||
|
$this->resetAfterTest();
|
||
|
|
||
|
// We need this or exporters (core\external\exporter) do not receive the right renderer.
|
||
|
$PAGE->get_renderer('core');
|
||
|
}
|
||
|
|
||
|
public function test_get_contexts_for_userid_with_usermodified_for_framework() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$cat1 = $dg->create_category();
|
||
|
$cat2 = $dg->create_category();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
|
||
|
$sysctx = context_system::instance();
|
||
|
$cat1ctx = context_coursecat::instance($cat1->id);
|
||
|
$cat2ctx = context_coursecat::instance($cat2->id);
|
||
|
|
||
|
// Test recovery through framework context.
|
||
|
$this->setUser($u1);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), []);
|
||
|
$f1 = $ccg->create_framework();
|
||
|
$contextlist = provider::get_contexts_for_userid($u1->id);
|
||
|
$this->assert_contextlist($contextlist, [$sysctx]);
|
||
|
$f2 = $ccg->create_framework(['contextid' => $cat1ctx->id]);
|
||
|
$contextlist = provider::get_contexts_for_userid($u1->id);
|
||
|
$this->assert_contextlist($contextlist, [$sysctx, $cat1ctx]);
|
||
|
|
||
|
// Test recovery of category context alone.
|
||
|
$this->setUser($u2);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
|
||
|
$ccg->create_framework(['contextid' => $cat2ctx->id]);
|
||
|
$contextlist = provider::get_contexts_for_userid($u2->id);
|
||
|
$this->assert_contextlist($contextlist, [$cat2ctx]);
|
||
|
|
||
|
// Test recovery through competency.
|
||
|
$this->setUser($u3);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
|
||
|
$c1 = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
|
||
|
$c2 = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
|
||
|
$c3 = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
|
||
|
$contextlist = provider::get_contexts_for_userid($u3->id);
|
||
|
$this->assert_contextlist($contextlist, [$sysctx]);
|
||
|
$c4 = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
|
||
|
$c5 = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
|
||
|
$c6 = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
|
||
|
$contextlist = provider::get_contexts_for_userid($u3->id);
|
||
|
$this->assert_contextlist($contextlist, [$sysctx, $cat1ctx]);
|
||
|
|
||
|
// Test recovery through related competency.
|
||
|
$this->setUser($u4);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
|
||
|
$cr = $ccg->create_related_competency(['competencyid' => $c1->get('id'), 'relatedcompetencyid' => $c2->get('id')]);
|
||
|
$contextlist = provider::get_contexts_for_userid($u4->id);
|
||
|
$this->assert_contextlist($contextlist, [$sysctx]);
|
||
|
$cr = $ccg->create_related_competency(['competencyid' => $c4->get('id'), 'relatedcompetencyid' => $c5->get('id')]);
|
||
|
$contextlist = provider::get_contexts_for_userid($u4->id);
|
||
|
$this->assert_contextlist($contextlist, [$sysctx, $cat1ctx]);
|
||
|
}
|
||
|
|
||
|
public function test_get_users_in_context_with_usermodified_for_framework() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$cat1 = $dg->create_category();
|
||
|
$cat2 = $dg->create_category();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
|
||
|
$sysctx = context_system::instance();
|
||
|
$cat1ctx = context_coursecat::instance($cat1->id);
|
||
|
$cat2ctx = context_coursecat::instance($cat2->id);
|
||
|
|
||
|
// Add frameworks.
|
||
|
$this->setUser($u1);
|
||
|
$f1 = $ccg->create_framework();
|
||
|
$f2 = $ccg->create_framework(['contextid' => $cat1ctx->id]);
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
$ccg->create_framework(['contextid' => $cat2ctx->id]);
|
||
|
|
||
|
// Add competencies.
|
||
|
$this->setUser($u3);
|
||
|
$c1 = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
|
||
|
$c2 = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
|
||
|
$c3 = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
|
||
|
$c4 = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
|
||
|
$c5 = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
|
||
|
$c6 = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
|
||
|
|
||
|
// Add related competencies.
|
||
|
$this->setUser($u4);
|
||
|
$cr = $ccg->create_related_competency(['competencyid' => $c1->get('id'), 'relatedcompetencyid' => $c2->get('id')]);
|
||
|
$cr = $ccg->create_related_competency(['competencyid' => $c4->get('id'), 'relatedcompetencyid' => $c5->get('id')]);
|
||
|
|
||
|
// Test correct users appear in each context.
|
||
|
$component = 'core_competency';
|
||
|
|
||
|
$userlist = new userlist($sysctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$expected = [$u1->id, $u3->id, $u4->id];
|
||
|
$this->assert_array_match($expected, $userlist->get_userids());
|
||
|
|
||
|
$userlist = new userlist($cat1ctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$expected = [$u1->id, $u3->id, $u4->id];
|
||
|
$this->assert_array_match($expected, $userlist->get_userids());
|
||
|
|
||
|
$userlist = new userlist($cat2ctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$expected = [$u2->id];
|
||
|
$this->assert_array_match($expected, $userlist->get_userids());
|
||
|
}
|
||
|
|
||
|
public function test_get_contexts_for_userid_with_usermodified_for_template() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$cat1 = $dg->create_category();
|
||
|
$cat2 = $dg->create_category();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
$cohort = $dg->create_cohort();
|
||
|
|
||
|
$sysctx = context_system::instance();
|
||
|
$cat1ctx = context_coursecat::instance($cat1->id);
|
||
|
$cat2ctx = context_coursecat::instance($cat2->id);
|
||
|
|
||
|
$f1 = $ccg->create_framework();
|
||
|
$f2 = $ccg->create_framework(['contextid' => $cat1ctx->id]);
|
||
|
$f3 = $ccg->create_framework(['contextid' => $cat2ctx->id]);
|
||
|
$cs = [];
|
||
|
|
||
|
foreach ([$f1, $f2, $f3] as $f) {
|
||
|
$cs[$f->get('id')] = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
}
|
||
|
|
||
|
// Test recovery through template context.
|
||
|
$this->setUser($u1);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), []);
|
||
|
$t1 = $ccg->create_template();
|
||
|
$contextlist = provider::get_contexts_for_userid($u1->id);
|
||
|
$this->assert_contextlist($contextlist, [$sysctx]);
|
||
|
$t2 = $ccg->create_template(['contextid' => $cat1ctx->id]);
|
||
|
$contextlist = provider::get_contexts_for_userid($u1->id);
|
||
|
$this->assert_contextlist($contextlist, [$sysctx, $cat1ctx]);
|
||
|
|
||
|
// Test recovery of category context alone.
|
||
|
$this->setUser($u2);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
|
||
|
$ccg->create_template(['contextid' => $cat2ctx->id]);
|
||
|
$contextlist = provider::get_contexts_for_userid($u2->id);
|
||
|
$this->assert_contextlist($contextlist, [$cat2ctx]);
|
||
|
|
||
|
// Test recovery through template competency.
|
||
|
$this->setUser($u3);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
|
||
|
$c1 = $ccg->create_template_competency(['competencyid' => $cs[$f1->get('id')]->get('id'), 'templateid' => $t1->get('id')]);
|
||
|
$contextlist = provider::get_contexts_for_userid($u3->id);
|
||
|
$this->assert_contextlist($contextlist, [$sysctx]);
|
||
|
$c4 = $ccg->create_template_competency(['competencyid' => $cs[$f2->get('id')]->get('id'), 'templateid' => $t2->get('id')]);
|
||
|
$contextlist = provider::get_contexts_for_userid($u3->id);
|
||
|
$this->assert_contextlist($contextlist, [$sysctx, $cat1ctx]);
|
||
|
|
||
|
// Test recovery through template cohort.
|
||
|
$this->setUser($u4);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
|
||
|
$c1 = $ccg->create_template_cohort(['cohortid' => $cohort->id, 'templateid' => $t1->get('id')]);
|
||
|
$contextlist = provider::get_contexts_for_userid($u4->id);
|
||
|
$this->assert_contextlist($contextlist, [$sysctx]);
|
||
|
$c4 = $ccg->create_template_cohort(['cohortid' => $cohort->id, 'templateid' => $t2->get('id')]);
|
||
|
$contextlist = provider::get_contexts_for_userid($u4->id);
|
||
|
$this->assert_contextlist($contextlist, [$sysctx, $cat1ctx]);
|
||
|
}
|
||
|
|
||
|
public function test_get_users_in_context_with_usermodified_for_template() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$cat1 = $dg->create_category();
|
||
|
$cat2 = $dg->create_category();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
$cohort = $dg->create_cohort();
|
||
|
|
||
|
$sysctx = context_system::instance();
|
||
|
$cat1ctx = context_coursecat::instance($cat1->id);
|
||
|
$cat2ctx = context_coursecat::instance($cat2->id);
|
||
|
|
||
|
$f1 = $ccg->create_framework();
|
||
|
$f2 = $ccg->create_framework(['contextid' => $cat1ctx->id]);
|
||
|
$f3 = $ccg->create_framework(['contextid' => $cat2ctx->id]);
|
||
|
$cs = [];
|
||
|
|
||
|
foreach ([$f1, $f2, $f3] as $f) {
|
||
|
$cs[$f->get('id')] = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
}
|
||
|
|
||
|
// Create template context.
|
||
|
$this->setUser($u1);
|
||
|
$t1 = $ccg->create_template();
|
||
|
$t2 = $ccg->create_template(['contextid' => $cat1ctx->id]);
|
||
|
|
||
|
// Add to category context.
|
||
|
$this->setUser($u2);
|
||
|
$ccg->create_template(['contextid' => $cat2ctx->id]);
|
||
|
|
||
|
// Create template competencies.
|
||
|
$this->setUser($u3);
|
||
|
$c1 = $ccg->create_template_competency(['competencyid' => $cs[$f1->get('id')]->get('id'), 'templateid' => $t1->get('id')]);
|
||
|
$c4 = $ccg->create_template_competency(['competencyid' => $cs[$f2->get('id')]->get('id'), 'templateid' => $t2->get('id')]);
|
||
|
|
||
|
// Create template cohorts.
|
||
|
$this->setUser($u4);
|
||
|
$c1 = $ccg->create_template_cohort(['cohortid' => $cohort->id, 'templateid' => $t1->get('id')]);
|
||
|
$c4 = $ccg->create_template_cohort(['cohortid' => $cohort->id, 'templateid' => $t2->get('id')]);
|
||
|
|
||
|
// Test correct users appear in each context.
|
||
|
$component = 'core_competency';
|
||
|
|
||
|
$userlist = new userlist($sysctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$expected = [$u1->id, $u3->id, $u4->id];
|
||
|
$this->assert_array_match($expected, $userlist->get_userids());
|
||
|
|
||
|
$userlist = new userlist($cat1ctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$expected = [$u1->id, $u3->id, $u4->id];
|
||
|
$this->assert_array_match($expected, $userlist->get_userids());
|
||
|
|
||
|
$userlist = new userlist($cat2ctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$expected = [$u2->id];
|
||
|
$this->assert_array_match($expected, $userlist->get_userids());
|
||
|
}
|
||
|
|
||
|
public function test_get_contexts_for_userid_with_usermodified_for_course() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
$c1 = $dg->create_course();
|
||
|
$c2 = $dg->create_course();
|
||
|
$u0 = $dg->create_user();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
$c1ctx = context_course::instance($c1->id);
|
||
|
$c2ctx = context_course::instance($c2->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
|
||
|
$ccg->create_course_competency(['courseid' => $c1->id, 'competencyid' => $comp1->get('id')]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$c1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$c1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
|
||
|
$ccg->create_course_competency(['courseid' => $c2->id, 'competencyid' => $comp2->get('id')]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$c1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$c2ctx]);
|
||
|
$ccg->create_course_competency(['courseid' => $c1->id, 'competencyid' => $comp2->get('id')]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$c1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$c1ctx, $c2ctx]);
|
||
|
|
||
|
$this->setUser($u3);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
|
||
|
$ccs = new \core_competency\course_competency_settings(null, (object) ['courseid' => $c1->id]);
|
||
|
$ccs->create();
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$c1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$c1ctx, $c2ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$c1ctx]);
|
||
|
|
||
|
$this->setUser($u4);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
|
||
|
$ccg->create_user_competency_course(['courseid' => $c2->id, 'userid' => $u0->id, 'competencyid' => $comp1->get('id')]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$c1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$c1ctx, $c2ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$c1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u4->id), [$c2ctx]);
|
||
|
}
|
||
|
|
||
|
public function test_get_users_in_context_with_usermodified_for_course() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
$c1 = $dg->create_course();
|
||
|
$c2 = $dg->create_course();
|
||
|
$u0 = $dg->create_user();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
$c1ctx = context_course::instance($c1->id);
|
||
|
$c2ctx = context_course::instance($c2->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
$ccg->create_course_competency(['courseid' => $c1->id, 'competencyid' => $comp1->get('id')]);
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
$ccg->create_course_competency(['courseid' => $c2->id, 'competencyid' => $comp2->get('id')]);
|
||
|
$ccg->create_course_competency(['courseid' => $c1->id, 'competencyid' => $comp2->get('id')]);
|
||
|
|
||
|
$this->setUser($u3);
|
||
|
$ccs = new \core_competency\course_competency_settings(null, (object) ['courseid' => $c1->id]);
|
||
|
$ccs->create();
|
||
|
|
||
|
$this->setUser($u4);
|
||
|
$ccg->create_user_competency_course(['courseid' => $c2->id, 'userid' => $u0->id, 'competencyid' => $comp1->get('id')]);
|
||
|
|
||
|
// Test correct users appear in each context.
|
||
|
$component = 'core_competency';
|
||
|
|
||
|
$userlist = new userlist($c1ctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$expected = [$u1->id, $u2->id, $u3->id];
|
||
|
$this->assert_array_match($expected, $userlist->get_userids());
|
||
|
|
||
|
$userlist = new userlist($c2ctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$expected = [$u0->id, $u2->id, $u4->id];
|
||
|
$this->assert_array_match($expected, $userlist->get_userids());
|
||
|
}
|
||
|
|
||
|
public function test_get_contexts_for_userid_with_usermodified_for_module() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
$c1 = $dg->create_course();
|
||
|
$m1 = $dg->create_module('choice', ['course' => $c1]);
|
||
|
$m2 = $dg->create_module('choice', ['course' => $c1]);
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$m1ctx = context_module::instance($m1->cmid);
|
||
|
$m2ctx = context_module::instance($m2->cmid);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
|
||
|
$ccg->create_course_module_competency(['cmid' => $m1->cmid, 'competencyid' => $comp1->get('id')]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$m1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$m1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
|
||
|
$ccg->create_course_module_competency(['cmid' => $m2->cmid, 'competencyid' => $comp2->get('id')]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$m1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$m2ctx]);
|
||
|
$ccg->create_course_module_competency(['cmid' => $m1->cmid, 'competencyid' => $comp2->get('id')]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$m1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$m1ctx, $m2ctx]);
|
||
|
}
|
||
|
|
||
|
public function test_get_users_in_context_with_usermodified_for_module() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
$c1 = $dg->create_course();
|
||
|
$m1 = $dg->create_module('choice', ['course' => $c1]);
|
||
|
$m2 = $dg->create_module('choice', ['course' => $c1]);
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$m1ctx = context_module::instance($m1->cmid);
|
||
|
$m2ctx = context_module::instance($m2->cmid);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
$ccg->create_course_module_competency(['cmid' => $m1->cmid, 'competencyid' => $comp1->get('id')]);
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
$ccg->create_course_module_competency(['cmid' => $m2->cmid, 'competencyid' => $comp2->get('id')]);
|
||
|
$ccg->create_course_module_competency(['cmid' => $m1->cmid, 'competencyid' => $comp2->get('id')]);
|
||
|
|
||
|
// Test correct users appear in each context.
|
||
|
$component = 'core_competency';
|
||
|
|
||
|
$userlist = new userlist($m1ctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$expected = [$u1->id, $u2->id];
|
||
|
$this->assert_array_match($expected, $userlist->get_userids());
|
||
|
|
||
|
$userlist = new userlist($m2ctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$expected = [$u2->id];
|
||
|
$this->assert_array_match($expected, $userlist->get_userids());
|
||
|
}
|
||
|
|
||
|
public function test_get_contexts_for_userid_with_usermodified_for_plan() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
$u0 = $dg->create_user();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u0ctx = context_user::instance($u0->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
|
||
|
$plan = $ccg->create_plan(['userid' => $u0->id]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
$ccg->create_plan_competency(['planid' => $plan->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
|
||
|
|
||
|
$this->setUser($u3);
|
||
|
$ccg->create_user_competency_plan(['planid' => $plan->get('id'), 'competencyid' => $comp1->get('id'),
|
||
|
'userid' => $u0->id]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$u0ctx]);
|
||
|
}
|
||
|
|
||
|
public function test_get_users_in_context_with_usermodified_for_plan() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
$u0 = $dg->create_user();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u0ctx = context_user::instance($u0->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
$plan = $ccg->create_plan(['userid' => $u0->id]);
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
$ccg->create_plan_competency(['planid' => $plan->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
|
||
|
$this->setUser($u3);
|
||
|
$ccg->create_user_competency_plan(['planid' => $plan->get('id'), 'competencyid' => $comp1->get('id'),
|
||
|
'userid' => $u0->id]);
|
||
|
|
||
|
// Test correct users appear in the context.
|
||
|
$component = 'core_competency';
|
||
|
|
||
|
$userlist = new userlist($u0ctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$expected = [$u0->id, $u1->id, $u2->id, $u3->id];
|
||
|
$this->assert_array_match($expected, $userlist->get_userids());
|
||
|
}
|
||
|
|
||
|
public function test_get_contexts_for_userid_with_usermodified_for_competency_data() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
$u0 = $dg->create_user();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
$u5 = $dg->create_user();
|
||
|
$u6 = $dg->create_user();
|
||
|
$u7 = $dg->create_user();
|
||
|
$u8 = $dg->create_user();
|
||
|
$u0ctx = context_user::instance($u0->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u5->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u6->id), []);
|
||
|
$uc = $ccg->create_user_competency(['userid' => $u0->id, 'competencyid' => $comp1->get('id'),
|
||
|
'reviewerid' => $u6->id]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u5->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u6->id), [$u0ctx]);
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
$e = $ccg->create_evidence(['usercompetencyid' => $uc->get('id'), 'actionuserid' => $u5->id]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u5->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u6->id), [$u0ctx]);
|
||
|
|
||
|
$this->setUser($u3);
|
||
|
$ccg->create_user_evidence(['userid' => $u0->id]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u5->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u6->id), [$u0ctx]);
|
||
|
|
||
|
$this->setUser($u4);
|
||
|
$ccg->create_user_evidence(['userid' => $u0->id]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u4->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u5->id), [$u0ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u6->id), [$u0ctx]);
|
||
|
|
||
|
// Comment on competency.
|
||
|
$this->allow_anyone_to_comment_anywhere();
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u7->id), []);
|
||
|
$this->setUser($u7);
|
||
|
$comments = $uc->get_comment_object();
|
||
|
$comments->add('Hello there!');
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u7->id), [$u0ctx]);
|
||
|
|
||
|
// Comment on plan.
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u8->id), []);
|
||
|
$this->setUser($u8);
|
||
|
$plan = $ccg->create_plan(['userid' => $u0->id]);
|
||
|
$comments = $plan->get_comment_object();
|
||
|
$comments->add('Hi, planet!');
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u8->id), [$u0ctx]);
|
||
|
}
|
||
|
|
||
|
public function test_get_users_in_context_with_usermodified_for_competency_data() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
$u0 = $dg->create_user();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
$u5 = $dg->create_user();
|
||
|
$u6 = $dg->create_user();
|
||
|
$u7 = $dg->create_user();
|
||
|
$u8 = $dg->create_user();
|
||
|
$u0ctx = context_user::instance($u0->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
$uc = $ccg->create_user_competency(['userid' => $u0->id, 'competencyid' => $comp1->get('id'),
|
||
|
'reviewerid' => $u6->id]);
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
$e = $ccg->create_evidence(['usercompetencyid' => $uc->get('id'), 'actionuserid' => $u5->id]);
|
||
|
|
||
|
$this->setUser($u3);
|
||
|
$ccg->create_user_evidence(['userid' => $u0->id]);
|
||
|
|
||
|
$this->setUser($u4);
|
||
|
$ccg->create_user_evidence(['userid' => $u0->id]);
|
||
|
|
||
|
// Comment on competency.
|
||
|
$this->allow_anyone_to_comment_anywhere();
|
||
|
$this->setUser($u7);
|
||
|
$comments = $uc->get_comment_object();
|
||
|
$comments->add('Hello there!');
|
||
|
|
||
|
// Comment on plan.
|
||
|
$this->setUser($u8);
|
||
|
$plan = $ccg->create_plan(['userid' => $u0->id]);
|
||
|
$comments = $plan->get_comment_object();
|
||
|
$comments->add('Hi, planet!');
|
||
|
|
||
|
// Test correct users appear in the context.
|
||
|
$component = 'core_competency';
|
||
|
|
||
|
$userlist = new userlist($u0ctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$expected = [$u0->id, $u1->id, $u2->id, $u3->id, $u4->id, $u5->id, $u6->id, $u7->id, $u8->id];
|
||
|
$this->assert_array_match($expected, $userlist->get_userids());
|
||
|
}
|
||
|
|
||
|
public function test_get_contexts_for_userid_with_actual_data_and_actual_data_is_goooood() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
$c1 = $dg->create_course();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
|
||
|
$c1ctx = context_course::instance($c1->id);
|
||
|
$u1ctx = context_user::instance($u1->id);
|
||
|
$u2ctx = context_user::instance($u2->id);
|
||
|
$u3ctx = context_user::instance($u3->id);
|
||
|
$u4ctx = context_user::instance($u4->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
|
||
|
|
||
|
$ccg->create_plan(['userid' => $u1->id]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
|
||
|
|
||
|
$ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $comp1->get('id')]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u2ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
|
||
|
|
||
|
$ccg->create_user_competency_course(['userid' => $u3->id, 'competencyid' => $comp1->get('id'), 'courseid' => $c1->id]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u2ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$c1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
|
||
|
|
||
|
$ccg->create_user_evidence(['userid' => $u4->id]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u2ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$c1ctx]);
|
||
|
$this->assert_contextlist(provider::get_contexts_for_userid($u4->id), [$u4ctx]);
|
||
|
}
|
||
|
|
||
|
public function test_get_users_in_context_with_actual_data_and_actual_data_is_goooood() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
$c1 = $dg->create_course();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
|
||
|
$c1ctx = context_course::instance($c1->id);
|
||
|
$u1ctx = context_user::instance($u1->id);
|
||
|
$u2ctx = context_user::instance($u2->id);
|
||
|
$u3ctx = context_user::instance($u3->id);
|
||
|
$u4ctx = context_user::instance($u4->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$ccg->create_plan(['userid' => $u1->id]);
|
||
|
|
||
|
$ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $comp1->get('id')]);
|
||
|
|
||
|
$ccg->create_user_competency_course(['userid' => $u3->id, 'competencyid' => $comp1->get('id'), 'courseid' => $c1->id]);
|
||
|
|
||
|
$ccg->create_user_evidence(['userid' => $u4->id]);
|
||
|
|
||
|
// Test correct users appear in each context.
|
||
|
$component = 'core_competency';
|
||
|
|
||
|
$userlist = new userlist($u1ctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$this->assert_array_match([$u1->id], $userlist->get_userids());
|
||
|
|
||
|
$userlist = new userlist($u2ctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$this->assert_array_match([$u2->id], $userlist->get_userids());
|
||
|
|
||
|
$userlist = new userlist($c1ctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$this->assert_array_match([$u3->id], $userlist->get_userids());
|
||
|
|
||
|
$userlist = new userlist($u4ctx, $component);
|
||
|
provider::get_users_in_context($userlist);
|
||
|
$this->assert_array_match([$u4->id], $userlist->get_userids());
|
||
|
}
|
||
|
|
||
|
public function test_delete_data_for_user() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$c1 = $dg->create_course();
|
||
|
$c2 = $dg->create_course();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
|
||
|
$c1ctx = context_course::instance($c1->id);
|
||
|
$u1ctx = context_user::instance($u1->id);
|
||
|
$u2ctx = context_user::instance($u2->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$ue1a = $ccg->create_user_evidence(['userid' => $u1->id]);
|
||
|
$ue1b = $ccg->create_user_evidence(['userid' => $u1->id]);
|
||
|
$ue2 = $ccg->create_user_evidence(['userid' => $u2->id]);
|
||
|
$uec1a = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1a->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$uec1b = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1b->get('id'),
|
||
|
'competencyid' => $comp2->get('id')]);
|
||
|
$uec2 = $ccg->create_user_evidence_competency(['userevidenceid' => $ue2->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
|
||
|
$p1a = $ccg->create_plan(['userid' => $u1->id]);
|
||
|
$p1b = $ccg->create_plan(['userid' => $u1->id]);
|
||
|
$p2 = $ccg->create_plan(['userid' => $u2->id]);
|
||
|
$pc1a = $ccg->create_plan_competency(['planid' => $p1a->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$pc1b = $ccg->create_plan_competency(['planid' => $p1b->get('id'), 'competencyid' => $comp2->get('id')]);
|
||
|
$pc2 = $ccg->create_plan_competency(['planid' => $p2->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$ucp1a = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1a->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$ucp1b = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1b->get('id'),
|
||
|
'competencyid' => $comp2->get('id')]);
|
||
|
$ucp2 = $ccg->create_user_competency_plan(['userid' => $u2->id, 'planid' => $p2->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
|
||
|
$uc1a = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp1->get('id')]);
|
||
|
$uc1b = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp2->get('id')]);
|
||
|
$uc2 = $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $comp2->get('id')]);
|
||
|
$e1a = $ccg->create_evidence(['usercompetencyid' => $uc1a->get('id')]);
|
||
|
$e1b = $ccg->create_evidence(['usercompetencyid' => $uc1b->get('id')]);
|
||
|
$e2 = $ccg->create_evidence(['usercompetencyid' => $uc2->get('id')]);
|
||
|
|
||
|
$ucc1a = $ccg->create_user_competency_course(['userid' => $u1->id, 'courseid' => $c1->id,
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$ucc1b = $ccg->create_user_competency_course(['userid' => $u1->id, 'courseid' => $c2->id,
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$ucc2 = $ccg->create_user_competency_course(['userid' => $u2->id, 'courseid' => $c1->id,
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
|
||
|
// User 1 comments on both plans.
|
||
|
$this->allow_anyone_to_comment_anywhere();
|
||
|
$this->setUser($u1);
|
||
|
$p1a->get_comment_object()->add('Hi...');
|
||
|
$p1a->get_comment_object()->add('mister');
|
||
|
$p2->get_comment_object()->add('Ahoy!');
|
||
|
|
||
|
// User 2 comments on both competencies.
|
||
|
$this->setUser($u2);
|
||
|
$uc1a->get_comment_object()->add('Hi, too!');
|
||
|
$uc1a->get_comment_object()->add('How are you?');
|
||
|
$uc2->get_comment_object()->add('Ahoy, too!');
|
||
|
|
||
|
$p1acommentobj = $p1a->get_comment_object();
|
||
|
$p2commentobj = $p2->get_comment_object();
|
||
|
$uc1acommentobj = $uc1a->get_comment_object();
|
||
|
$uc2commentobj = $uc2->get_comment_object();
|
||
|
|
||
|
$this->setAdminUser();
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
|
||
|
$this->assert_has_comments($p1acommentobj);
|
||
|
$this->assertEquals(2, $this->get_comments_count($p1acommentobj, $u1->id));
|
||
|
$this->assertEquals(0, $this->get_comments_count($p1acommentobj, $u2->id));
|
||
|
$this->assert_has_comments($p2commentobj);
|
||
|
$this->assertEquals(1, $this->get_comments_count($p2commentobj, $u1->id));
|
||
|
$this->assertEquals(0, $this->get_comments_count($p2commentobj, $u2->id));
|
||
|
$this->assert_has_comments($uc1acommentobj);
|
||
|
$this->assertEquals(0, $this->get_comments_count($uc1acommentobj, $u1->id));
|
||
|
$this->assertEquals(2, $this->get_comments_count($uc1acommentobj, $u2->id));
|
||
|
$this->assert_has_comments($uc2commentobj);
|
||
|
$this->assertEquals(0, $this->get_comments_count($uc2commentobj, $u1->id));
|
||
|
$this->assertEquals(1, $this->get_comments_count($uc2commentobj, $u2->id));
|
||
|
|
||
|
// Deleting user context only.
|
||
|
$appctx = new approved_contextlist($u1, 'core_competency', [$u1ctx->id]);
|
||
|
provider::delete_data_for_user($appctx);
|
||
|
|
||
|
$this->assertFalse(\core_competency\user_evidence::record_exists($ue1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_evidence::record_exists($ue1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_evidence_competency::record_exists($uec1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\plan::record_exists($p1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\plan::record_exists($p1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\plan_competency::record_exists($pc1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\plan_competency::record_exists($pc1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_competency_plan::record_exists($ucp1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_competency::record_exists($uc1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_competency::record_exists($uc1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\evidence::record_exists($e1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\evidence::record_exists($e1b->get('id')));
|
||
|
|
||
|
$this->assert_has_no_comments($p1acommentobj);
|
||
|
$this->assertEquals(0, $this->get_comments_count($p1acommentobj, $u1->id));
|
||
|
$this->assertEquals(0, $this->get_comments_count($p1acommentobj, $u2->id));
|
||
|
$this->assert_has_no_comments($uc1acommentobj);
|
||
|
$this->assertEquals(0, $this->get_comments_count($uc1acommentobj, $u1->id));
|
||
|
$this->assertEquals(0, $this->get_comments_count($uc1acommentobj, $u2->id));
|
||
|
|
||
|
// This should not have been affected.
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
|
||
|
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
|
||
|
$this->assert_has_comments($p2commentobj);
|
||
|
$this->assertEquals(1, $this->get_comments_count($p2commentobj, $u1->id));
|
||
|
$this->assertEquals(0, $this->get_comments_count($p2commentobj, $u2->id));
|
||
|
$this->assert_has_comments($uc2commentobj);
|
||
|
$this->assertEquals(0, $this->get_comments_count($uc2commentobj, $u1->id));
|
||
|
$this->assertEquals(1, $this->get_comments_count($uc2commentobj, $u2->id));
|
||
|
|
||
|
// Deleting course context as well.
|
||
|
$appctx = new approved_contextlist($u1, 'core_competency', [$u1ctx->id, $c1ctx->id]);
|
||
|
provider::delete_data_for_user($appctx);
|
||
|
|
||
|
$this->assertFalse(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
|
||
|
|
||
|
// The rest belongs to another course, or the other user.
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
|
||
|
}
|
||
|
|
||
|
public function test_delete_data_for_user_with_other_user_context() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
|
||
|
$u1ctx = context_user::instance($u1->id);
|
||
|
$u2ctx = context_user::instance($u2->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
// Create a bunch of data for user 1.
|
||
|
$ue1a = $ccg->create_user_evidence(['userid' => $u1->id]);
|
||
|
$uec1a = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1a->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$p1a = $ccg->create_plan(['userid' => $u1->id]);
|
||
|
$pc1a = $ccg->create_plan_competency(['planid' => $p1a->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$ucp1a = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1a->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$uc1a = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp1->get('id')]);
|
||
|
$e1a = $ccg->create_evidence(['usercompetencyid' => $uc1a->get('id')]);
|
||
|
|
||
|
$p2a = $ccg->create_plan(['userid' => $u2->id]);
|
||
|
|
||
|
// User 2 comments.
|
||
|
$this->allow_anyone_to_comment_anywhere();
|
||
|
$this->setUser($u2);
|
||
|
$p1a->get_comment_object()->add('Hi...');
|
||
|
$p2a->get_comment_object()->add('Hi, hi!');
|
||
|
$uc1a->get_comment_object()->add('Hi, too!');
|
||
|
|
||
|
// Confirm state.
|
||
|
$this->setAdminUser();
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
|
||
|
$this->assert_has_comments($p1a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($p1a->get_comment_object(), $u2->id));
|
||
|
$this->assert_has_comments($p2a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($p2a->get_comment_object(), $u2->id));
|
||
|
$this->assert_has_comments($uc1a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($uc1a->get_comment_object(), $u2->id));
|
||
|
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p2a->get('id')));
|
||
|
|
||
|
// Delete for user 2, but we pass u1 context.
|
||
|
provider::delete_data_for_user(new approved_contextlist($u2, 'core_competency', [$u1ctx->id]));
|
||
|
|
||
|
// Nothing should have happened.
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
|
||
|
$this->assert_has_comments($p1a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($p1a->get_comment_object(), $u2->id));
|
||
|
$this->assert_has_comments($p2a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($p2a->get_comment_object(), $u2->id));
|
||
|
$this->assert_has_comments($uc1a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($uc1a->get_comment_object(), $u2->id));
|
||
|
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p2a->get('id')));
|
||
|
|
||
|
// Delete for user 2, but we pass u1 and u2 context.
|
||
|
$p2acommentobj = $p2a->get_comment_object();
|
||
|
provider::delete_data_for_user(new approved_contextlist($u2, 'core_competency', [$u1ctx->id, $u2ctx->id]));
|
||
|
|
||
|
// The plan got deleted.
|
||
|
$this->assertFalse(\core_competency\plan::record_exists($p2a->get('id')));
|
||
|
$this->assert_has_no_comments($p2acommentobj);
|
||
|
|
||
|
// Nothing should have happened for u1.
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
|
||
|
$this->assert_has_comments($p1a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($p1a->get_comment_object(), $u2->id));
|
||
|
$this->assert_has_comments($uc1a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($uc1a->get_comment_object(), $u2->id));
|
||
|
}
|
||
|
|
||
|
public function test_delete_data_for_users() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$c1 = $dg->create_course();
|
||
|
$c2 = $dg->create_course();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
|
||
|
$c1ctx = context_course::instance($c1->id);
|
||
|
$u1ctx = context_user::instance($u1->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$ue1a = $ccg->create_user_evidence(['userid' => $u1->id]);
|
||
|
$ue1b = $ccg->create_user_evidence(['userid' => $u1->id]);
|
||
|
$ue2 = $ccg->create_user_evidence(['userid' => $u2->id]);
|
||
|
$uec1a = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1a->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$uec1b = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1b->get('id'),
|
||
|
'competencyid' => $comp2->get('id')]);
|
||
|
$uec2 = $ccg->create_user_evidence_competency(['userevidenceid' => $ue2->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
|
||
|
$p1a = $ccg->create_plan(['userid' => $u1->id]);
|
||
|
$p1b = $ccg->create_plan(['userid' => $u1->id]);
|
||
|
$p2 = $ccg->create_plan(['userid' => $u2->id]);
|
||
|
$pc1a = $ccg->create_plan_competency(['planid' => $p1a->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$pc1b = $ccg->create_plan_competency(['planid' => $p1b->get('id'), 'competencyid' => $comp2->get('id')]);
|
||
|
$pc2 = $ccg->create_plan_competency(['planid' => $p2->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$ucp1a = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1a->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$ucp1b = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1b->get('id'),
|
||
|
'competencyid' => $comp2->get('id')]);
|
||
|
$ucp2 = $ccg->create_user_competency_plan(['userid' => $u2->id, 'planid' => $p2->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
|
||
|
$uc1a = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp1->get('id')]);
|
||
|
$uc1b = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp2->get('id')]);
|
||
|
$uc2 = $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $comp2->get('id')]);
|
||
|
$e1a = $ccg->create_evidence(['usercompetencyid' => $uc1a->get('id')]);
|
||
|
$e1b = $ccg->create_evidence(['usercompetencyid' => $uc1b->get('id')]);
|
||
|
$e2 = $ccg->create_evidence(['usercompetencyid' => $uc2->get('id')]);
|
||
|
|
||
|
$ucc1a = $ccg->create_user_competency_course(['userid' => $u1->id, 'courseid' => $c1->id,
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$ucc1b = $ccg->create_user_competency_course(['userid' => $u1->id, 'courseid' => $c2->id,
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$ucc2 = $ccg->create_user_competency_course(['userid' => $u2->id, 'courseid' => $c1->id,
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
|
||
|
// User 1 comments on both plans.
|
||
|
$this->allow_anyone_to_comment_anywhere();
|
||
|
$this->setUser($u1);
|
||
|
$p1a->get_comment_object()->add('Hi...');
|
||
|
$p1a->get_comment_object()->add('mister');
|
||
|
$p2->get_comment_object()->add('Ahoy!');
|
||
|
|
||
|
// User 2 comments on both competencies.
|
||
|
$this->setUser($u2);
|
||
|
$uc1a->get_comment_object()->add('Hi, too!');
|
||
|
$uc1a->get_comment_object()->add('How are you?');
|
||
|
$uc2->get_comment_object()->add('Ahoy, too!');
|
||
|
|
||
|
$p1acommentobj = $p1a->get_comment_object();
|
||
|
$p2commentobj = $p2->get_comment_object();
|
||
|
$uc1acommentobj = $uc1a->get_comment_object();
|
||
|
$uc2commentobj = $uc2->get_comment_object();
|
||
|
|
||
|
$this->setAdminUser();
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
|
||
|
$this->assert_has_comments($p1acommentobj);
|
||
|
$this->assertEquals(2, $this->get_comments_count($p1acommentobj, $u1->id));
|
||
|
$this->assertEquals(0, $this->get_comments_count($p1acommentobj, $u2->id));
|
||
|
$this->assert_has_comments($p2commentobj);
|
||
|
$this->assertEquals(1, $this->get_comments_count($p2commentobj, $u1->id));
|
||
|
$this->assertEquals(0, $this->get_comments_count($p2commentobj, $u2->id));
|
||
|
$this->assert_has_comments($uc1acommentobj);
|
||
|
$this->assertEquals(0, $this->get_comments_count($uc1acommentobj, $u1->id));
|
||
|
$this->assertEquals(2, $this->get_comments_count($uc1acommentobj, $u2->id));
|
||
|
$this->assert_has_comments($uc2commentobj);
|
||
|
$this->assertEquals(0, $this->get_comments_count($uc2commentobj, $u1->id));
|
||
|
$this->assertEquals(1, $this->get_comments_count($uc2commentobj, $u2->id));
|
||
|
|
||
|
// Deleting user context.
|
||
|
$userlist = new approved_userlist($u1ctx, 'core_competency', [$u1->id, $u2->id]);
|
||
|
provider::delete_data_for_users($userlist);
|
||
|
|
||
|
$this->assertFalse(\core_competency\user_evidence::record_exists($ue1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_evidence::record_exists($ue1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_evidence_competency::record_exists($uec1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\plan::record_exists($p1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\plan::record_exists($p1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\plan_competency::record_exists($pc1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\plan_competency::record_exists($pc1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_competency_plan::record_exists($ucp1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_competency::record_exists($uc1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_competency::record_exists($uc1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\evidence::record_exists($e1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\evidence::record_exists($e1b->get('id')));
|
||
|
|
||
|
$this->assert_has_no_comments($p1acommentobj);
|
||
|
$this->assertEquals(0, $this->get_comments_count($p1acommentobj, $u1->id));
|
||
|
$this->assertEquals(0, $this->get_comments_count($p1acommentobj, $u2->id));
|
||
|
$this->assert_has_no_comments($uc1acommentobj);
|
||
|
$this->assertEquals(0, $this->get_comments_count($uc1acommentobj, $u1->id));
|
||
|
$this->assertEquals(0, $this->get_comments_count($uc1acommentobj, $u2->id));
|
||
|
|
||
|
// This should not have been affected.
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
|
||
|
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
|
||
|
$this->assert_has_comments($p2commentobj);
|
||
|
$this->assertEquals(1, $this->get_comments_count($p2commentobj, $u1->id));
|
||
|
$this->assertEquals(0, $this->get_comments_count($p2commentobj, $u2->id));
|
||
|
$this->assert_has_comments($uc2commentobj);
|
||
|
$this->assertEquals(0, $this->get_comments_count($uc2commentobj, $u1->id));
|
||
|
$this->assertEquals(1, $this->get_comments_count($uc2commentobj, $u2->id));
|
||
|
|
||
|
// Deleting course context as well.
|
||
|
$userlist = new approved_userlist($c1ctx, 'core_competency', [$u1->id]);
|
||
|
provider::delete_data_for_users($userlist);
|
||
|
|
||
|
$this->assertFalse(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
|
||
|
|
||
|
// The rest belongs to another course, or the other user.
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
|
||
|
}
|
||
|
|
||
|
public function test_delete_data_for_users_with_other_user_context() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
|
||
|
$u1ctx = context_user::instance($u1->id);
|
||
|
$u2ctx = context_user::instance($u2->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
// Create a bunch of data for user 1.
|
||
|
$ue1a = $ccg->create_user_evidence(['userid' => $u1->id]);
|
||
|
$uec1a = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1a->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$p1a = $ccg->create_plan(['userid' => $u1->id]);
|
||
|
$pc1a = $ccg->create_plan_competency(['planid' => $p1a->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$ucp1a = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1a->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$uc1a = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp1->get('id')]);
|
||
|
$e1a = $ccg->create_evidence(['usercompetencyid' => $uc1a->get('id')]);
|
||
|
|
||
|
$p2a = $ccg->create_plan(['userid' => $u2->id]);
|
||
|
|
||
|
// User 2 comments.
|
||
|
$this->allow_anyone_to_comment_anywhere();
|
||
|
$this->setUser($u2);
|
||
|
$p1a->get_comment_object()->add('Hi...');
|
||
|
$p2a->get_comment_object()->add('Hi, hi!');
|
||
|
$uc1a->get_comment_object()->add('Hi, too!');
|
||
|
|
||
|
// Confirm state.
|
||
|
$this->setAdminUser();
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
|
||
|
$this->assert_has_comments($p1a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($p1a->get_comment_object(), $u2->id));
|
||
|
$this->assert_has_comments($p2a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($p2a->get_comment_object(), $u2->id));
|
||
|
$this->assert_has_comments($uc1a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($uc1a->get_comment_object(), $u2->id));
|
||
|
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p2a->get('id')));
|
||
|
|
||
|
// Delete for user 2, but we pass u1 context.
|
||
|
$userlist = new approved_userlist($u1ctx, 'core_competency', [$u2->id]);
|
||
|
provider::delete_data_for_users($userlist);
|
||
|
|
||
|
// Nothing should have happened.
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
|
||
|
$this->assert_has_comments($p1a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($p1a->get_comment_object(), $u2->id));
|
||
|
$this->assert_has_comments($p2a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($p2a->get_comment_object(), $u2->id));
|
||
|
$this->assert_has_comments($uc1a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($uc1a->get_comment_object(), $u2->id));
|
||
|
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p2a->get('id')));
|
||
|
|
||
|
// Delete for user 2, in user 2 context.
|
||
|
$p2acommentobj = $p2a->get_comment_object();
|
||
|
$userlist = new approved_userlist($u2ctx, 'core_competency', [$u2->id]);
|
||
|
provider::delete_data_for_users($userlist);
|
||
|
|
||
|
// The plan got deleted.
|
||
|
$this->assertFalse(\core_competency\plan::record_exists($p2a->get('id')));
|
||
|
$this->assert_has_no_comments($p2acommentobj);
|
||
|
|
||
|
// Nothing should have happened for u1.
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
|
||
|
$this->assert_has_comments($p1a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($p1a->get_comment_object(), $u2->id));
|
||
|
$this->assert_has_comments($uc1a->get_comment_object());
|
||
|
$this->assertEquals(1, $this->get_comments_count($uc1a->get_comment_object(), $u2->id));
|
||
|
}
|
||
|
|
||
|
public function test_delete_data_for_all_users_in_context() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$c1 = $dg->create_course();
|
||
|
$c2 = $dg->create_course();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
|
||
|
$c1ctx = context_course::instance($c1->id);
|
||
|
$u1ctx = context_user::instance($u1->id);
|
||
|
$u2ctx = context_user::instance($u2->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$ue1a = $ccg->create_user_evidence(['userid' => $u1->id]);
|
||
|
$ue1b = $ccg->create_user_evidence(['userid' => $u1->id]);
|
||
|
$ue2 = $ccg->create_user_evidence(['userid' => $u2->id]);
|
||
|
$uec1a = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1a->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$uec1b = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1b->get('id'),
|
||
|
'competencyid' => $comp2->get('id')]);
|
||
|
$uec2 = $ccg->create_user_evidence_competency(['userevidenceid' => $ue2->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
|
||
|
$p1a = $ccg->create_plan(['userid' => $u1->id]);
|
||
|
$p1b = $ccg->create_plan(['userid' => $u1->id]);
|
||
|
$p2 = $ccg->create_plan(['userid' => $u2->id]);
|
||
|
$pc1a = $ccg->create_plan_competency(['planid' => $p1a->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$pc1b = $ccg->create_plan_competency(['planid' => $p1b->get('id'), 'competencyid' => $comp2->get('id')]);
|
||
|
$pc2 = $ccg->create_plan_competency(['planid' => $p2->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$ucp1a = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1a->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$ucp1b = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1b->get('id'),
|
||
|
'competencyid' => $comp2->get('id')]);
|
||
|
$ucp2 = $ccg->create_user_competency_plan(['userid' => $u2->id, 'planid' => $p2->get('id'),
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
|
||
|
$uc1a = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp1->get('id')]);
|
||
|
$uc1b = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp2->get('id')]);
|
||
|
$uc2 = $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $comp2->get('id')]);
|
||
|
$e1a = $ccg->create_evidence(['usercompetencyid' => $uc1a->get('id')]);
|
||
|
$e1b = $ccg->create_evidence(['usercompetencyid' => $uc1b->get('id')]);
|
||
|
$e2 = $ccg->create_evidence(['usercompetencyid' => $uc2->get('id')]);
|
||
|
|
||
|
$ucc1a = $ccg->create_user_competency_course(['userid' => $u1->id, 'courseid' => $c1->id,
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$ucc1b = $ccg->create_user_competency_course(['userid' => $u1->id, 'courseid' => $c2->id,
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
$ucc2 = $ccg->create_user_competency_course(['userid' => $u2->id, 'courseid' => $c1->id,
|
||
|
'competencyid' => $comp1->get('id')]);
|
||
|
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
|
||
|
|
||
|
// Deleting the course 1 context.
|
||
|
provider::delete_data_for_all_users_in_context($c1ctx);
|
||
|
$this->assertFalse(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
|
||
|
|
||
|
// Not affected.
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e1b->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
|
||
|
|
||
|
// Deleting the user 1 context.
|
||
|
provider::delete_data_for_all_users_in_context($u1ctx);
|
||
|
$this->assertFalse(\core_competency\user_evidence::record_exists($ue1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_evidence::record_exists($ue1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_evidence_competency::record_exists($uec1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\plan::record_exists($p1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\plan::record_exists($p1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\plan_competency::record_exists($pc1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\plan_competency::record_exists($pc1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_competency_plan::record_exists($ucp1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_competency::record_exists($uc1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\user_competency::record_exists($uc1b->get('id')));
|
||
|
$this->assertFalse(\core_competency\evidence::record_exists($e1a->get('id')));
|
||
|
$this->assertFalse(\core_competency\evidence::record_exists($e1b->get('id')));
|
||
|
|
||
|
// Not affected.
|
||
|
$this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
|
||
|
$this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
|
||
|
$this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
|
||
|
$this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
|
||
|
}
|
||
|
|
||
|
public function test_export_data_for_user_in_module_context_where_usermodified_matches() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$c1 = $dg->create_course();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$m1 = $dg->create_module('page', ['course' => $c1]);
|
||
|
$m2 = $dg->create_module('page', ['course' => $c1]);
|
||
|
|
||
|
$m1ctx = context_module::instance($m1->cmid);
|
||
|
$m2ctx = context_module::instance($m2->cmid);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$ccg->create_course_module_competency(['competencyid' => $comp3->get('id'), 'cmid' => $m1->cmid]);
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
$ccg->create_course_module_competency(['competencyid' => $comp1->get('id'), 'cmid' => $m1->cmid]);
|
||
|
$ccg->create_course_module_competency(['competencyid' => $comp2->get('id'), 'cmid' => $m2->cmid]);
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
$ccg->create_course_module_competency(['competencyid' => $comp3->get('id'), 'cmid' => $m2->cmid]);
|
||
|
|
||
|
// Export.
|
||
|
$this->setAdminUser();
|
||
|
provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$m1ctx->id]));
|
||
|
|
||
|
// Check exported context 1.
|
||
|
$data = writer::with_context($m1ctx)->get_data([get_string('competencies', 'core_competency')]);
|
||
|
$this->assertCount(1, $data->associations);
|
||
|
$this->assertEquals(transform::yesno(true), $data->associations[0]['created_or_modified_by_you']);
|
||
|
|
||
|
// Check exported context 2.
|
||
|
$data = writer::with_context($m2ctx)->get_data([get_string('competencies', 'core_competency')]);
|
||
|
$this->assertEmpty($data);
|
||
|
|
||
|
// Export both contexts.
|
||
|
provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$m1ctx->id, $m2ctx->id]));
|
||
|
|
||
|
// Check exported context 1.
|
||
|
$data = writer::with_context($m1ctx)->get_data([get_string('competencies', 'core_competency')]);
|
||
|
$this->assertCount(1, $data->associations);
|
||
|
$this->assertEquals($comp1->get('shortname'), $data->associations[0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->associations[0]['created_or_modified_by_you']);
|
||
|
|
||
|
// Check exported context 2.
|
||
|
$data = writer::with_context($m2ctx)->get_data([get_string('competencies', 'core_competency')]);
|
||
|
$this->assertCount(1, $data->associations);
|
||
|
$this->assertEquals($comp2->get('shortname'), $data->associations[0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->associations[0]['created_or_modified_by_you']);
|
||
|
}
|
||
|
|
||
|
public function test_export_data_for_user_in_course_context_where_usermodified_matches() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$c1 = $dg->create_course();
|
||
|
$c2 = $dg->create_course();
|
||
|
$u0 = $dg->create_user();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
|
||
|
$c1ctx = context_course::instance($c1->id);
|
||
|
$c2ctx = context_course::instance($c2->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp4 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$ccg->create_course_competency(['competencyid' => $comp3->get('id'), 'courseid' => $c1->id]);
|
||
|
$ccg->create_user_competency_course(['competencyid' => $comp3->get('id'), 'courseid' => $c1->id, 'userid' => $u0->id]);
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
$ccg->create_course_competency(['competencyid' => $comp1->get('id'), 'courseid' => $c1->id]);
|
||
|
$ccg->create_course_competency(['competencyid' => $comp4->get('id'), 'courseid' => $c1->id]);
|
||
|
$ccg->create_course_competency(['competencyid' => $comp2->get('id'), 'courseid' => $c2->id]);
|
||
|
$ccg->create_user_competency_course(['competencyid' => $comp1->get('id'), 'courseid' => $c1->id, 'userid' => $u0->id]);
|
||
|
$ccg->create_user_competency_course(['competencyid' => $comp4->get('id'), 'courseid' => $c1->id, 'userid' => $u0->id]);
|
||
|
$ccg->create_user_competency_course(['competencyid' => $comp2->get('id'), 'courseid' => $c2->id, 'userid' => $u0->id]);
|
||
|
$ccs = new \core_competency\course_competency_settings(null, (object) ['courseid' => $c1->id]);
|
||
|
$ccs->create();
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
$ccg->create_course_competency(['competencyid' => $comp3->get('id'), 'courseid' => $c2->id]);
|
||
|
$ccg->create_user_competency_course(['competencyid' => $comp3->get('id'), 'courseid' => $c2->id, 'userid' => $u0->id]);
|
||
|
$ccs = new \core_competency\course_competency_settings(null, (object) ['courseid' => $c2->id]);
|
||
|
$ccs->create();
|
||
|
|
||
|
// Export.
|
||
|
$this->setAdminUser();
|
||
|
provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$c1ctx->id]));
|
||
|
|
||
|
// Check exported context 1.
|
||
|
$data = writer::with_context($c1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'associations');
|
||
|
$this->assertCount(2, $data->competencies);
|
||
|
$this->assertEquals($comp1->get('shortname'), $data->competencies[0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->competencies[0]['created_or_modified_by_you']);
|
||
|
$this->assertEquals($comp4->get('shortname'), $data->competencies[1]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->competencies[1]['created_or_modified_by_you']);
|
||
|
$data = writer::with_context($c1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'settings');
|
||
|
$this->assertEquals(transform::yesno(true), $data->created_or_modified_by_you);
|
||
|
$data = writer::with_context($c1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'rated_by_me');
|
||
|
$this->assertCount(2, $data->ratings);
|
||
|
$this->assertEquals($comp1->get('shortname'), $data->ratings[0]['name']);
|
||
|
$this->assertEquals($comp4->get('shortname'), $data->ratings[1]['name']);
|
||
|
|
||
|
// Check exported context 2.
|
||
|
$data = writer::with_context($c2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'associations');
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($c2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'settings');
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($c2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'rated_by_me');
|
||
|
$this->assertEmpty($data);
|
||
|
|
||
|
// Export both contexts.
|
||
|
provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$c1ctx->id, $c2ctx->id]));
|
||
|
|
||
|
// Check exported context 1.
|
||
|
$data = writer::with_context($c1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'associations');
|
||
|
$this->assertCount(2, $data->competencies);
|
||
|
$this->assertEquals($comp1->get('shortname'), $data->competencies[0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->competencies[0]['created_or_modified_by_you']);
|
||
|
$this->assertEquals($comp4->get('shortname'), $data->competencies[1]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->competencies[1]['created_or_modified_by_you']);
|
||
|
$data = writer::with_context($c1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'settings');
|
||
|
$this->assertEquals(transform::yesno(true), $data->created_or_modified_by_you);
|
||
|
$data = writer::with_context($c1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'rated_by_me');
|
||
|
$this->assertCount(2, $data->ratings);
|
||
|
$this->assertEquals($comp1->get('shortname'), $data->ratings[0]['name']);
|
||
|
$this->assertEquals($comp4->get('shortname'), $data->ratings[1]['name']);
|
||
|
|
||
|
// Check exported context 2.
|
||
|
$data = writer::with_context($c2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'associations');
|
||
|
$this->assertCount(1, $data->competencies);
|
||
|
$this->assertEquals($comp2->get('shortname'), $data->competencies[0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->competencies[0]['created_or_modified_by_you']);
|
||
|
$data = writer::with_context($c2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'settings');
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($c2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'rated_by_me');
|
||
|
$this->assertCount(1, $data->ratings);
|
||
|
$this->assertEquals($comp2->get('shortname'), $data->ratings[0]['name']);
|
||
|
}
|
||
|
|
||
|
public function test_export_data_for_user_in_course_context_with_real_data() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$c1 = $dg->create_course();
|
||
|
$c2 = $dg->create_course();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
|
||
|
$c1ctx = context_course::instance($c1->id);
|
||
|
$c2ctx = context_course::instance($c2->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$ccg->create_user_competency_course(['competencyid' => $comp1->get('id'), 'courseid' => $c1->id,
|
||
|
'userid' => $u1->id, 'grade' => 1, 'proficiency' => true]);
|
||
|
$ccg->create_user_competency_course(['competencyid' => $comp2->get('id'), 'courseid' => $c1->id,
|
||
|
'userid' => $u1->id, 'grade' => 2, 'proficiency' => false]);
|
||
|
$ccg->create_user_competency_course(['competencyid' => $comp2->get('id'), 'courseid' => $c2->id,
|
||
|
'userid' => $u1->id, 'grade' => 3, 'proficiency' => false]);
|
||
|
$ccg->create_user_competency_course(['competencyid' => $comp3->get('id'), 'courseid' => $c2->id,
|
||
|
'userid' => $u1->id]);
|
||
|
|
||
|
$ccg->create_user_competency_course(['competencyid' => $comp3->get('id'), 'courseid' => $c1->id, 'userid' => $u2->id]);
|
||
|
$ccg->create_user_competency_course(['competencyid' => $comp3->get('id'), 'courseid' => $c2->id, 'userid' => $u2->id]);
|
||
|
|
||
|
// Export user 1, in course 1.
|
||
|
provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$c1ctx->id]));
|
||
|
|
||
|
// Check course 1.
|
||
|
$data = writer::with_context($c1ctx)->get_data([get_string('competencies', 'core_competency')]);
|
||
|
$this->assertCount(2, $data->ratings);
|
||
|
$this->assertEquals($comp1->get('shortname'), $data->ratings[0]['name']);
|
||
|
$this->assertEquals('A', $data->ratings[0]['rating']['rating']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->ratings[0]['rating']['proficient']);
|
||
|
$this->assertEquals($comp2->get('shortname'), $data->ratings[1]['name']);
|
||
|
$this->assertEquals('B', $data->ratings[1]['rating']['rating']);
|
||
|
$this->assertEquals(transform::yesno(false), $data->ratings[1]['rating']['proficient']);
|
||
|
|
||
|
// Check course 2.
|
||
|
$data = writer::with_context($c2ctx)->get_data([get_string('competencies', 'core_competency')]);
|
||
|
$this->assertEmpty($data);
|
||
|
|
||
|
// Export user 1, in course 2.
|
||
|
provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$c2ctx->id]));
|
||
|
$data = writer::with_context($c2ctx)->get_data([get_string('competencies', 'core_competency')]);
|
||
|
$this->assertCount(2, $data->ratings);
|
||
|
$this->assertEquals($comp2->get('shortname'), $data->ratings[0]['name']);
|
||
|
$this->assertEquals('C', $data->ratings[0]['rating']['rating']);
|
||
|
$this->assertEquals(transform::yesno(false), $data->ratings[0]['rating']['proficient']);
|
||
|
$this->assertEquals($comp3->get('shortname'), $data->ratings[1]['name']);
|
||
|
$this->assertEquals('-', $data->ratings[1]['rating']['rating']);
|
||
|
$this->assertEquals('-', $data->ratings[1]['rating']['proficient']);
|
||
|
}
|
||
|
|
||
|
public function test_export_data_for_user_in_system_and_category_contexts() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$c1 = $dg->create_cohort();
|
||
|
$c2 = $dg->create_cohort();
|
||
|
$cat1 = $dg->create_category();
|
||
|
$cat2 = $dg->create_category();
|
||
|
|
||
|
$cat1ctx = context_coursecat::instance($cat1->id);
|
||
|
$cat2ctx = context_coursecat::instance($cat2->id);
|
||
|
$sysctx = context_system::instance();
|
||
|
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
$f1 = $ccg->create_framework();
|
||
|
$f1bis = $ccg->create_framework();
|
||
|
$f2 = $ccg->create_framework(['contextid' => $cat1ctx->id]);
|
||
|
$c2a = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
|
||
|
$c2b = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
|
||
|
|
||
|
$t1 = $ccg->create_template();
|
||
|
$t2 = $ccg->create_template(['contextid' => $cat1ctx->id]);
|
||
|
$tc2a = $ccg->create_template_competency(['templateid' => $t2->get('id'), 'competencyid' => $c2a->get('id')]);
|
||
|
$tch2 = $ccg->create_template_cohort(['templateid' => $t2->get('id'), 'cohortid' => $c1->id]);
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
$f3 = $ccg->create_framework(['contextid' => $cat2ctx->id]);
|
||
|
$c1a = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
|
||
|
$c1b = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
|
||
|
$c3a = $ccg->create_competency(['competencyframeworkid' => $f3->get('id')]);
|
||
|
$c3b = $ccg->create_competency(['competencyframeworkid' => $f3->get('id')]);
|
||
|
$c3c = $ccg->create_competency(['competencyframeworkid' => $f3->get('id')]);
|
||
|
$c3d = $ccg->create_competency(['competencyframeworkid' => $f3->get('id')]);
|
||
|
$rc1 = $ccg->create_related_competency(['competencyid' => $c2a->get('id'), 'relatedcompetencyid' => $c2b->get('id')]);
|
||
|
|
||
|
$t3 = $ccg->create_template(['contextid' => $cat2ctx->id]);
|
||
|
$tch1 = $ccg->create_template_cohort(['templateid' => $t1->get('id'), 'cohortid' => $c2->id]);
|
||
|
$tc1a = $ccg->create_template_competency(['templateid' => $t1->get('id'), 'competencyid' => $c1a->get('id')]);
|
||
|
$tc1b = $ccg->create_template_competency(['templateid' => $t1->get('id'), 'competencyid' => $c2a->get('id')]);
|
||
|
$tc3a = $ccg->create_template_competency(['templateid' => $t3->get('id'), 'competencyid' => $c3a->get('id')]);
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
$rc2 = $ccg->create_related_competency(['competencyid' => $c3a->get('id'), 'relatedcompetencyid' => $c3b->get('id')]);
|
||
|
$rc3 = $ccg->create_related_competency(['competencyid' => $c3a->get('id'), 'relatedcompetencyid' => $c3c->get('id')]);
|
||
|
|
||
|
$this->setAdminUser();
|
||
|
provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$sysctx->id, $cat1ctx->id, $cat2ctx->id]));
|
||
|
|
||
|
// Check frameworks for u1 in system.
|
||
|
$data = writer::with_context($sysctx)->get_related_data([get_string('competencies', 'core_competency')], 'frameworks');
|
||
|
$this->assertCount(2, $data->frameworks);
|
||
|
$this->assertEquals($f1->get('shortname'), $data->frameworks[0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->frameworks[0]['created_or_modified_by_you']);
|
||
|
$this->assertEquals($f1bis->get('shortname'), $data->frameworks[1]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->frameworks[1]['created_or_modified_by_you']);
|
||
|
$this->assertEmpty($data->frameworks[0]['competencies']);
|
||
|
$this->assertEmpty($data->frameworks[1]['competencies']);
|
||
|
|
||
|
// Check templates for u1 in system.
|
||
|
$data = writer::with_context($sysctx)->get_related_data([get_string('competencies', 'core_competency')], 'templates');
|
||
|
$this->assertCount(1, $data->templates);
|
||
|
$this->assertEquals($t1->get('shortname'), $data->templates[0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->templates[0]['created_or_modified_by_you']);
|
||
|
$this->assertEmpty($data->templates[0]['competencies']);
|
||
|
$this->assertEmpty($data->templates[0]['cohorts']);
|
||
|
|
||
|
// Check frameworks for u1 in cat1.
|
||
|
$data = writer::with_context($cat1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'frameworks');
|
||
|
$this->assertCount(1, $data->frameworks);
|
||
|
$this->assertEquals($f2->get('shortname'), $data->frameworks[0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->frameworks[0]['created_or_modified_by_you']);
|
||
|
$this->assertCount(2, $data->frameworks[0]['competencies']);
|
||
|
$this->assertEquals($c2a->get('shortname'), $data->frameworks[0]['competencies'][0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->frameworks[0]['competencies'][0]['created_or_modified_by_you']);
|
||
|
$this->assertEquals($c2b->get('shortname'), $data->frameworks[0]['competencies'][1]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->frameworks[0]['competencies'][1]['created_or_modified_by_you']);
|
||
|
|
||
|
// Check templates for u1 in cat1.
|
||
|
$data = writer::with_context($cat1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'templates');
|
||
|
$this->assertCount(1, $data->templates);
|
||
|
$this->assertEquals($t2->get('shortname'), $data->templates[0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->templates[0]['created_or_modified_by_you']);
|
||
|
$this->assertCount(1, $data->templates[0]['competencies']);
|
||
|
$this->assertEquals($c2a->get('shortname'), $data->templates[0]['competencies'][0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->templates[0]['competencies'][0]['created_or_modified_by_you']);
|
||
|
$this->assertCount(1, $data->templates[0]['cohorts']);
|
||
|
$this->assertEquals($c1->name, $data->templates[0]['cohorts'][0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->templates[0]['cohorts'][0]['created_or_modified_by_you']);
|
||
|
|
||
|
// Check frameworks for u1 in cat2.
|
||
|
$data = writer::with_context($cat2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'frameworks');
|
||
|
$this->assertCount(1, $data->frameworks);
|
||
|
$this->assertEquals($f3->get('shortname'), $data->frameworks[0]['name']);
|
||
|
$this->assertEquals(transform::yesno(false), $data->frameworks[0]['created_or_modified_by_you']);
|
||
|
$this->assertCount(3, $data->frameworks[0]['competencies']);
|
||
|
$competency = $data->frameworks[0]['competencies'][0];
|
||
|
$this->assertEquals($c3a->get('shortname'), $competency['name']);
|
||
|
$this->assertEquals(transform::yesno(false), $competency['created_or_modified_by_you']);
|
||
|
$this->assertCount(2, $competency['related_competencies']);
|
||
|
$this->assertEquals($c3b->get('shortname'), $competency['related_competencies'][0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $competency['related_competencies'][0]['created_or_modified_by_you']);
|
||
|
$this->assertEquals($c3c->get('shortname'), $competency['related_competencies'][1]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $competency['related_competencies'][1]['created_or_modified_by_you']);
|
||
|
$competency = $data->frameworks[0]['competencies'][1];
|
||
|
$this->assertEquals($c3b->get('shortname'), $competency['name']);
|
||
|
$this->assertCount(1, $competency['related_competencies']);
|
||
|
$competency = $data->frameworks[0]['competencies'][2];
|
||
|
$this->assertEquals($c3c->get('shortname'), $competency['name']);
|
||
|
$this->assertCount(1, $competency['related_competencies']);
|
||
|
|
||
|
// Check templates for u1 in cat2.
|
||
|
$data = writer::with_context($cat2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'templates');
|
||
|
$this->assertEmpty($data->templates);
|
||
|
|
||
|
provider::export_user_data(new approved_contextlist($u2, 'core_competency', [$sysctx->id, $cat1ctx->id, $cat2ctx->id]));
|
||
|
|
||
|
// Check frameworks for u2 in system.
|
||
|
$data = writer::with_context($sysctx)->get_related_data([get_string('competencies', 'core_competency')], 'frameworks');
|
||
|
$this->assertCount(1, $data->frameworks);
|
||
|
$this->assertEquals($f1->get('shortname'), $data->frameworks[0]['name']);
|
||
|
$this->assertEquals(transform::yesno(false), $data->frameworks[0]['created_or_modified_by_you']);
|
||
|
$this->assertCount(2, $data->frameworks[0]['competencies']);
|
||
|
$competency = $data->frameworks[0]['competencies'][0];
|
||
|
$this->assertEquals($c1a->get('shortname'), $competency['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $competency['created_or_modified_by_you']);
|
||
|
$competency = $data->frameworks[0]['competencies'][1];
|
||
|
$this->assertEquals($c1b->get('shortname'), $competency['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $competency['created_or_modified_by_you']);
|
||
|
|
||
|
// Check templates for u2 in system.
|
||
|
$data = writer::with_context($sysctx)->get_related_data([get_string('competencies', 'core_competency')], 'templates');
|
||
|
$this->assertCount(1, $data->templates);
|
||
|
$this->assertEquals($t1->get('shortname'), $data->templates[0]['name']);
|
||
|
$this->assertEquals(transform::yesno(false), $data->templates[0]['created_or_modified_by_you']);
|
||
|
$this->assertCount(2, $data->templates[0]['competencies']);
|
||
|
$competency = $data->templates[0]['competencies'][0];
|
||
|
$this->assertEquals($c1a->get('shortname'), $competency['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $competency['created_or_modified_by_you']);
|
||
|
$competency = $data->templates[0]['competencies'][1];
|
||
|
$this->assertEquals($c2a->get('shortname'), $competency['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $competency['created_or_modified_by_you']);
|
||
|
$this->assertCount(1, $data->templates[0]['cohorts']);
|
||
|
$this->assertEquals($c2->name, $data->templates[0]['cohorts'][0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->templates[0]['cohorts'][0]['created_or_modified_by_you']);
|
||
|
|
||
|
// Check frameworks for u2 in cat1.
|
||
|
$data = writer::with_context($cat1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'frameworks');
|
||
|
$this->assertCount(1, $data->frameworks);
|
||
|
$this->assertEquals(transform::yesno(false), $data->frameworks[0]['created_or_modified_by_you']);
|
||
|
$this->assertCount(2, $data->frameworks[0]['competencies']);
|
||
|
$competency = $data->frameworks[0]['competencies'][0];
|
||
|
$this->assertEquals($c2a->get('shortname'), $competency['name']);
|
||
|
$this->assertEquals(transform::yesno(false), $competency['created_or_modified_by_you']);
|
||
|
$this->assertCount(1, $competency['related_competencies']);
|
||
|
$this->assertEquals($c2b->get('shortname'), $competency['related_competencies'][0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $competency['related_competencies'][0]['created_or_modified_by_you']);
|
||
|
|
||
|
// Check templates for u2 in system.
|
||
|
$data = writer::with_context($cat2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'templates');
|
||
|
$this->assertCount(1, $data->templates);
|
||
|
$this->assertEquals($t3->get('shortname'), $data->templates[0]['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $data->templates[0]['created_or_modified_by_you']);
|
||
|
$this->assertCount(1, $data->templates[0]['competencies']);
|
||
|
$competency = $data->templates[0]['competencies'][0];
|
||
|
$this->assertEquals($c3a->get('shortname'), $competency['name']);
|
||
|
$this->assertEquals(transform::yesno(true), $competency['created_or_modified_by_you']);
|
||
|
}
|
||
|
|
||
|
public function test_export_data_for_user_with_related_learning_plans() {
|
||
|
global $DB;
|
||
|
|
||
|
$path = [
|
||
|
get_string('competencies', 'core_competency'),
|
||
|
get_string('privacy:path:relatedtome', 'core_competency'),
|
||
|
get_string('privacy:path:plans', 'core_competency'),
|
||
|
];
|
||
|
$yes = transform::yesno(true);
|
||
|
$no = transform::yesno(false);
|
||
|
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$u0 = $dg->create_user();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
$u5 = $dg->create_user();
|
||
|
$u6 = $dg->create_user();
|
||
|
$u7 = $dg->create_user();
|
||
|
$u8 = $dg->create_user();
|
||
|
|
||
|
$dg->role_assign($DB->get_field('role', 'id', ['archetype' => 'manager'], IGNORE_MULTIPLE), $u6->id);
|
||
|
$u0ctx = context_user::instance($u0->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp4 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$t = $ccg->create_template();
|
||
|
$tc1 = $ccg->create_template_competency(['competencyid' => $comp1->get('id'), 'templateid' => $t->get('id')]);
|
||
|
$tc2 = $ccg->create_template_competency(['competencyid' => $comp2->get('id'), 'templateid' => $t->get('id')]);
|
||
|
$tc3 = $ccg->create_template_competency(['competencyid' => $comp3->get('id'), 'templateid' => $t->get('id')]);
|
||
|
$tc4 = $ccg->create_template_competency(['competencyid' => $comp4->get('id'), 'templateid' => $t->get('id')]);
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
$p1 = $ccg->create_plan(['templateid' => $t->get('id'), 'userid' => $u0->id]);
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
$p2 = $ccg->create_plan(['userid' => $u0->id, 'reviewerid' => $u7->id]);
|
||
|
|
||
|
$this->setUser($u3);
|
||
|
$p1c1 = $ccg->create_plan_competency(['planid' => $p1->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$p2c2 = $ccg->create_plan_competency(['planid' => $p2->get('id'), 'competencyid' => $comp2->get('id')]);
|
||
|
$p2c3 = $ccg->create_plan_competency(['planid' => $p2->get('id'), 'competencyid' => $comp3->get('id')]);
|
||
|
|
||
|
$this->setUser($u4);
|
||
|
$uc1 = $ccg->create_user_competency(['competencyid' => $comp1->get('id'), 'userid' => $u0->id, 'grade' => 1,
|
||
|
'proficiency' => true]);
|
||
|
$uc2 = $ccg->create_user_competency(['competencyid' => $comp2->get('id'), 'userid' => $u0->id, 'grade' => 2,
|
||
|
'proficiency' => false]);
|
||
|
$uc3 = $ccg->create_user_competency(['competencyid' => $comp3->get('id'), 'userid' => $u0->id]);
|
||
|
$uc4 = $ccg->create_user_competency(['competencyid' => $comp4->get('id'), 'userid' => $u0->id, 'reviewerid' => $u5->id]);
|
||
|
|
||
|
$this->setUser($u5);
|
||
|
$p3 = $ccg->create_plan(['userid' => $u0->id]);
|
||
|
$p3c1 = $ccg->create_plan_competency(['planid' => $p3->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$p3c3 = $ccg->create_plan_competency(['planid' => $p3->get('id'), 'competencyid' => $comp3->get('id')]);
|
||
|
|
||
|
// Add comments on plan.
|
||
|
$this->allow_anyone_to_comment_anywhere();
|
||
|
$this->setUser($u0);
|
||
|
$p1->get_comment_object()->add('Hello.');
|
||
|
$this->setUser($u8);
|
||
|
$p1->get_comment_object()->add('Hi.');
|
||
|
|
||
|
// Export data for user 1.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$u0ctx->id]));
|
||
|
$planpath = array_merge($path, ["{$p1->get('name')} ({$p1->get('id')})"]);
|
||
|
$data = writer::with_context($u0ctx)->get_data($planpath);
|
||
|
$this->assertEquals($p1->get('name'), $data->name);
|
||
|
$this->assertEquals($yes, $data->created_or_modified_by_you);
|
||
|
|
||
|
// Export data for user 2.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u2, 'core_competency', [$u0ctx->id]));
|
||
|
$planpath = array_merge($path, ["{$p2->get('name')} ({$p2->get('id')})"]);
|
||
|
$data = writer::with_context($u0ctx)->get_data($planpath);
|
||
|
$this->assertEquals($p2->get('name'), $data->name);
|
||
|
$this->assertEquals($yes, $data->created_or_modified_by_you);
|
||
|
|
||
|
// Export data for user 3.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u3, 'core_competency', [$u0ctx->id]));
|
||
|
$planpath = array_merge($path, ["{$p1->get('name')} ({$p1->get('id')})"]);
|
||
|
$data = writer::with_context($u0ctx)->get_data($planpath);
|
||
|
$this->assertEquals($p1->get('name'), $data->name);
|
||
|
$this->assertEquals($no, $data->created_or_modified_by_you);
|
||
|
$this->assertCount(1, $data->competencies);
|
||
|
$this->assertEquals($comp1->get('shortname'), $data->competencies[0]['name']);
|
||
|
$this->assertEquals($yes, $data->competencies[0]['created_or_modified_by_you']);
|
||
|
|
||
|
$planpath = array_merge($path, ["{$p2->get('name')} ({$p2->get('id')})"]);
|
||
|
$data = writer::with_context($u0ctx)->get_data($planpath);
|
||
|
$this->assertEquals($p2->get('name'), $data->name);
|
||
|
$this->assertEquals($no, $data->created_or_modified_by_you);
|
||
|
$competencies = $data->competencies;
|
||
|
$this->assertCount(2, $competencies);
|
||
|
$this->assertEquals($comp2->get('shortname'), $competencies[0]['name']);
|
||
|
$this->assertEquals($yes, $competencies[0]['created_or_modified_by_you']);
|
||
|
$this->assertEquals($comp3->get('shortname'), $competencies[1]['name']);
|
||
|
$this->assertEquals($yes, $competencies[1]['created_or_modified_by_you']);
|
||
|
|
||
|
// Export data for user 4.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u4, 'core_competency', [$u0ctx->id]));
|
||
|
foreach ([$p1, $p2, $p3] as $plan) {
|
||
|
$planpath = array_merge($path, ["{$p2->get('name')} ({$p2->get('id')})"]);
|
||
|
$data = writer::with_context($u0ctx)->get_data($planpath);
|
||
|
$this->assertEmpty($data);
|
||
|
}
|
||
|
|
||
|
// Export data for user 5.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u5, 'core_competency', [$u0ctx->id]));
|
||
|
$planpath = array_merge($path, ["{$p3->get('name')} ({$p3->get('id')})"]);
|
||
|
$data = writer::with_context($u0ctx)->get_data($planpath);
|
||
|
$this->assertEquals($p3->get('name'), $data->name);
|
||
|
$this->assertEquals($yes, $data->created_or_modified_by_you);
|
||
|
$this->assertCount(2, $data->competencies);
|
||
|
$competency = $data->competencies[0];
|
||
|
$this->assertEquals($comp1->get('shortname'), $competency['name']);
|
||
|
$this->assertEquals($yes, $competency['created_or_modified_by_you']);
|
||
|
$competency = $data->competencies[1];
|
||
|
$this->assertEquals($comp3->get('shortname'), $competency['name']);
|
||
|
$this->assertEquals($yes, $competency['created_or_modified_by_you']);
|
||
|
|
||
|
// Do some stuff.
|
||
|
$this->setUser($u6);
|
||
|
api::complete_plan($p3);
|
||
|
|
||
|
// Export data for user 6.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u6, 'core_competency', [$u0ctx->id]));
|
||
|
$planpath = array_merge($path, ["{$p3->get('name')} ({$p3->get('id')})"]);
|
||
|
$data = writer::with_context($u0ctx)->get_data($planpath);
|
||
|
$this->assertEquals($p3->get('name'), $data->name);
|
||
|
$this->assertEquals($yes, $data->created_or_modified_by_you);
|
||
|
$this->assertCount(2, $data->competencies);
|
||
|
$competency = $data->competencies[0];
|
||
|
$this->assertEquals($comp1->get('shortname'), $competency['name']);
|
||
|
$this->assertArrayNotHasKey('created_or_modified_by_you', $competency);
|
||
|
$this->assertEquals('A', $competency['rating']['rating']);
|
||
|
$this->assertEquals($yes, $competency['rating']['created_or_modified_by_you']);
|
||
|
$competency = $data->competencies[1];
|
||
|
$this->assertEquals($comp3->get('shortname'), $competency['name']);
|
||
|
$this->assertArrayNotHasKey('created_or_modified_by_you', $competency);
|
||
|
$this->assertEquals('-', $competency['rating']['rating']);
|
||
|
$this->assertEquals($yes, $competency['rating']['created_or_modified_by_you']);
|
||
|
|
||
|
// Export data for user 7.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u7, 'core_competency', [$u0ctx->id]));
|
||
|
$planpath = array_merge($path, ["{$p2->get('name')} ({$p2->get('id')})"]);
|
||
|
$data = writer::with_context($u0ctx)->get_data($planpath);
|
||
|
$this->assertEquals($p2->get('name'), $data->name);
|
||
|
$this->assertEquals($no, $data->created_or_modified_by_you);
|
||
|
$this->assertEquals($yes, $data->reviewer_is_you);
|
||
|
|
||
|
// Export data for user 8.
|
||
|
writer::reset();
|
||
|
$this->setUser($u8);
|
||
|
provider::export_user_data(new approved_contextlist($u8, 'core_competency', [$u0ctx->id]));
|
||
|
$planpath = array_merge($path, ["{$p1->get('name')} ({$p1->get('id')})"]);
|
||
|
$data = writer::with_context($u0ctx)->get_data($planpath);
|
||
|
$this->assertEquals($p1->get('name'), $data->name);
|
||
|
$this->assertEquals($no, $data->created_or_modified_by_you);
|
||
|
$this->assertEquals($no, $data->reviewer_is_you);
|
||
|
$commentspath = array_merge($planpath, [get_string('commentsubcontext', 'core_comment')]);
|
||
|
$data = writer::with_context($u0ctx)->get_data($commentspath);
|
||
|
$this->assert_exported_comments(['Hi.'], $data->comments);
|
||
|
}
|
||
|
|
||
|
public function test_export_data_for_user_with_related_competencies() {
|
||
|
$path = [
|
||
|
get_string('competencies', 'core_competency'),
|
||
|
get_string('privacy:path:relatedtome', 'core_competency'),
|
||
|
get_string('competencies', 'core_competency'),
|
||
|
];
|
||
|
$yes = transform::yesno(true);
|
||
|
$no = transform::yesno(false);
|
||
|
$makecomppath = function($comp) use ($path) {
|
||
|
return array_merge($path, ["{$comp->get('shortname')} ({$comp->get('id')})"]);
|
||
|
};
|
||
|
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$u0 = $dg->create_user();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
$u5 = $dg->create_user();
|
||
|
|
||
|
$u0ctx = context_user::instance($u0->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp4 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
api::add_evidence($u0->id, $comp1->get('id'), $u0ctx, \core_competency\evidence::ACTION_LOG,
|
||
|
'privacy:metadata:competency_evidence', 'core_competency');
|
||
|
api::add_evidence($u0->id, $comp1->get('id'), $u0ctx, \core_competency\evidence::ACTION_LOG,
|
||
|
'privacy:metadata:competency_evidence', 'core_competency');
|
||
|
api::add_evidence($u0->id, $comp2->get('id'), $u0ctx, \core_competency\evidence::ACTION_LOG,
|
||
|
'privacy:metadata:competency_evidence', 'core_competency');
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
api::add_evidence($u0->id, $comp1->get('id'), $u0ctx, \core_competency\evidence::ACTION_COMPLETE,
|
||
|
'privacy:metadata:competency_evidence', 'core_competency', null, false, null, null, $u3->id);
|
||
|
|
||
|
$this->setUser($u3);
|
||
|
api::add_evidence($u0->id, $comp2->get('id'), $u0ctx, \core_competency\evidence::ACTION_OVERRIDE,
|
||
|
'privacy:metadata:competency_evidence', 'core_competency', null, false, null, 1, $u4->id, 'Ze note');
|
||
|
|
||
|
$this->setUser($u4);
|
||
|
$uc3 = $ccg->create_user_competency(['userid' => $u0->id, 'competencyid' => $comp3->get('id')]);
|
||
|
$uc4 = $ccg->create_user_competency(['userid' => $u0->id, 'competencyid' => $comp4->get('id'), 'reviewerid' => $u2->id]);
|
||
|
|
||
|
$this->allow_anyone_to_comment_anywhere();
|
||
|
$this->setUser($u0);
|
||
|
$uc3->get_comment_object()->add('...');
|
||
|
$this->setUser($u5);
|
||
|
$uc3->get_comment_object()->add('Hello!');
|
||
|
$uc3->get_comment_object()->add('It\'s me...');
|
||
|
|
||
|
// Export data for user 1.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$u0ctx->id]));
|
||
|
$data = writer::with_context($u0ctx)->get_data($makecomppath($comp1));
|
||
|
$competency = (array) $data;
|
||
|
$this->assertEquals($comp1->get('shortname'), $competency['name']);
|
||
|
$evidence = $competency['evidence'];
|
||
|
$this->assertCount(2, $evidence);
|
||
|
$this->assertEquals(get_string('privacy:evidence:action:log', 'core_competency'), $evidence[0]['action']);
|
||
|
$this->assertEquals('-', $evidence[0]['actionuserid']);
|
||
|
$this->assertEquals($no, $evidence[0]['acting_user_is_you']);
|
||
|
$this->assertEquals($yes, $evidence[0]['created_or_modified_by_you']);
|
||
|
$this->assertEquals(get_string('privacy:evidence:action:log', 'core_competency'), $evidence[1]['action']);
|
||
|
$this->assertEquals('-', $evidence[1]['actionuserid']);
|
||
|
$this->assertEquals($no, $evidence[1]['acting_user_is_you']);
|
||
|
$this->assertEquals($yes, $evidence[1]['created_or_modified_by_you']);
|
||
|
$data = writer::with_context($u0ctx)->get_data($makecomppath($comp2));
|
||
|
$competency = (array) $data;
|
||
|
$this->assertEquals($comp2->get('shortname'), $competency['name']);
|
||
|
$evidence = $competency['evidence'];
|
||
|
$this->assertCount(1, $evidence);
|
||
|
$this->assertEquals(get_string('privacy:evidence:action:log', 'core_competency'), $evidence[0]['action']);
|
||
|
$this->assertEquals('-', $evidence[0]['actionuserid']);
|
||
|
$this->assertEquals($no, $evidence[0]['acting_user_is_you']);
|
||
|
$this->assertEquals($yes, $evidence[0]['created_or_modified_by_you']);
|
||
|
|
||
|
// Export data for user 2.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u2, 'core_competency', [$u0ctx->id]));
|
||
|
$data = writer::with_context($u0ctx)->get_data($makecomppath($comp1));
|
||
|
$competency = (array) $data;
|
||
|
$this->assertEquals($comp1->get('shortname'), $competency['name']);
|
||
|
$evidence = $competency['evidence'];
|
||
|
$this->assertCount(1, $evidence);
|
||
|
$this->assertEquals(get_string('privacy:evidence:action:complete', 'core_competency'), $evidence[0]['action']);
|
||
|
$this->assertEquals($u3->id, $evidence[0]['actionuserid']);
|
||
|
$this->assertEquals($no, $evidence[0]['acting_user_is_you']);
|
||
|
$this->assertEquals($yes, $evidence[0]['created_or_modified_by_you']);
|
||
|
$data = writer::with_context($u0ctx)->get_data($makecomppath($comp4));
|
||
|
$competency = (array) $data;
|
||
|
$this->assertEquals($comp4->get('shortname'), $competency['name']);
|
||
|
$this->assertCount(0, $competency['evidence']);
|
||
|
$this->assertEquals($yes, $competency['rating']['reviewer_is_you']);
|
||
|
$this->assertEquals($no, $competency['rating']['created_or_modified_by_you']);
|
||
|
|
||
|
// Export data for user 3.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u3, 'core_competency', [$u0ctx->id]));
|
||
|
$data = writer::with_context($u0ctx)->get_data($makecomppath($comp1));
|
||
|
$competency = (array) $data;
|
||
|
$this->assertEquals($comp1->get('shortname'), $competency['name']);
|
||
|
$evidence = $competency['evidence'];
|
||
|
$this->assertCount(1, $evidence);
|
||
|
$this->assertEquals($u3->id, $evidence[0]['actionuserid']);
|
||
|
$this->assertEquals($yes, $evidence[0]['acting_user_is_you']);
|
||
|
$this->assertEquals($no, $evidence[0]['created_or_modified_by_you']);
|
||
|
$data = writer::with_context($u0ctx)->get_data($makecomppath($comp2));
|
||
|
$competency = (array) $data;
|
||
|
$this->assertEquals($comp2->get('shortname'), $competency['name']);
|
||
|
$evidence = $competency['evidence'];
|
||
|
$this->assertCount(1, $evidence);
|
||
|
$this->assertEquals(get_string('privacy:evidence:action:override', 'core_competency'), $evidence[0]['action']);
|
||
|
$this->assertEquals($u4->id, $evidence[0]['actionuserid']);
|
||
|
$this->assertEquals($no, $evidence[0]['acting_user_is_you']);
|
||
|
$this->assertEquals($yes, $evidence[0]['created_or_modified_by_you']);
|
||
|
|
||
|
// Export data for user 4.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u4, 'core_competency', [$u0ctx->id]));
|
||
|
$data = writer::with_context($u0ctx)->get_data($makecomppath($comp2));
|
||
|
$competency = (array) $data;
|
||
|
$this->assertEquals($comp2->get('shortname'), $competency['name']);
|
||
|
$this->assertNull($competency['rating']);
|
||
|
$this->assertCount(1, $competency['evidence']);
|
||
|
$evidence = $competency['evidence'][0];
|
||
|
$this->assertEquals($u4->id, $evidence['actionuserid']);
|
||
|
$this->assertEquals($yes, $evidence['acting_user_is_you']);
|
||
|
$this->assertEquals($no, $evidence['created_or_modified_by_you']);
|
||
|
$data = writer::with_context($u0ctx)->get_data($makecomppath($comp3));
|
||
|
$competency = (array) $data;
|
||
|
$this->assertEquals($comp3->get('shortname'), $competency['name']);
|
||
|
$this->assertEquals($no, $competency['rating']['reviewer_is_you']);
|
||
|
$this->assertEquals($yes, $competency['rating']['created_or_modified_by_you']);
|
||
|
$this->assertEmpty($competency['evidence']);
|
||
|
$data = writer::with_context($u0ctx)->get_data($makecomppath($comp4));
|
||
|
$competency = (array) $data;
|
||
|
$this->assertEquals($comp4->get('shortname'), $competency['name']);
|
||
|
$this->assertEquals($no, $competency['rating']['reviewer_is_you']);
|
||
|
$this->assertEquals($yes, $competency['rating']['created_or_modified_by_you']);
|
||
|
$this->assertEmpty($competency['evidence']);
|
||
|
|
||
|
// Export data for user 5.
|
||
|
$this->setUser($u5);
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u5, 'core_competency', [$u0ctx->id]));
|
||
|
$data = writer::with_context($u0ctx)->get_data($makecomppath($comp3));
|
||
|
$competency = (array) $data;
|
||
|
$this->assertEquals($comp3->get('shortname'), $competency['name']);
|
||
|
$data = writer::with_context($u0ctx)->get_data(array_merge($makecomppath($comp3),
|
||
|
[get_string('commentsubcontext', 'core_comment')]));
|
||
|
$this->assert_exported_comments(['Hello!', 'It\'s me...'], $data->comments);
|
||
|
}
|
||
|
|
||
|
public function test_export_data_for_user_with_related_user_evidence() {
|
||
|
$path = [
|
||
|
get_string('competencies', 'core_competency'),
|
||
|
get_string('privacy:path:relatedtome', 'core_competency'),
|
||
|
get_string('privacy:path:userevidence', 'core_competency')
|
||
|
];
|
||
|
$yes = transform::yesno(true);
|
||
|
$no = transform::yesno(false);
|
||
|
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
|
||
|
$u0 = $dg->create_user();
|
||
|
$u0b = $dg->create_user();
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u4 = $dg->create_user();
|
||
|
|
||
|
$u0ctx = context_user::instance($u0->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$this->setUser($u0);
|
||
|
$ue0 = $ccg->create_user_evidence(['userid' => $u0->id]);
|
||
|
|
||
|
$this->setUser($u1);
|
||
|
$ue1 = $ccg->create_user_evidence(['userid' => $u0->id]);
|
||
|
$ue1b = $ccg->create_user_evidence(['userid' => $u0b->id]);
|
||
|
|
||
|
$this->setUser($u2);
|
||
|
$ccg->create_user_evidence_competency(['userevidenceid' => $ue1->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$ccg->create_user_evidence_competency(['userevidenceid' => $ue1b->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$ue2 = $ccg->create_user_evidence(['userid' => $u0->id]);
|
||
|
$ue2b = $ccg->create_user_evidence(['userid' => $u0b->id]);
|
||
|
|
||
|
$this->setUser($u3);
|
||
|
$ccg->create_user_evidence_competency(['userevidenceid' => $ue2->get('id'), 'competencyid' => $comp2->get('id')]);
|
||
|
$ccg->create_user_evidence_competency(['userevidenceid' => $ue2->get('id'), 'competencyid' => $comp3->get('id')]);
|
||
|
|
||
|
// Export for user 1.
|
||
|
provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$u0ctx->id]));
|
||
|
$uepath = array_merge($path, ["{$ue1->get('name')} ({$ue1->get('id')})"]);
|
||
|
$data = writer::with_context($u0ctx)->get_data($uepath);
|
||
|
$this->assertEquals($ue1->get('name'), $data->name);
|
||
|
$this->assertEquals($yes, $data->created_or_modified_by_you);
|
||
|
$this->assertEmpty($data->competencies);
|
||
|
|
||
|
// Export for user 2.
|
||
|
provider::export_user_data(new approved_contextlist($u2, 'core_competency', [$u0ctx->id]));
|
||
|
$uepath = array_merge($path, ["{$ue1->get('name')} ({$ue1->get('id')})"]);
|
||
|
$data = writer::with_context($u0ctx)->get_data($uepath);
|
||
|
$this->assertEquals($ue1->get('name'), $data->name);
|
||
|
$this->assertEquals($no, $data->created_or_modified_by_you);
|
||
|
$this->assertCount(1, $data->competencies);
|
||
|
$competency = $data->competencies[0];
|
||
|
$this->assertEquals($comp1->get('shortname'), $competency['name']);
|
||
|
$this->assertEquals($yes, $competency['created_or_modified_by_you']);
|
||
|
|
||
|
$uepath = array_merge($path, ["{$ue2->get('name')} ({$ue2->get('id')})"]);
|
||
|
$data = writer::with_context($u0ctx)->get_data($uepath);
|
||
|
$this->assertEquals($ue2->get('name'), $data->name);
|
||
|
$this->assertEquals($yes, $data->created_or_modified_by_you);
|
||
|
$this->assertEmpty($data->competencies);
|
||
|
|
||
|
// Export for user 3.
|
||
|
provider::export_user_data(new approved_contextlist($u3, 'core_competency', [$u0ctx->id]));
|
||
|
$uepath = array_merge($path, ["{$ue2->get('name')} ({$ue2->get('id')})"]);
|
||
|
$evidence = writer::with_context($u0ctx)->get_data($uepath);
|
||
|
$this->assertEquals($ue2->get('name'), $evidence->name);
|
||
|
$this->assertEquals($no, $evidence->created_or_modified_by_you);
|
||
|
$this->assertCount(2, $evidence->competencies);
|
||
|
$competency = $evidence->competencies[0];
|
||
|
$this->assertEquals($comp2->get('shortname'), $competency['name']);
|
||
|
$this->assertEquals($yes, $competency['created_or_modified_by_you']);
|
||
|
$competency = $evidence->competencies[1];
|
||
|
$this->assertEquals($comp3->get('shortname'), $competency['name']);
|
||
|
$this->assertEquals($yes, $competency['created_or_modified_by_you']);
|
||
|
}
|
||
|
|
||
|
public function test_export_data_for_user_about_their_learning_plans() {
|
||
|
$this->setAdminUser();
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
$path = [get_string('competencies', 'core_competency'), get_string('privacy:path:plans', 'core_competency')];
|
||
|
$yes = transform::yesno(true);
|
||
|
$no = transform::yesno(false);
|
||
|
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u1ctx = context_user::instance($u1->id);
|
||
|
$u2ctx = context_user::instance($u2->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp4 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$t = $ccg->create_template();
|
||
|
$tc2 = $ccg->create_template_competency(['competencyid' => $comp2->get('id'), 'templateid' => $t->get('id')]);
|
||
|
$tc3 = $ccg->create_template_competency(['competencyid' => $comp3->get('id'), 'templateid' => $t->get('id')]);
|
||
|
$tc4 = $ccg->create_template_competency(['competencyid' => $comp4->get('id'), 'templateid' => $t->get('id')]);
|
||
|
|
||
|
$p1a = $ccg->create_plan(['userid' => $u1->id, 'templateid' => $t->get('id'),
|
||
|
'status' => \core_competency\plan::STATUS_WAITING_FOR_REVIEW]);
|
||
|
$p1b = $ccg->create_plan(['userid' => $u1->id]);
|
||
|
$ccg->create_plan_competency(['planid' => $p1b->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$ccg->create_plan_competency(['planid' => $p1b->get('id'), 'competencyid' => $comp2->get('id')]);
|
||
|
$ccg->create_plan_competency(['planid' => $p1b->get('id'), 'competencyid' => $comp4->get('id')]);
|
||
|
$p1c = $ccg->create_plan(['userid' => $u1->id]);
|
||
|
$ccg->create_plan_competency(['planid' => $p1c->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$ccg->create_plan_competency(['planid' => $p1c->get('id'), 'competencyid' => $comp3->get('id')]);
|
||
|
$ccg->create_plan_competency(['planid' => $p1c->get('id'), 'competencyid' => $comp4->get('id')]);
|
||
|
$p1d = $ccg->create_plan(['userid' => $u1->id]);
|
||
|
|
||
|
$p2a = $ccg->create_plan(['userid' => $u2->id]);
|
||
|
$ccg->create_plan_competency(['planid' => $p2a->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$ccg->create_plan_competency(['planid' => $p2a->get('id'), 'competencyid' => $comp2->get('id')]);
|
||
|
|
||
|
$uc1a = $ccg->create_user_competency(['competencyid' => $comp1->get('id'), 'userid' => $u1->id,
|
||
|
'grade' => 2, 'proficiency' => false]);
|
||
|
$uc1b = $ccg->create_user_competency(['competencyid' => $comp2->get('id'), 'userid' => $u1->id,
|
||
|
'grade' => 3, 'proficiency' => false]);
|
||
|
$uc1c = $ccg->create_user_competency(['competencyid' => $comp3->get('id'), 'userid' => $u1->id]);
|
||
|
|
||
|
// Add comments on plan.
|
||
|
$this->allow_anyone_to_comment_anywhere();
|
||
|
$this->setUser($u1);
|
||
|
$p1a->get_comment_object()->add('Hello.');
|
||
|
$p1a->get_comment_object()->add('It\'s me.');
|
||
|
$this->setUser($u3);
|
||
|
$p1a->get_comment_object()->add('After all these years...');
|
||
|
|
||
|
// Complete the plan to create archiving, and modify the user competency again.
|
||
|
api::complete_plan($p1c);
|
||
|
$uc1a->set('grade', 1);
|
||
|
$uc1a->set('proficiency', true);
|
||
|
$uc1a->update();
|
||
|
|
||
|
// Export user data in both contexts.
|
||
|
provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$u1ctx->id, $u2ctx->id]));
|
||
|
|
||
|
// This plan is based off a template.
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1a->get('name')} ({$p1a->get('id')})"]));
|
||
|
$this->assertNotEmpty($data);
|
||
|
$this->assertEquals($p1a->get('name'), $data->name);
|
||
|
$this->assertEquals($p1a->get_statusname(), $data->status);
|
||
|
$this->assertCount(3, $data->competencies);
|
||
|
$comp = $data->competencies[0];
|
||
|
$this->assertEquals($comp2->get('shortname'), $comp['name']);
|
||
|
$this->assertEquals('C', $comp['rating']['rating']);
|
||
|
$comp = $data->competencies[1];
|
||
|
$this->assertEquals($comp3->get('shortname'), $comp['name']);
|
||
|
$this->assertEquals('-', $comp['rating']['rating']);
|
||
|
$comp = $data->competencies[2];
|
||
|
$this->assertEquals($comp4->get('shortname'), $comp['name']);
|
||
|
$this->assertNull($comp['rating']['rating']);
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1a->get('name')} ({$p1a->get('id')})",
|
||
|
get_string('commentsubcontext', 'core_comment')]));
|
||
|
$this->assert_exported_comments(['Hello.', 'It\'s me.', 'After all these years...'], $data->comments);
|
||
|
|
||
|
// This plan is manually created.
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1b->get('name')} ({$p1b->get('id')})"]));
|
||
|
$this->assertNotEmpty($data);
|
||
|
$this->assertEquals($p1b->get('name'), $data->name);
|
||
|
$this->assertCount(3, $data->competencies);
|
||
|
$comp = $data->competencies[0];
|
||
|
$this->assertEquals($comp1->get('shortname'), $comp['name']);
|
||
|
$this->assertEquals('A', $comp['rating']['rating']);
|
||
|
$comp = $data->competencies[1];
|
||
|
$this->assertEquals($comp2->get('shortname'), $comp['name']);
|
||
|
$this->assertEquals('C', $comp['rating']['rating']);
|
||
|
$comp = $data->competencies[2];
|
||
|
$this->assertEquals($comp4->get('shortname'), $comp['name']);
|
||
|
$this->assertNull($comp['rating']['rating']);
|
||
|
|
||
|
// This plan is complete.
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1c->get('name')} ({$p1c->get('id')})"]));
|
||
|
$this->assertNotEmpty($data);
|
||
|
$this->assertEquals($p1c->get('name'), $data->name);
|
||
|
$this->assertCount(3, $data->competencies);
|
||
|
$comp = $data->competencies[0];
|
||
|
$this->assertEquals($comp1->get('shortname'), $comp['name']);
|
||
|
$this->assertEquals('B', $comp['rating']['rating']);
|
||
|
$comp = $data->competencies[1];
|
||
|
$this->assertEquals($comp3->get('shortname'), $comp['name']);
|
||
|
$this->assertEquals('-', $comp['rating']['rating']);
|
||
|
$comp = $data->competencies[2];
|
||
|
$this->assertEquals($comp4->get('shortname'), $comp['name']);
|
||
|
$this->assertEquals('-', $comp['rating']['rating']);
|
||
|
|
||
|
// This plan is empty.
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1d->get('name')} ({$p1d->get('id')})"]));
|
||
|
$this->assertNotEmpty($data);
|
||
|
$this->assertEquals($p1d->get('name'), $data->name);
|
||
|
$this->assertEquals($p1d->get_statusname(), $data->status);
|
||
|
$this->assertEmpty($data->competencies);
|
||
|
|
||
|
// Confirm that we do not get export what we shouldn't.
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p2a->get('name')} ({$p2a->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p1a->get('name')} ({$p1a->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p1b->get('name')} ({$p1b->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p1c->get('name')} ({$p1c->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p2a->get('name')} ({$p2a->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
|
||
|
// Export for user 2.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u2, 'core_competency', [$u1ctx->id, $u2ctx->id]));
|
||
|
|
||
|
// Validate the basic plan.
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p2a->get('name')} ({$p2a->get('id')})"]));
|
||
|
$this->assertNotEmpty($data);
|
||
|
$this->assertEquals($p2a->get('name'), $data->name);
|
||
|
$this->assertCount(2, $data->competencies);
|
||
|
$comp = $data->competencies[0];
|
||
|
$this->assertEquals($comp1->get('shortname'), $comp['name']);
|
||
|
$this->assertNull($comp['rating']);
|
||
|
$comp = $data->competencies[1];
|
||
|
$this->assertEquals($comp2->get('shortname'), $comp['name']);
|
||
|
$this->assertNull($comp['rating']);
|
||
|
|
||
|
// Confirm that we do not get export what we shouldn't.
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p1a->get('name')} ({$p1a->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p1b->get('name')} ({$p1b->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p1c->get('name')} ({$p1c->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1a->get('name')} ({$p1a->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1b->get('name')} ({$p1b->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1c->get('name')} ({$p1c->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
}
|
||
|
|
||
|
public function test_export_data_for_user_about_their_competencies() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
$path = [get_string('competencies', 'core_competency'), get_string('competencies', 'core_competency')];
|
||
|
$no = transform::yesno(false);
|
||
|
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
$u1ctx = context_user::instance($u1->id);
|
||
|
$u2ctx = context_user::instance($u2->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$uc1a = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp1->get('id')]);
|
||
|
$uc1b = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp2->get('id'),
|
||
|
'grade' => 2, 'proficiency' => false]);
|
||
|
$uc1c = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp3->get('id')]);
|
||
|
$e1a1 = $ccg->create_evidence(['usercompetencyid' => $uc1a->get('id'),
|
||
|
'action' => \core_competency\evidence::ACTION_COMPLETE, 'grade' => 1]);
|
||
|
$e1a2 = $ccg->create_evidence(['usercompetencyid' => $uc1a->get('id'), 'note' => 'Not too bad']);
|
||
|
$e1b1 = $ccg->create_evidence(['usercompetencyid' => $uc1b->get('id'), 'url' => 'https://example.com']);
|
||
|
|
||
|
$uc2a = $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $comp1->get('id')]);
|
||
|
$uc2b = $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $comp2->get('id')]);
|
||
|
$e2a1 = $ccg->create_evidence(['usercompetencyid' => $uc2b->get('id'), 'note' => 'A']);
|
||
|
$e2a2 = $ccg->create_evidence(['usercompetencyid' => $uc2b->get('id'), 'note' => 'B']);
|
||
|
$e2a3 = $ccg->create_evidence(['usercompetencyid' => $uc2b->get('id'), 'note' => 'C']);
|
||
|
|
||
|
// Add comments on competency.
|
||
|
$this->allow_anyone_to_comment_anywhere();
|
||
|
$this->setUser($u1);
|
||
|
$uc1a->get_comment_object()->add('Hello.');
|
||
|
$uc1a->get_comment_object()->add('It\'s me.');
|
||
|
$this->setUser($u3);
|
||
|
$uc1a->get_comment_object()->add('After all these years...');
|
||
|
|
||
|
// Export for user 1 in both contexts.
|
||
|
provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$u1ctx->id, $u2ctx->id]));
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$comp1->get('shortname')} ({$comp1->get('id')})"]));
|
||
|
$this->assertNotEmpty($data);
|
||
|
$this->assertEquals($comp1->get('shortname'), $data->name);
|
||
|
$this->assertEquals('-', $data->rating['rating']);
|
||
|
$this->assertCount(2, $data->evidence);
|
||
|
$this->assertEquals(get_string('privacy:evidence:action:complete', 'core_competency'), $data->evidence[1]['action']);
|
||
|
$this->assertEquals('Not too bad', $data->evidence[0]['note']);
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$comp1->get('shortname')} ({$comp1->get('id')})",
|
||
|
get_string('commentsubcontext', 'core_comment')]));
|
||
|
$this->assert_exported_comments(['Hello.', 'It\'s me.', 'After all these years...'], $data->comments);
|
||
|
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$comp2->get('shortname')} ({$comp2->get('id')})"]));
|
||
|
$this->assertNotEmpty($data);
|
||
|
$this->assertEquals($comp2->get('shortname'), $data->name);
|
||
|
$this->assertEquals('B', $data->rating['rating']);
|
||
|
$this->assertEquals($no, $data->rating['proficient']);
|
||
|
$this->assertCount(1, $data->evidence);
|
||
|
$this->assertEquals('https://example.com', $data->evidence[0]['url']);
|
||
|
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$comp3->get('shortname')} ({$comp3->get('id')})"]));
|
||
|
$this->assertNotEmpty($data);
|
||
|
$this->assertEquals($comp3->get('shortname'), $data->name);
|
||
|
$this->assertEquals('-', $data->rating['rating']);
|
||
|
$this->assertEquals('-', $data->rating['proficient']);
|
||
|
$this->assertEmpty($data->evidence);
|
||
|
|
||
|
// We don't know anything about user 2.
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$comp1->get('shortname')} ({$comp1->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$comp2->get('shortname')} ({$comp2->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$comp3->get('shortname')} ({$comp3->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
|
||
|
// Export for user 2 in both contexts.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u2, 'core_competency', [$u1ctx->id, $u2ctx->id]));
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$comp1->get('shortname')} ({$comp1->get('id')})"]));
|
||
|
$this->assertNotEmpty($data);
|
||
|
$this->assertEquals($comp1->get('shortname'), $data->name);
|
||
|
$this->assertEquals('-', $data->rating['rating']);
|
||
|
$this->assertCount(0, $data->evidence);
|
||
|
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$comp2->get('shortname')} ({$comp2->get('id')})"]));
|
||
|
$this->assertNotEmpty($data);
|
||
|
$this->assertEquals($comp2->get('shortname'), $data->name);
|
||
|
$this->assertEquals('-', $data->rating['rating']);
|
||
|
$this->assertCount(3, $data->evidence);
|
||
|
$this->assertEquals('C', $data->evidence[0]['note']);
|
||
|
$this->assertEquals('B', $data->evidence[1]['note']);
|
||
|
$this->assertEquals('A', $data->evidence[2]['note']);
|
||
|
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$comp3->get('shortname')} ({$comp3->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
|
||
|
// We don't know anything about user 1.
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$comp1->get('shortname')} ({$comp1->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$comp2->get('shortname')} ({$comp2->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$comp3->get('shortname')} ({$comp3->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
}
|
||
|
|
||
|
public function test_export_data_for_user_about_their_user_evidence() {
|
||
|
$dg = $this->getDataGenerator();
|
||
|
$ccg = $dg->get_plugin_generator('core_competency');
|
||
|
$path = [get_string('competencies', 'core_competency'), get_string('privacy:path:userevidence', 'core_competency')];
|
||
|
|
||
|
$u1 = $dg->create_user();
|
||
|
$u2 = $dg->create_user();
|
||
|
$u3 = $dg->create_user();
|
||
|
|
||
|
$u1ctx = context_user::instance($u1->id);
|
||
|
$u2ctx = context_user::instance($u2->id);
|
||
|
$u3ctx = context_user::instance($u3->id);
|
||
|
|
||
|
$f = $ccg->create_framework();
|
||
|
$comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
$comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
|
||
|
|
||
|
$ue1a = $ccg->create_user_evidence(['userid' => $u1->id]);
|
||
|
$ue1b = $ccg->create_user_evidence(['userid' => $u1->id]);
|
||
|
$ue2a = $ccg->create_user_evidence(['userid' => $u2->id]);
|
||
|
$ue3a = $ccg->create_user_evidence(['userid' => $u3->id]);
|
||
|
$ccg->create_user_evidence_competency(['userevidenceid' => $ue1a->get('id'), 'competencyid' => $comp1->get('id')]);
|
||
|
$ccg->create_user_evidence_competency(['userevidenceid' => $ue1a->get('id'), 'competencyid' => $comp2->get('id')]);
|
||
|
$ccg->create_user_evidence_competency(['userevidenceid' => $ue1b->get('id'), 'competencyid' => $comp2->get('id')]);
|
||
|
$ccg->create_user_evidence_competency(['userevidenceid' => $ue2a->get('id'), 'competencyid' => $comp2->get('id')]);
|
||
|
|
||
|
// Export for user 1 in two contexts to make sure.
|
||
|
provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$u1ctx->id, $u2ctx->id]));
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$ue1a->get('name')} ({$ue1a->get('id')})"]));
|
||
|
$this->assertNotEmpty($data);
|
||
|
$this->assertEquals($ue1a->get('name'), $data->name);
|
||
|
$this->assertCount(2, $data->competencies);
|
||
|
$this->assertEquals($comp1->get('shortname'), $data->competencies[0]['name']);
|
||
|
$this->assertEquals($comp2->get('shortname'), $data->competencies[1]['name']);
|
||
|
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$ue1b->get('name')} ({$ue1b->get('id')})"]));
|
||
|
$this->assertNotEmpty($data);
|
||
|
$this->assertEquals($ue1b->get('name'), $data->name);
|
||
|
$this->assertCount(1, $data->competencies);
|
||
|
$this->assertEquals($comp2->get('shortname'), $data->competencies[0]['name']);
|
||
|
|
||
|
// We should not have access to other's info.
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$ue2a->get('name')} ({$ue2a->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$ue2a->get('name')} ({$ue2a->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
|
||
|
// Export for user 2 in two contexts to make sure.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u2, 'core_competency', [$u2ctx->id, $u1ctx->id]));
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$ue2a->get('name')} ({$ue2a->get('id')})"]));
|
||
|
$this->assertNotEmpty($data);
|
||
|
$this->assertEquals($ue2a->get('name'), $data->name);
|
||
|
$this->assertCount(1, $data->competencies);
|
||
|
$this->assertEquals($comp2->get('shortname'), $data->competencies[0]['name']);
|
||
|
|
||
|
// We should not have access to other's info.
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$ue1a->get('name')} ({$ue1a->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$ue1a->get('name')} ({$ue1a->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$ue1b->get('name')} ({$ue1b->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
$data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$ue1b->get('name')} ({$ue1b->get('id')})"]));
|
||
|
$this->assertEmpty($data);
|
||
|
|
||
|
// Export for user 3.
|
||
|
writer::reset();
|
||
|
provider::export_user_data(new approved_contextlist($u3, 'core_competency', [$u3ctx->id]));
|
||
|
$data = writer::with_context($u3ctx)->get_data(array_merge($path, ["{$ue3a->get('name')} ({$ue3a->get('id')})"]));
|
||
|
$this->assertNotEmpty($data);
|
||
|
$this->assertEquals($ue3a->get('name'), $data->name);
|
||
|
$this->assertCount(0, $data->competencies);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Helps testing comments on plans.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function allow_anyone_to_comment_anywhere() {
|
||
|
global $DB;
|
||
|
$roleid = $DB->get_field('role', 'id', ['archetype' => 'user'], MUST_EXIST);
|
||
|
assign_capability('moodle/competency:plancomment', CAP_ALLOW, $roleid, SYSCONTEXTID, true);
|
||
|
assign_capability('moodle/competency:planmanage', CAP_ALLOW, $roleid, SYSCONTEXTID, true);
|
||
|
assign_capability('moodle/competency:planmanagedraft', CAP_ALLOW, $roleid, SYSCONTEXTID, true);
|
||
|
assign_capability('moodle/competency:usercompetencycomment', CAP_ALLOW, $roleid, SYSCONTEXTID, true);
|
||
|
assign_capability('moodle/competency:usercompetencyview', CAP_ALLOW, $roleid, SYSCONTEXTID, true);
|
||
|
accesslib_clear_all_caches_for_unit_testing();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Assert the content of a contextlist.
|
||
|
*
|
||
|
* @param contextlist $contextlist The list.
|
||
|
* @param array $expectedcontextsorids The expected content.
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function assert_contextlist(contextlist $contextlist, $expectedcontextsorids) {
|
||
|
$contextids = array_unique($contextlist->get_contextids());
|
||
|
$expectedids = array_unique(array_map(function($item) {
|
||
|
return $item instanceof context ? $item->id : $id;
|
||
|
}, $expectedcontextsorids));
|
||
|
$this->assert_array_match($contextids, $expectedids);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Assert that array match.
|
||
|
*
|
||
|
* @param array $array1 The first one.
|
||
|
* @param array $array2 The second one.
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function assert_array_match($array1, $array2) {
|
||
|
$array1 = (array) (object) $array1;
|
||
|
$array2 = (array) (object) $array2;
|
||
|
sort($array1);
|
||
|
sort($array2);
|
||
|
$this->assertEquals($array1, $array2);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Assert the content of exported comments.
|
||
|
*
|
||
|
* @param array $expected The content of the comments.
|
||
|
* @param array $comments The exported comments.
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function assert_exported_comments($expected, $comments) {
|
||
|
$this->assertCount(count($expected), $comments);
|
||
|
$contents = array_map(function($comment) {
|
||
|
return strip_tags($comment->content);
|
||
|
}, $comments);
|
||
|
$this->assert_array_match($expected, $contents);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Assert that a comment object has comments.
|
||
|
*
|
||
|
* @param \comment $comment The comment object.
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function assert_has_comments(\comment $comment) {
|
||
|
global $DB;
|
||
|
$this->assertTrue($DB->record_exists('comments', [
|
||
|
'contextid' => $comment->get_context()->id,
|
||
|
'component' => $comment->get_component(),
|
||
|
'commentarea' => $comment->get_commentarea(),
|
||
|
'itemid' => $comment->get_itemid()
|
||
|
]));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Assert that a comment object does not have any comments.
|
||
|
*
|
||
|
* @param \comment $comment The comment object.
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function assert_has_no_comments(\comment $comment) {
|
||
|
global $DB;
|
||
|
$this->assertFalse($DB->record_exists('comments', [
|
||
|
'contextid' => $comment->get_context()->id,
|
||
|
'component' => $comment->get_component(),
|
||
|
'commentarea' => $comment->get_commentarea(),
|
||
|
'itemid' => $comment->get_itemid()
|
||
|
]));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the count of comments.
|
||
|
*
|
||
|
* @param \comment $comment The comment object.
|
||
|
* @param int $userid The user ID.
|
||
|
* @return int
|
||
|
*/
|
||
|
protected function get_comments_count(\comment $comment, $userid = null) {
|
||
|
global $DB;
|
||
|
$params = [
|
||
|
'contextid' => $comment->get_context()->id,
|
||
|
'component' => $comment->get_component(),
|
||
|
'commentarea' => $comment->get_commentarea(),
|
||
|
'itemid' => $comment->get_itemid(),
|
||
|
];
|
||
|
if ($userid) {
|
||
|
$params['userid'] = $userid;
|
||
|
}
|
||
|
return $DB->count_records('comments', $params);
|
||
|
}
|
||
|
}
|