/** * 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); }