/** * Testing function course_get_tagged_course_modules - search tagged course modules */ public function test_course_get_tagged_course_modules() { global $DB; $this->resetAfterTest(); $course3 = $this->getDataGenerator()->create_course(); $course2 = $this->getDataGenerator()->create_course(); $course1 = $this->getDataGenerator()->create_course(); $cm11 = $this->getDataGenerator()->create_module('assign', array('course' => $course1->id, 'tags' => 'Cat, Dog')); $cm12 = $this->getDataGenerator()->create_module('page', array('course' => $course1->id, 'tags' => 'Cat, Mouse', 'visible' => 0)); $cm13 = $this->getDataGenerator()->create_module('page', array('course' => $course1->id, 'tags' => 'Cat, Mouse, Dog')); $cm21 = $this->getDataGenerator()->create_module('forum', array('course' => $course2->id, 'tags' => 'Cat, Mouse')); $cm31 = $this->getDataGenerator()->create_module('forum', array('course' => $course3->id, 'tags' => 'Cat, Mouse')); // Admin is able to view everything. $this->setAdminUser(); $res = course_get_tagged_course_modules(core_tag_tag::get_by_name(0, 'Cat'), false, 0, 0, 1, 0); $this->assertRegExp('/' . $cm11->name . '/', $res->content); $this->assertRegExp('/' . $cm12->name . '/', $res->content); $this->assertRegExp('/' . $cm13->name . '/', $res->content); $this->assertRegExp('/' . $cm21->name . '/', $res->content); $this->assertRegExp('/' . $cm31->name . '/', $res->content); // Results from course1 are returned before results from course2. $this->assertTrue(strpos($res->content, $cm11->name) < strpos($res->content, $cm21->name)); // Ordinary user is not able to see anything. $user = $this->getDataGenerator()->create_user(); $this->setUser($user); $res = course_get_tagged_course_modules(core_tag_tag::get_by_name(0, 'Cat'), false, 0, 0, 1, 0); $this->assertNull($res); // Enrol user as student in course1 and course2. $roleids = $DB->get_records_menu('role', null, '', 'shortname, id'); $this->getDataGenerator()->enrol_user($user->id, $course1->id, $roleids['student']); $this->getDataGenerator()->enrol_user($user->id, $course2->id, $roleids['student']); core_tag_index_builder::reset_caches(); // Searching in the course context returns visible modules in this course. $context = context_course::instance($course1->id); $res = course_get_tagged_course_modules(core_tag_tag::get_by_name(0, 'Cat'), false, 0, $context->id, 1, 0); $this->assertRegExp('/' . $cm11->name . '/', $res->content); $this->assertNotRegExp('/' . $cm12->name . '/', $res->content); $this->assertRegExp('/' . $cm13->name . '/', $res->content); $this->assertNotRegExp('/' . $cm21->name . '/', $res->content); $this->assertNotRegExp('/' . $cm31->name . '/', $res->content); // Searching FROM the course context returns visible modules in all courses. $context = context_course::instance($course2->id); $res = course_get_tagged_course_modules(core_tag_tag::get_by_name(0, 'Cat'), false, $context->id, 0, 1, 0); $this->assertRegExp('/' . $cm11->name . '/', $res->content); $this->assertNotRegExp('/' . $cm12->name . '/', $res->content); $this->assertRegExp('/' . $cm13->name . '/', $res->content); $this->assertRegExp('/' . $cm21->name . '/', $res->content); $this->assertNotRegExp('/' . $cm31->name . '/', $res->content); // No access to course3. // Results from course2 are returned before results from course1. $this->assertTrue(strpos($res->content, $cm21->name) < strpos($res->content, $cm11->name)); // Enrol user in course1 as a teacher - now he should be able to see hidden module. $this->getDataGenerator()->enrol_user($user->id, $course1->id, $roleids['editingteacher']); get_fast_modinfo(0, 0, true); $context = context_course::instance($course1->id); $res = course_get_tagged_course_modules(core_tag_tag::get_by_name(0, 'Cat'), false, $context->id, 0, 1, 0); $this->assertRegExp('/' . $cm12->name . '/', $res->content); // Create more modules and try pagination. $cm14 = $this->getDataGenerator()->create_module('assign', array('course' => $course1->id, 'tags' => 'Cat, Dog')); $cm15 = $this->getDataGenerator()->create_module('page', array('course' => $course1->id, 'tags' => 'Cat, Mouse', 'visible' => 0)); $cm16 = $this->getDataGenerator()->create_module('page', array('course' => $course1->id, 'tags' => 'Cat, Mouse, Dog')); $context = context_course::instance($course1->id); $res = course_get_tagged_course_modules(core_tag_tag::get_by_name(0, 'Cat'), false, 0, $context->id, 1, 0); $this->assertRegExp('/' . $cm11->name . '/', $res->content); $this->assertRegExp('/' . $cm12->name . '/', $res->content); $this->assertRegExp('/' . $cm13->name . '/', $res->content); $this->assertNotRegExp('/' . $cm21->name . '/', $res->content); $this->assertRegExp('/' . $cm14->name . '/', $res->content); $this->assertRegExp('/' . $cm15->name . '/', $res->content); $this->assertNotRegExp('/' . $cm16->name . '/', $res->content); $this->assertNotRegExp('/' . $cm31->name . '/', $res->content); // No access to course3. $this->assertEmpty($res->prevpageurl); $this->assertNotEmpty($res->nextpageurl); $res = course_get_tagged_course_modules(core_tag_tag::get_by_name(0, 'Cat'), false, 0, $context->id, 1, 1); $this->assertNotRegExp('/' . $cm11->name . '/', $res->content); $this->assertNotRegExp('/' . $cm12->name . '/', $res->content); $this->assertNotRegExp('/' . $cm13->name . '/', $res->content); $this->assertNotRegExp('/' . $cm21->name . '/', $res->content); $this->assertNotRegExp('/' . $cm14->name . '/', $res->content); $this->assertNotRegExp('/' . $cm15->name . '/', $res->content); $this->assertRegExp('/' . $cm16->name . '/', $res->content); $this->assertNotRegExp('/' . $cm31->name . '/', $res->content); // No access to course3. $this->assertNotEmpty($res->prevpageurl); $this->assertEmpty($res->nextpageurl); }
public function test_mod_wiki_get_tagged_pages() { global $DB; $this->resetAfterTest(); $this->setAdminUser(); // Setup test data. $wikigenerator = $this->getDataGenerator()->get_plugin_generator('mod_wiki'); $course3 = $this->getDataGenerator()->create_course(); $course2 = $this->getDataGenerator()->create_course(); $course1 = $this->getDataGenerator()->create_course(); $wiki1 = $this->getDataGenerator()->create_module('wiki', array('course' => $course1->id)); $wiki2 = $this->getDataGenerator()->create_module('wiki', array('course' => $course2->id)); $wiki3 = $this->getDataGenerator()->create_module('wiki', array('course' => $course3->id)); $page11 = $wikigenerator->create_content($wiki1, array('tags' => array('Cats', 'Dogs'))); $page12 = $wikigenerator->create_content($wiki1, array('tags' => array('Cats', 'mice'))); $page13 = $wikigenerator->create_content($wiki1, array('tags' => array('Cats'))); $page14 = $wikigenerator->create_content($wiki1); $page15 = $wikigenerator->create_content($wiki1, array('tags' => array('Cats'))); $page21 = $wikigenerator->create_content($wiki2, array('tags' => array('Cats'))); $page22 = $wikigenerator->create_content($wiki2, array('tags' => array('Cats', 'Dogs'))); $page23 = $wikigenerator->create_content($wiki2, array('tags' => array('mice', 'Cats'))); $page31 = $wikigenerator->create_content($wiki3, array('tags' => array('mice', 'Cats'))); $tag = core_tag_tag::get_by_name(0, 'Cats'); // Admin can see everything. $res = mod_wiki_get_tagged_pages($tag, false, 0, 0, 1, 0); $this->assertRegExp('/' . $page11->title . '/', $res->content); $this->assertRegExp('/' . $page12->title . '/', $res->content); $this->assertRegExp('/' . $page13->title . '/', $res->content); $this->assertNotRegExp('/' . $page14->title . '/', $res->content); $this->assertRegExp('/' . $page15->title . '/', $res->content); $this->assertRegExp('/' . $page21->title . '/', $res->content); $this->assertNotRegExp('/' . $page22->title . '/', $res->content); $this->assertNotRegExp('/' . $page23->title . '/', $res->content); $this->assertNotRegExp('/' . $page31->title . '/', $res->content); $this->assertEmpty($res->prevpageurl); $this->assertNotEmpty($res->nextpageurl); $res = mod_wiki_get_tagged_pages($tag, false, 0, 0, 1, 1); $this->assertNotRegExp('/' . $page11->title . '/', $res->content); $this->assertNotRegExp('/' . $page12->title . '/', $res->content); $this->assertNotRegExp('/' . $page13->title . '/', $res->content); $this->assertNotRegExp('/' . $page14->title . '/', $res->content); $this->assertNotRegExp('/' . $page15->title . '/', $res->content); $this->assertNotRegExp('/' . $page21->title . '/', $res->content); $this->assertRegExp('/' . $page22->title . '/', $res->content); $this->assertRegExp('/' . $page23->title . '/', $res->content); $this->assertRegExp('/' . $page31->title . '/', $res->content); $this->assertNotEmpty($res->prevpageurl); $this->assertEmpty($res->nextpageurl); // Create and enrol a user. $student = self::getDataGenerator()->create_user(); $studentrole = $DB->get_record('role', array('shortname' => 'student')); $this->getDataGenerator()->enrol_user($student->id, $course1->id, $studentrole->id, 'manual'); $this->getDataGenerator()->enrol_user($student->id, $course2->id, $studentrole->id, 'manual'); $this->setUser($student); core_tag_index_builder::reset_caches(); // User can not see pages in course 3 because he is not enrolled. $res = mod_wiki_get_tagged_pages($tag, false, 0, 0, 1, 1); $this->assertRegExp('/' . $page22->title . '/', $res->content); $this->assertRegExp('/' . $page23->title . '/', $res->content); $this->assertNotRegExp('/' . $page31->title . '/', $res->content); // User can search wiki pages inside a course. $coursecontext = context_course::instance($course1->id); $res = mod_wiki_get_tagged_pages($tag, false, 0, $coursecontext->id, 1, 0); $this->assertRegExp('/' . $page11->title . '/', $res->content); $this->assertRegExp('/' . $page12->title . '/', $res->content); $this->assertRegExp('/' . $page13->title . '/', $res->content); $this->assertNotRegExp('/' . $page14->title . '/', $res->content); $this->assertRegExp('/' . $page15->title . '/', $res->content); $this->assertNotRegExp('/' . $page21->title . '/', $res->content); $this->assertNotRegExp('/' . $page22->title . '/', $res->content); $this->assertNotRegExp('/' . $page23->title . '/', $res->content); $this->assertEmpty($res->nextpageurl); }