[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/search/tests/ -> manager_test.php (source)

   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  }


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1