/** * Test get categories */ public function test_get_categories() { global $DB; $this->resetAfterTest(true); $generatedcats = array(); $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); $generatedcats[$category1->id] = $category1; $category2 = self::getDataGenerator()->create_category( array('parent' => $category1->id)); $generatedcats[$category2->id] = $category2; $category6 = self::getDataGenerator()->create_category( array('parent' => $category1->id, 'visible' => 0)); $generatedcats[$category6->id] = $category6; $category3 = self::getDataGenerator()->create_category(); $generatedcats[$category3->id] = $category3; $category4 = self::getDataGenerator()->create_category( array('parent' => $category3->id)); $generatedcats[$category4->id] = $category4; $category5 = self::getDataGenerator()->create_category( array('parent' => $category4->id)); $generatedcats[$category5->id] = $category5; // Set the required capabilities by the external function. $context = context_system::instance(); $roleid = $this->assignUserCapability('moodle/category:manage', $context->id); // Retrieve category1 + sub-categories except not visible ones $categories = core_course_external::get_categories(array( array('key' => 'id', 'value' => $category1->id), array('key' => 'visible', 'value' => 1)), 1); // We need to execute the return values cleaning process to simulate the web service server. $categories = external_api::clean_returnvalue(core_course_external::get_categories_returns(), $categories); // Check we retrieve the good total number of categories. $this->assertEquals(2, count($categories)); // Check the return values foreach ($categories as $category) { $generatedcat = $generatedcats[$category['id']]; $this->assertEquals($category['idnumber'], $generatedcat->idnumber); $this->assertEquals($category['name'], $generatedcat->name); $this->assertEquals($category['description'], $generatedcat->description); $this->assertEquals($category['descriptionformat'], FORMAT_HTML); } // Check different params. $categories = core_course_external::get_categories(array( array('key' => 'id', 'value' => $category1->id), array('key' => 'idnumber', 'value' => $category1->idnumber), array('key' => 'visible', 'value' => 1)), 0); // We need to execute the return values cleaning process to simulate the web service server. $categories = external_api::clean_returnvalue(core_course_external::get_categories_returns(), $categories); $this->assertEquals(1, count($categories)); // Retrieve categories from parent. $categories = core_course_external::get_categories(array( array('key' => 'parent', 'value' => $category3->id)), 1); $this->assertEquals(2, count($categories)); // Retrieve all categories. $categories = core_course_external::get_categories(); // We need to execute the return values cleaning process to simulate the web service server. $categories = external_api::clean_returnvalue(core_course_external::get_categories_returns(), $categories); $this->assertEquals($DB->count_records('course_categories'), count($categories)); // Call without required capability (it will fail cause of the search on idnumber). $this->unassignUserCapability('moodle/category:manage', $context->id, $roleid); $this->setExpectedException('moodle_exception'); $categories = core_course_external::get_categories(array( array('key' => 'id', 'value' => $category1->id), array('key' => 'idnumber', 'value' => $category1->idnumber), array('key' => 'visible', 'value' => 1)), 0); }