From 4e968dc8a797206960ca652179f0d575ba6e3ed4 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Thu, 12 May 2016 16:15:04 +0800 Subject: [PATCH] MDL-54542 competency: Tests for listing of plans and comps to review --- competency/tests/api_test.php | 96 +++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/competency/tests/api_test.php b/competency/tests/api_test.php index d0f86ebd7a3..0fddefca7f6 100644 --- a/competency/tests/api_test.php +++ b/competency/tests/api_test.php @@ -4414,4 +4414,100 @@ class core_competency_api_testcase extends advanced_testcase { api::delete_evidence($ev1); } + + public function test_list_plans_to_review() { + $dg = $this->getDataGenerator(); + $this->resetAfterTest(); + $ccg = $dg->get_plugin_generator('core_competency'); + $sysctx = context_system::instance(); + $this->setAdminUser(); + + $reviewer = $dg->create_user(); + $roleallow = $dg->create_role(); + $roleprohibit = $dg->create_role(); + assign_capability('moodle/competency:planreview', CAP_ALLOW, $roleallow, $sysctx->id); + assign_capability('moodle/competency:planreview', CAP_PROHIBIT, $roleprohibit, $sysctx->id); + role_assign($roleallow, $reviewer->id, $sysctx->id); + accesslib_clear_all_caches_for_unit_testing(); + + $u1 = $dg->create_user(); + $u2 = $dg->create_user(); + $f1 = $ccg->create_framework(); + $comp1 = $ccg->create_competency(['competencyframeworkid' => $f1->get_id()]); + $p1a = $ccg->create_plan(['userid' => $u1->id, 'status' => plan::STATUS_WAITING_FOR_REVIEW]); + $p1b = $ccg->create_plan(['userid' => $u1->id, 'status' => plan::STATUS_IN_REVIEW, 'reviewerid' => $reviewer->id]); + $p1c = $ccg->create_plan(['userid' => $u1->id, 'status' => plan::STATUS_DRAFT]); + $p2a = $ccg->create_plan(['userid' => $u2->id, 'status' => plan::STATUS_WAITING_FOR_REVIEW]); + $p2b = $ccg->create_plan(['userid' => $u2->id, 'status' => plan::STATUS_IN_REVIEW]); + $p2c = $ccg->create_plan(['userid' => $u2->id, 'status' => plan::STATUS_ACTIVE]); + $p2d = $ccg->create_plan(['userid' => $u2->id, 'status' => plan::STATUS_ACTIVE]); + api::complete_plan($p2d); + + // The reviewer can review all plans waiting for review, or in review where they are the reviewer. + $this->setUser($reviewer); + $result = api::list_plans_to_review(); + $this->assertEquals(3, $result['count']); + $this->assertEquals($p1a->get_id(), $result['plans'][0]->plan->get_id()); + $this->assertEquals($p1b->get_id(), $result['plans'][1]->plan->get_id()); + $this->assertEquals($p2a->get_id(), $result['plans'][2]->plan->get_id()); + + // The reviewer cannot view the plans when they do not have the permission in the user's context. + role_assign($roleprohibit, $reviewer->id, context_user::instance($u2->id)->id); + accesslib_clear_all_caches_for_unit_testing(); + $result = api::list_plans_to_review(); + $this->assertEquals(2, $result['count']); + $this->assertEquals($p1a->get_id(), $result['plans'][0]->plan->get_id()); + $this->assertEquals($p1b->get_id(), $result['plans'][1]->plan->get_id()); + } + + public function test_list_user_competencies_to_review() { + $dg = $this->getDataGenerator(); + $this->resetAfterTest(); + $ccg = $dg->get_plugin_generator('core_competency'); + $sysctx = context_system::instance(); + $this->setAdminUser(); + + $reviewer = $dg->create_user(); + $roleallow = $dg->create_role(); + $roleprohibit = $dg->create_role(); + assign_capability('moodle/competency:usercompetencyreview', CAP_ALLOW, $roleallow, $sysctx->id); + assign_capability('moodle/competency:usercompetencyreview', CAP_PROHIBIT, $roleprohibit, $sysctx->id); + role_assign($roleallow, $reviewer->id, $sysctx->id); + accesslib_clear_all_caches_for_unit_testing(); + + $u1 = $dg->create_user(); + $u2 = $dg->create_user(); + $f1 = $ccg->create_framework(); + $c1 = $ccg->create_competency(['competencyframeworkid' => $f1->get_id()]); + $c2 = $ccg->create_competency(['competencyframeworkid' => $f1->get_id()]); + $c3 = $ccg->create_competency(['competencyframeworkid' => $f1->get_id()]); + $uc1a = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $c1->get_id(), + 'status' => user_competency::STATUS_IDLE]); + $uc1b = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $c2->get_id(), + 'status' => user_competency::STATUS_WAITING_FOR_REVIEW]); + $uc1c = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $c3->get_id(), + 'status' => user_competency::STATUS_IN_REVIEW, 'reviewerid' => $reviewer->id]); + $uc2a = $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $c1->get_id(), + 'status' => user_competency::STATUS_WAITING_FOR_REVIEW]); + $uc2b = $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $c2->get_id(), + 'status' => user_competency::STATUS_IDLE]); + $uc2c = $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $c3->get_id(), + 'status' => user_competency::STATUS_IN_REVIEW]); + + // The reviewer can review all plans waiting for review, or in review where they are the reviewer. + $this->setUser($reviewer); + $result = api::list_user_competencies_to_review(); + $this->assertEquals(3, $result['count']); + $this->assertEquals($uc2a->get_id(), $result['competencies'][0]->usercompetency->get_id()); + $this->assertEquals($uc1b->get_id(), $result['competencies'][1]->usercompetency->get_id()); + $this->assertEquals($uc1c->get_id(), $result['competencies'][2]->usercompetency->get_id()); + + // The reviewer cannot view the plans when they do not have the permission in the user's context. + role_assign($roleprohibit, $reviewer->id, context_user::instance($u2->id)->id); + accesslib_clear_all_caches_for_unit_testing(); + $result = api::list_user_competencies_to_review(); + $this->assertEquals(2, $result['count']); + $this->assertEquals($uc1b->get_id(), $result['competencies'][0]->usercompetency->get_id()); + $this->assertEquals($uc1c->get_id(), $result['competencies'][1]->usercompetency->get_id()); + } }