public function test_list_plan_competencies()
 {
     $this->setUser($this->creator);
     $dg = $this->getDataGenerator();
     $lpg = $dg->get_plugin_generator('core_competency');
     $f1 = $lpg->create_framework();
     $f2 = $lpg->create_framework();
     $c1a = $lpg->create_competency(array('competencyframeworkid' => $f1->get_id()));
     $c1b = $lpg->create_competency(array('competencyframeworkid' => $f1->get_id()));
     $c1c = $lpg->create_competency(array('competencyframeworkid' => $f1->get_id()));
     $c2a = $lpg->create_competency(array('competencyframeworkid' => $f2->get_id()));
     $c2b = $lpg->create_competency(array('competencyframeworkid' => $f2->get_id()));
     $tpl = $lpg->create_template();
     $lpg->create_template_competency(array('templateid' => $tpl->get_id(), 'competencyid' => $c1a->get_id()));
     $lpg->create_template_competency(array('templateid' => $tpl->get_id(), 'competencyid' => $c1c->get_id()));
     $lpg->create_template_competency(array('templateid' => $tpl->get_id(), 'competencyid' => $c2b->get_id()));
     $plan = $lpg->create_plan(array('userid' => $this->user->id, 'templateid' => $tpl->get_id()));
     $uc1a = $lpg->create_user_competency(array('userid' => $this->user->id, 'competencyid' => $c1a->get_id(), 'status' => user_competency::STATUS_IN_REVIEW, 'reviewerid' => $this->creator->id));
     $uc1b = $lpg->create_user_competency(array('userid' => $this->user->id, 'competencyid' => $c1b->get_id()));
     $uc2b = $lpg->create_user_competency(array('userid' => $this->user->id, 'competencyid' => $c2b->get_id(), 'grade' => 2, 'proficiency' => 1));
     $ux1a = $lpg->create_user_competency(array('userid' => $this->creator->id, 'competencyid' => $c1a->get_id()));
     $result = external::list_plan_competencies($plan->get_id());
     $result = external::clean_returnvalue(external::list_plan_competencies_returns(), $result);
     $this->assertCount(3, $result);
     $this->assertEquals($c1a->get_id(), $result[0]['competency']['id']);
     $this->assertEquals($this->user->id, $result[0]['usercompetency']['userid']);
     $this->assertArrayNotHasKey('usercompetencyplan', $result[0]);
     $this->assertEquals($c1c->get_id(), $result[1]['competency']['id']);
     $this->assertEquals($this->user->id, $result[1]['usercompetency']['userid']);
     $this->assertArrayNotHasKey('usercompetencyplan', $result[1]);
     $this->assertEquals($c2b->get_id(), $result[2]['competency']['id']);
     $this->assertEquals($this->user->id, $result[2]['usercompetency']['userid']);
     $this->assertArrayNotHasKey('usercompetencyplan', $result[2]);
     $this->assertEquals(user_competency::STATUS_IN_REVIEW, $result[0]['usercompetency']['status']);
     $this->assertEquals(null, $result[1]['usercompetency']['grade']);
     $this->assertEquals(2, $result[2]['usercompetency']['grade']);
     $this->assertEquals(1, $result[2]['usercompetency']['proficiency']);
     // Check the return values when the plan status is complete.
     $completedplan = $lpg->create_plan(array('userid' => $this->user->id, 'templateid' => $tpl->get_id(), 'status' => plan::STATUS_COMPLETE));
     $uc1a = $lpg->create_user_competency_plan(array('userid' => $this->user->id, 'competencyid' => $c1a->get_id(), 'planid' => $completedplan->get_id()));
     $uc1b = $lpg->create_user_competency_plan(array('userid' => $this->user->id, 'competencyid' => $c1c->get_id(), 'planid' => $completedplan->get_id()));
     $uc2b = $lpg->create_user_competency_plan(array('userid' => $this->user->id, 'competencyid' => $c2b->get_id(), 'planid' => $completedplan->get_id(), 'grade' => 2, 'proficiency' => 1));
     $ux1a = $lpg->create_user_competency_plan(array('userid' => $this->creator->id, 'competencyid' => $c1a->get_id(), 'planid' => $completedplan->get_id()));
     $result = external::list_plan_competencies($completedplan->get_id());
     $result = external::clean_returnvalue(external::list_plan_competencies_returns(), $result);
     $this->assertCount(3, $result);
     $this->assertEquals($c1a->get_id(), $result[0]['competency']['id']);
     $this->assertEquals($this->user->id, $result[0]['usercompetencyplan']['userid']);
     $this->assertArrayNotHasKey('usercompetency', $result[0]);
     $this->assertEquals($c1c->get_id(), $result[1]['competency']['id']);
     $this->assertEquals($this->user->id, $result[1]['usercompetencyplan']['userid']);
     $this->assertArrayNotHasKey('usercompetency', $result[1]);
     $this->assertEquals($c2b->get_id(), $result[2]['competency']['id']);
     $this->assertEquals($this->user->id, $result[2]['usercompetencyplan']['userid']);
     $this->assertArrayNotHasKey('usercompetency', $result[2]);
     $this->assertEquals(null, $result[1]['usercompetencyplan']['grade']);
     $this->assertEquals(2, $result[2]['usercompetencyplan']['grade']);
     $this->assertEquals(1, $result[2]['usercompetencyplan']['proficiency']);
 }