/**
  * List templates.
  */
 public function test_list_templates()
 {
     $syscontextid = context_system::instance()->id;
     $catcontextid = context_coursecat::instance($this->category->id)->id;
     // Creating a few templates.
     $this->setUser($this->creator);
     $sys1 = $this->create_template(1, true);
     $sys2 = $this->create_template(2, true);
     $cat1 = $this->create_template(3, false);
     $cat2 = $this->create_template(4, false);
     // User without permission.
     $this->setUser($this->user);
     assign_capability('moodle/competency:templateview', CAP_PROHIBIT, $this->userrole, $syscontextid, true);
     accesslib_clear_all_caches_for_unit_testing();
     try {
         external::list_templates('id', 'ASC', 0, 10, array('contextid' => $syscontextid), 'children', false);
         $this->fail('Invalid permissions');
     } catch (required_capability_exception $e) {
         // All good.
     }
     // User with category permissions.
     assign_capability('moodle/competency:templateview', CAP_PREVENT, $this->userrole, $syscontextid, true);
     assign_capability('moodle/competency:templateview', CAP_ALLOW, $this->userrole, $catcontextid, true);
     accesslib_clear_all_caches_for_unit_testing();
     $result = external::list_templates('id', 'ASC', 0, 10, array('contextid' => $syscontextid), 'children', false);
     $result = external_api::clean_returnvalue(external::list_templates_returns(), $result);
     $this->assertCount(2, $result);
     $this->assertEquals($cat1->id, $result[0]['id']);
     $this->assertEquals($cat2->id, $result[1]['id']);
     // User with system permissions.
     assign_capability('moodle/competency:templateview', CAP_ALLOW, $this->userrole, $syscontextid, true);
     accesslib_clear_all_caches_for_unit_testing();
     $result = external::list_templates('id', 'DESC', 0, 3, array('contextid' => $catcontextid), 'parents', false);
     $result = external_api::clean_returnvalue(external::list_templates_returns(), $result);
     $this->assertCount(3, $result);
     $this->assertEquals($cat2->id, $result[0]['id']);
     $this->assertEquals($cat1->id, $result[1]['id']);
     $this->assertEquals($sys2->id, $result[2]['id']);
 }