/** * Test update_categories */ public function test_update_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. $category1data['idnumber'] = 'idnumbercat1'; $category1data['name'] = 'Category 1 for PHPunit test'; $category1data['description'] = 'Category 1 description'; $category1data['descriptionformat'] = FORMAT_MOODLE; $category1 = self::getDataGenerator()->create_category($category1data); $category2 = self::getDataGenerator()->create_category( array('parent' => $category1->id)); $category3 = self::getDataGenerator()->create_category(); $category4 = self::getDataGenerator()->create_category( array('parent' => $category3->id)); $category5 = self::getDataGenerator()->create_category( array('parent' => $category4->id)); // We update all category1 attribut. // Then we move cat4 and cat5 parent: cat3 => cat1 $categories = array( array('id' => $category1->id, 'name' => $category1->name . '_updated', 'idnumber' => $category1->idnumber . '_updated', 'description' => $category1->description . '_updated', 'descriptionformat' => FORMAT_HTML, 'theme' => $category1->theme), array('id' => $category4->id, 'parent' => $category1->id)); core_course_external::update_categories($categories); // Check the values were updated. $dbcategories = $DB->get_records_select('course_categories', 'id IN (' . $category1->id . ',' . $category2->id . ',' . $category2->id . ',' . $category3->id . ',' . $category4->id . ',' . $category5->id .')'); $this->assertEquals($category1->name . '_updated', $dbcategories[$category1->id]->name); $this->assertEquals($category1->idnumber . '_updated', $dbcategories[$category1->id]->idnumber); $this->assertEquals($category1->description . '_updated', $dbcategories[$category1->id]->description); $this->assertEquals(FORMAT_HTML, $dbcategories[$category1->id]->descriptionformat); // Check that category4 and category5 have been properly moved. $this->assertEquals('/' . $category1->id . '/' . $category4->id, $dbcategories[$category4->id]->path); $this->assertEquals('/' . $category1->id . '/' . $category4->id . '/' . $category5->id, $dbcategories[$category5->id]->path); // Call without required capability. $this->unassignUserCapability('moodle/category:manage', $contextid, $roleid); $this->setExpectedException('required_capability_exception'); core_course_external::update_categories($categories); }