/**
  * Test we can re-order competency frameworks.
  */
 public function test_reorder_template_competencies()
 {
     $this->setUser($this->creator);
     $syscontext = context_system::instance();
     $onehour = time() + 60 * 60;
     // Create a template.
     $template = $this->create_template(1, true);
     // Create a competency framework.
     $framework = $this->create_competency_framework(1, true);
     // Create multiple competencies.
     $competency1 = $this->create_competency(1, $framework->id);
     $competency2 = $this->create_competency(2, $framework->id);
     $competency3 = $this->create_competency(3, $framework->id);
     $competency4 = $this->create_competency(4, $framework->id);
     // Add the competencies.
     external::add_competency_to_template($template->id, $competency1->id);
     external::add_competency_to_template($template->id, $competency2->id);
     external::add_competency_to_template($template->id, $competency3->id);
     external::add_competency_to_template($template->id, $competency4->id);
     // Test if removing competency from template don't create sortorder holes.
     external::remove_competency_from_template($template->id, $competency3->id);
     $templcomp4 = template_competency::get_record(array('templateid' => $template->id, 'competencyid' => $competency4->id));
     $this->assertEquals(2, $templcomp4->get_sortorder());
     // This is a move up.
     external::reorder_template_competency($template->id, $competency4->id, $competency2->id);
     $result = external::list_competencies_in_template($template->id);
     $result = external_api::clean_returnvalue(external::list_competencies_in_template_returns(), $result);
     $r1 = (object) $result[0];
     $r2 = (object) $result[1];
     $r3 = (object) $result[2];
     $this->assertEquals($competency1->id, $r1->id);
     $this->assertEquals($competency4->id, $r2->id);
     $this->assertEquals($competency2->id, $r3->id);
     // This is a move down.
     external::reorder_template_competency($template->id, $competency1->id, $competency4->id);
     $result = external::list_competencies_in_template($template->id);
     $result = external_api::clean_returnvalue(external::list_competencies_in_template_returns(), $result);
     $r1 = (object) $result[0];
     $r2 = (object) $result[1];
     $r3 = (object) $result[2];
     $this->assertEquals($competency4->id, $r1->id);
     $this->assertEquals($competency1->id, $r2->id);
     $this->assertEquals($competency2->id, $r3->id);
     $this->setExpectedException('required_capability_exception');
     $this->setUser($this->user);
     external::reorder_template_competency($template->id, $competency1->id, $competency2->id);
 }