Example #1
0
 /**
  * Test create_categories
  */
 public function test_create_categories()
 {
     global $DB;
     $this->resetAfterTest(true);
     // Set the required capabilities by the external function
     $contextid = context_system::instance()->id;
     $roleid = $this->assignUserCapability('moodle/category:manage', $contextid);
     // Create base categories.
     $category1 = new stdClass();
     $category1->name = 'Root Test Category 1';
     $category2 = new stdClass();
     $category2->name = 'Root Test Category 2';
     $category2->idnumber = 'rootcattest2';
     $category2->desc = 'Description for root test category 1';
     $category2->theme = 'base';
     $categories = array(array('name' => $category1->name, 'parent' => 0), array('name' => $category2->name, 'parent' => 0, 'idnumber' => $category2->idnumber, 'description' => $category2->desc, 'theme' => $category2->theme));
     $createdcats = core_course_external::create_categories($categories);
     // We need to execute the return values cleaning process to simulate the web service server.
     $createdcats = external_api::clean_returnvalue(core_course_external::create_categories_returns(), $createdcats);
     // Initially confirm that base data was inserted correctly.
     $this->assertEquals($category1->name, $createdcats[0]['name']);
     $this->assertEquals($category2->name, $createdcats[1]['name']);
     // Save the ids.
     $category1->id = $createdcats[0]['id'];
     $category2->id = $createdcats[1]['id'];
     // Create on sub category.
     $category3 = new stdClass();
     $category3->name = 'Sub Root Test Category 3';
     $subcategories = array(array('name' => $category3->name, 'parent' => $category1->id));
     $createdsubcats = core_course_external::create_categories($subcategories);
     // We need to execute the return values cleaning process to simulate the web service server.
     $createdsubcats = external_api::clean_returnvalue(core_course_external::create_categories_returns(), $createdsubcats);
     // Confirm that sub categories were inserted correctly.
     $this->assertEquals($category3->name, $createdsubcats[0]['name']);
     // Save the ids.
     $category3->id = $createdsubcats[0]['id'];
     // Calling the ws function should provide a new sortorder to give category1,
     // category2, category3. New course categories are ordered by id not name.
     $category1 = $DB->get_record('course_categories', array('id' => $category1->id));
     $category2 = $DB->get_record('course_categories', array('id' => $category2->id));
     $category3 = $DB->get_record('course_categories', array('id' => $category3->id));
     // sortorder sequence (and sortorder) must be:
     // category 1
     //   category 3
     // category 2
     $this->assertGreaterThan($category1->sortorder, $category3->sortorder);
     $this->assertGreaterThan($category3->sortorder, $category2->sortorder);
     // Call without required capability
     $this->unassignUserCapability('moodle/category:manage', $contextid, $roleid);
     $this->setExpectedException('required_capability_exception');
     $createdsubcats = core_course_external::create_categories($subcategories);
 }