MDL-37324 fix phpunit and behat SESSION and USER setup
authorPetr Škoda <commits@skodak.org>
Tue, 24 Sep 2013 06:59:29 +0000 (08:59 +0200)
committerPetr Škoda <commits@skodak.org>
Tue, 24 Sep 2013 06:59:29 +0000 (08:59 +0200)
lib/classes/session/manager.php
lib/setup.php
lib/tests/behat/behat_hooks.php

index 90153ef..2b1e7f0 100644 (file)
@@ -155,8 +155,9 @@ class manager {
             $_SESSION['USER']->mnethostid = 1;
         }
 
-        if (PHPUNIT_TEST) {
-            // Phpunit tests use reversed reference.
+        if (PHPUNIT_TEST or defined('BEHAT_TEST')) {
+            // Phpunit tests and behat init use reversed reference,
+            // the reason is we can not point global to $_SESSION outside of global scope.
             global $USER, $SESSION;
             $USER = $_SESSION['USER'];
             $SESSION = $_SESSION['SESSION'];
@@ -597,8 +598,9 @@ class manager {
         }
         sesskey(); // Init session key.
 
-        if (PHPUNIT_TEST) {
-            // Phpunit tests use reversed reference.
+        if (PHPUNIT_TEST or defined('BEHAT_TEST')) {
+            // Phpunit tests and behat init use reversed reference,
+            // the reason is we can not point global to $_SESSION outside of global scope.
             global $USER;
             $USER = $_SESSION['USER'];
             $_SESSION['USER'] =& $USER;
index f3c51dd..586f10f 100644 (file)
@@ -765,8 +765,10 @@ if (empty($CFG->sessiontimeout)) {
     $CFG->sessiontimeout = 7200;
 }
 \core\session\manager::start();
-$SESSION = &$_SESSION['SESSION'];
-$USER    = &$_SESSION['USER'];
+if (!PHPUNIT_TEST and !defined('BEHAT_TEST')) {
+    $SESSION =& $_SESSION['SESSION'];
+    $USER    =& $_SESSION['USER'];
+}
 
 // Late profiling, only happening if early one wasn't started
 if (!empty($CFG->profilingenabled)) {
index 08e64a2..7d2d912 100644 (file)
@@ -162,8 +162,10 @@ class behat_hooks extends behat_base {
             behat_selectors::register_moodle_selectors($session);
         }
 
-        // Avoid some notices / warnings.
+        // Reset $SESSION.
+        $_SESSION = array();
         $SESSION = new stdClass();
+        $_SESSION['SESSION'] =& $SESSION;
 
         behat_util::reset_database();
         behat_util::reset_dataroot();
@@ -174,7 +176,7 @@ class behat_hooks extends behat_base {
         // Reset the nasty strings list used during the last test.
         nasty_strings::reset_used_strings();
 
-        // Assing valid data to admin user (some generator-related code needs a valid user).
+        // Assign valid data to admin user (some generator-related code needs a valid user).
         $user = $DB->get_record('user', array('username' => 'admin'));
         \core\session\manager::set_user($user);