Example #1
0
 /**
  * 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);
 }
Example #2
0
 /**
  * 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);
 }