/** * Test search_courses */ public function test_search_courses() { global $DB; $this->resetAfterTest(true); $this->setAdminUser(); $generatedcourses = array(); $coursedata1['fullname'] = 'FIRST COURSE'; $course1 = self::getDataGenerator()->create_course($coursedata1); $coursedata2['fullname'] = 'SECOND COURSE'; $course2 = self::getDataGenerator()->create_course($coursedata2); // Search by name. $results = core_course_external::search_courses('search', 'FIRST'); $results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results); $this->assertEquals($coursedata1['fullname'], $results['courses'][0]['fullname']); $this->assertCount(1, $results['courses']); // Create the forum. $record = new stdClass(); $record->introformat = FORMAT_HTML; $record->course = $course2->id; // Set Aggregate type = Average of ratings. $forum = self::getDataGenerator()->create_module('forum', $record); // Search by module. $results = core_course_external::search_courses('modulelist', 'forum'); $results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results); $this->assertEquals(1, $results['total']); // Enable coursetag option. set_config('block_tags_showcoursetags', true); // Add tag 'TAG-LABEL ON SECOND COURSE' to Course2. core_tag_tag::set_item_tags('core', 'course', $course2->id, context_course::instance($course2->id), array('TAG-LABEL ON SECOND COURSE')); $taginstance = $DB->get_record('tag_instance', array('itemtype' => 'course', 'itemid' => $course2->id), '*', MUST_EXIST); // Search by tagid. $results = core_course_external::search_courses('tagid', $taginstance->tagid); $results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results); $this->assertEquals($coursedata2['fullname'], $results['courses'][0]['fullname']); // Search by block (use news_items default block). $blockid = $DB->get_field('block', 'id', array('name' => 'news_items')); $results = core_course_external::search_courses('blocklist', $blockid); $results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results); $this->assertEquals(2, $results['total']); // Now as a normal user. $user = self::getDataGenerator()->create_user(); // Add a 3rd, hidden, course we shouldn't see, even when enrolled as student. $coursedata3['fullname'] = 'HIDDEN COURSE'; $coursedata3['visible'] = 0; $course3 = self::getDataGenerator()->create_course($coursedata3); $this->getDataGenerator()->enrol_user($user->id, $course3->id, 'student'); $this->getDataGenerator()->enrol_user($user->id, $course2->id, 'student'); $this->setUser($user); $results = core_course_external::search_courses('search', 'FIRST'); $results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results); $this->assertCount(1, $results['courses']); $this->assertEquals(1, $results['total']); $this->assertEquals($coursedata1['fullname'], $results['courses'][0]['fullname']); // Check that we can see both without the limit to enrolled setting. $results = core_course_external::search_courses('search', 'COURSE', 0, 0, array(), 0); $results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results); $this->assertCount(2, $results['courses']); $this->assertEquals(2, $results['total']); // Check that we only see our enrolled course when limiting. $results = core_course_external::search_courses('search', 'COURSE', 0, 0, array(), 1); $results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results); $this->assertCount(1, $results['courses']); $this->assertEquals(1, $results['total']); $this->assertEquals($coursedata2['fullname'], $results['courses'][0]['fullname']); // Search by block (use news_items default block). Should fail (only admins allowed). $this->setExpectedException('required_capability_exception'); $results = core_course_external::search_courses('blocklist', $blockid); }
/** * Test search_courses */ public function test_search_courses() { global $DB, $CFG; require_once $CFG->dirroot . '/tag/lib.php'; $this->resetAfterTest(true); $this->setAdminUser(); $generatedcourses = array(); $coursedata1['fullname'] = 'FIRST COURSE'; $course1 = self::getDataGenerator()->create_course($coursedata1); $coursedata2['fullname'] = 'SECOND COURSE'; $course2 = self::getDataGenerator()->create_course($coursedata2); // Search by name. $results = core_course_external::search_courses('search', 'FIRST'); $results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results); $this->assertEquals($coursedata1['fullname'], $results['courses'][0]['fullname']); $this->assertCount(1, $results['courses']); // Create the forum. $record = new stdClass(); $record->introformat = FORMAT_HTML; $record->course = $course2->id; // Set Aggregate type = Average of ratings. $forum = self::getDataGenerator()->create_module('forum', $record); // Search by module. $results = core_course_external::search_courses('modulelist', 'forum'); $results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results); $this->assertEquals(1, $results['total']); // Enable coursetag option. set_config('block_tags_showcoursetags', true); // Add tag 'TAG-LABEL ON SECOND COURSE' to Course2. tag_set('course', $course2->id, array('TAG-LABEL ON SECOND COURSE'), 'core', context_course::instance($course2->id)->id); $taginstance = $DB->get_record('tag_instance', array('itemtype' => 'course', 'itemid' => $course2->id), '*', MUST_EXIST); // Search by tagid. $results = core_course_external::search_courses('tagid', $taginstance->tagid); $results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results); $this->assertEquals($coursedata2['fullname'], $results['courses'][0]['fullname']); // Search by block (use news_items default block). $blockid = $DB->get_field('block', 'id', array('name' => 'news_items')); $results = core_course_external::search_courses('blocklist', $blockid); $results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results); $this->assertEquals(2, $results['total']); // Now as a normal user. $user = self::getDataGenerator()->create_user(); $this->setUser($user); $results = core_course_external::search_courses('search', 'FIRST'); $results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results); $this->assertCount(1, $results['courses']); $this->assertEquals(1, $results['total']); $this->assertEquals($coursedata1['fullname'], $results['courses'][0]['fullname']); // Search by block (use news_items default block). Should fail (only admins allowed). $this->setExpectedException('required_capability_exception'); $results = core_course_external::search_courses('blocklist', $blockid); }