[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * Search manager unit tests. 19 * 20 * @package core_search 21 * @category phpunit 22 * @copyright 2015 David Monllao {@link http://www.davidmonllao.com} 23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 24 */ 25 26 defined('MOODLE_INTERNAL') || die(); 27 28 require_once (__DIR__ . '/fixtures/testable_core_search.php'); 29 require_once (__DIR__ . '/fixtures/mock_search_area.php'); 30 31 /** 32 * Unit tests for search manager. 33 * 34 * @package core_search 35 * @category phpunit 36 * @copyright 2015 David Monllao {@link http://www.davidmonllao.com} 37 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 38 */ 39 class search_manager_testcase extends advanced_testcase { 40 41 protected $forumpostareaid = null; 42 protected $mycoursesareaid = null; 43 44 public function setUp() { 45 $this->forumpostareaid = \core_search\manager::generate_areaid('mod_forum', 'post'); 46 $this->mycoursesareaid = \core_search\manager::generate_areaid('core_course', 'mycourse'); 47 } 48 49 public function test_search_enabled() { 50 51 $this->resetAfterTest(); 52 53 // Disabled by default. 54 $this->assertFalse(\core_search\manager::is_global_search_enabled()); 55 56 set_config('enableglobalsearch', true); 57 $this->assertTrue(\core_search\manager::is_global_search_enabled()); 58 59 set_config('enableglobalsearch', false); 60 $this->assertFalse(\core_search\manager::is_global_search_enabled()); 61 } 62 63 public function test_search_areas() { 64 global $CFG; 65 66 $this->resetAfterTest(); 67 68 set_config('enableglobalsearch', true); 69 70 $fakeareaid = \core_search\manager::generate_areaid('mod_unexisting', 'chihuaquita'); 71 72 $searcharea = \core_search\manager::get_search_area($this->forumpostareaid); 73 $this->assertInstanceOf('\core_search\base', $searcharea); 74 75 $this->assertFalse(\core_search\manager::get_search_area($fakeareaid)); 76 77 $this->assertArrayHasKey($this->forumpostareaid, \core_search\manager::get_search_areas_list()); 78 $this->assertArrayNotHasKey($fakeareaid, \core_search\manager::get_search_areas_list()); 79 80 // Enabled by default once global search is enabled. 81 $this->assertArrayHasKey($this->forumpostareaid, \core_search\manager::get_search_areas_list(true)); 82 83 list($componentname, $varname) = $searcharea->get_config_var_name(); 84 set_config($varname . '_enabled', 0, $componentname); 85 \core_search\manager::clear_static(); 86 87 $this->assertArrayNotHasKey('mod_forum', \core_search\manager::get_search_areas_list(true)); 88 89 set_config($varname . '_enabled', 1, $componentname); 90 91 // Although the result is wrong, we want to check that \core_search\manager::get_search_areas_list returns cached results. 92 $this->assertArrayNotHasKey($this->forumpostareaid, \core_search\manager::get_search_areas_list(true)); 93 94 // Now we check the real result. 95 \core_search\manager::clear_static(); 96 $this->assertArrayHasKey($this->forumpostareaid, \core_search\manager::get_search_areas_list(true)); 97 } 98 99 public function test_search_config() { 100 101 $this->resetAfterTest(); 102 103 $search = testable_core_search::instance(); 104 105 // We should test both plugin types and core subsystems. No core subsystems available yet. 106 $searcharea = $search->get_search_area($this->forumpostareaid); 107 108 list($componentname, $varname) = $searcharea->get_config_var_name(); 109 110 // Just with a couple of vars should be enough. 111 $start = time() - 100; 112 $end = time(); 113 set_config($varname . '_indexingstart', $start, $componentname); 114 set_config($varname . '_indexingend', $end, $componentname); 115 116 $configs = $search->get_areas_config(array($this->forumpostareaid => $searcharea)); 117 $this->assertEquals($start, $configs[$this->forumpostareaid]->indexingstart); 118 $this->assertEquals($end, $configs[$this->forumpostareaid]->indexingend); 119 120 try { 121 $fakeareaid = \core_search\manager::generate_areaid('mod_unexisting', 'chihuaquita'); 122 $search->reset_config($fakeareaid); 123 $this->fail('An exception should be triggered if the provided search area does not exist.'); 124 } catch (moodle_exception $ex) { 125 $this->assertContains($fakeareaid . ' search area is not available.', $ex->getMessage()); 126 } 127 128 // We clean it all but enabled components. 129 $search->reset_config($this->forumpostareaid); 130 $config = $searcharea->get_config(); 131 $this->assertEquals(1, $config[$varname . '_enabled']); 132 $this->assertEquals(0, $config[$varname . '_indexingstart']); 133 $this->assertEquals(0, $config[$varname . '_indexingend']); 134 $this->assertEquals(0, $config[$varname . '_lastindexrun']); 135 // No caching. 136 $configs = $search->get_areas_config(array($this->forumpostareaid => $searcharea)); 137 $this->assertEquals(0, $configs[$this->forumpostareaid]->indexingstart); 138 $this->assertEquals(0, $configs[$this->forumpostareaid]->indexingend); 139 140 set_config($varname . '_indexingstart', $start, $componentname); 141 set_config($varname . '_indexingend', $end, $componentname); 142 143 // All components config should be reset. 144 $search->reset_config(); 145 $this->assertEquals(0, get_config($componentname, $varname . '_indexingstart')); 146 $this->assertEquals(0, get_config($componentname, $varname . '_indexingend')); 147 $this->assertEquals(0, get_config($componentname, $varname . '_lastindexrun')); 148 // No caching. 149 $configs = $search->get_areas_config(array($this->forumpostareaid => $searcharea)); 150 $this->assertEquals(0, $configs[$this->forumpostareaid]->indexingstart); 151 $this->assertEquals(0, $configs[$this->forumpostareaid]->indexingend); 152 } 153 154 /** 155 * Adding this test here as get_areas_user_accesses process is the same, results just depend on the context level. 156 * 157 * @return void 158 */ 159 public function test_search_user_accesses() { 160 global $DB; 161 162 $this->resetAfterTest(); 163 164 $frontpage = $DB->get_record('course', array('id' => SITEID)); 165 $course1 = $this->getDataGenerator()->create_course(); 166 $course1ctx = context_course::instance($course1->id); 167 $course2 = $this->getDataGenerator()->create_course(); 168 $course2ctx = context_course::instance($course2->id); 169 $teacher = $this->getDataGenerator()->create_user(); 170 $teacherctx = context_user::instance($teacher->id); 171 $student = $this->getDataGenerator()->create_user(); 172 $studentctx = context_user::instance($student->id); 173 $noaccess = $this->getDataGenerator()->create_user(); 174 $noaccessctx = context_user::instance($noaccess->id); 175 $this->getDataGenerator()->enrol_user($teacher->id, $course1->id, 'teacher'); 176 $this->getDataGenerator()->enrol_user($student->id, $course1->id, 'student'); 177 178 $frontpageforum = $this->getDataGenerator()->create_module('forum', array('course' => $frontpage->id)); 179 $forum1 = $this->getDataGenerator()->create_module('forum', array('course' => $course1->id)); 180 $forum2 = $this->getDataGenerator()->create_module('forum', array('course' => $course1->id)); 181 $forum3 = $this->getDataGenerator()->create_module('forum', array('course' => $course2->id)); 182 $frontpageforumcontext = context_module::instance($frontpageforum->cmid); 183 $context1 = context_module::instance($forum1->cmid); 184 $context2 = context_module::instance($forum2->cmid); 185 $context3 = context_module::instance($forum3->cmid); 186 187 $search = testable_core_search::instance(); 188 $mockareaid = \core_search\manager::generate_areaid('core_mocksearch', 'mock_search_area'); 189 $search->add_core_search_areas(); 190 $search->add_search_area($mockareaid, new core_mocksearch\search\mock_search_area()); 191 192 $this->setAdminUser(); 193 $this->assertTrue($search->get_areas_user_accesses()); 194 195 $sitectx = \context_course::instance(SITEID); 196 $systemctxid = \context_system::instance()->id; 197 198 // Can access the frontpage ones. 199 $this->setUser($noaccess); 200 $contexts = $search->get_areas_user_accesses(); 201 $this->assertEquals(array($frontpageforumcontext->id => $frontpageforumcontext->id), $contexts[$this->forumpostareaid]); 202 $this->assertEquals(array($sitectx->id => $sitectx->id), $contexts[$this->mycoursesareaid]); 203 $mockctxs = array($noaccessctx->id => $noaccessctx->id, $systemctxid => $systemctxid); 204 $this->assertEquals($mockctxs, $contexts[$mockareaid]); 205 206 $this->setUser($teacher); 207 $contexts = $search->get_areas_user_accesses(); 208 $frontpageandcourse1 = array($frontpageforumcontext->id => $frontpageforumcontext->id, $context1->id => $context1->id, 209 $context2->id => $context2->id); 210 $this->assertEquals($frontpageandcourse1, $contexts[$this->forumpostareaid]); 211 $this->assertEquals(array($sitectx->id => $sitectx->id, $course1ctx->id => $course1ctx->id), 212 $contexts[$this->mycoursesareaid]); 213 $mockctxs = array($teacherctx->id => $teacherctx->id, $systemctxid => $systemctxid); 214 $this->assertEquals($mockctxs, $contexts[$mockareaid]); 215 216 $this->setUser($student); 217 $contexts = $search->get_areas_user_accesses(); 218 $this->assertEquals($frontpageandcourse1, $contexts[$this->forumpostareaid]); 219 $this->assertEquals(array($sitectx->id => $sitectx->id, $course1ctx->id => $course1ctx->id), 220 $contexts[$this->mycoursesareaid]); 221 $mockctxs = array($studentctx->id => $studentctx->id, $systemctxid => $systemctxid); 222 $this->assertEquals($mockctxs, $contexts[$mockareaid]); 223 224 // Hide the activity. 225 set_coursemodule_visible($forum2->cmid, 0); 226 $contexts = $search->get_areas_user_accesses(); 227 $this->assertEquals(array($frontpageforumcontext->id => $frontpageforumcontext->id, $context1->id => $context1->id), 228 $contexts[$this->forumpostareaid]); 229 230 // Now test course limited searches. 231 set_coursemodule_visible($forum2->cmid, 1); 232 $this->getDataGenerator()->enrol_user($student->id, $course2->id, 'student'); 233 $contexts = $search->get_areas_user_accesses(); 234 $allcontexts = array($frontpageforumcontext->id => $frontpageforumcontext->id, $context1->id => $context1->id, 235 $context2->id => $context2->id, $context3->id => $context3->id); 236 $this->assertEquals($allcontexts, $contexts[$this->forumpostareaid]); 237 $this->assertEquals(array($sitectx->id => $sitectx->id, $course1ctx->id => $course1ctx->id, 238 $course2ctx->id => $course2ctx->id), $contexts[$this->mycoursesareaid]); 239 240 $contexts = $search->get_areas_user_accesses(array($course1->id, $course2->id)); 241 $allcontexts = array($context1->id => $context1->id, $context2->id => $context2->id, $context3->id => $context3->id); 242 $this->assertEquals($allcontexts, $contexts[$this->forumpostareaid]); 243 $this->assertEquals(array($course1ctx->id => $course1ctx->id, 244 $course2ctx->id => $course2ctx->id), $contexts[$this->mycoursesareaid]); 245 246 $contexts = $search->get_areas_user_accesses(array($course2->id)); 247 $allcontexts = array($context3->id => $context3->id); 248 $this->assertEquals($allcontexts, $contexts[$this->forumpostareaid]); 249 $this->assertEquals(array($course2ctx->id => $course2ctx->id), $contexts[$this->mycoursesareaid]); 250 251 $contexts = $search->get_areas_user_accesses(array($course1->id)); 252 $allcontexts = array($context1->id => $context1->id, $context2->id => $context2->id); 253 $this->assertEquals($allcontexts, $contexts[$this->forumpostareaid]); 254 $this->assertEquals(array($course1ctx->id => $course1ctx->id), $contexts[$this->mycoursesareaid]); 255 } 256 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |