MDL-41592 behat: Allow alt wwwroot to be set for acceptance testing
authorAaron Barnes <aaronb@catalyst.net.nz>
Wed, 4 Sep 2013 08:35:50 +0000 (20:35 +1200)
committerDavid Monllao <davidm@moodle.com>
Mon, 2 Dec 2013 06:18:10 +0000 (14:18 +0800)
To set add $CFG->behat_wwwroot = 'http://alturl'; in your config.php

config-dist.php
lib/behat/classes/behat_command.php
lib/setup.php

index 08a50a0..4912f73 100644 (file)
@@ -589,8 +589,8 @@ $CFG->admin = 'admin';
 // $CFG->behat_prefix = 'bht_';
 // $CFG->behat_dataroot = '/home/example/bht_moodledata';
 //
-// Behat uses http://localhost:8000 as default URL to run
-// the acceptance tests, you can override this value.
+// To set a seperate wwwroot for Behat to use, set it below.
+// This is set automatically elsewhere when using PHP's built in webserver.
 // Example:
 //   $CFG->behat_wwwroot = 'http://192.168.1.250:8000';
 //
index fb149ad..a40a719 100644 (file)
@@ -108,7 +108,7 @@ class behat_command {
 
         // We don't check the PHP version if $CFG->behat_switchcompletely has been enabled.
         // Here we are in CLI.
-        if (empty($CFG->behat_switchcompletely) && $checkphp && version_compare(PHP_VERSION, '5.4.0', '<')) {
+        if (empty($CFG->behat_switchcompletely) && empty($CFG->behat_wwwroot) && $checkphp && version_compare(PHP_VERSION, '5.4.0', '<')) {
             behat_error(BEHAT_EXITCODE_REQUIREMENT, 'PHP 5.4 is required. See config-dist.php for possible alternatives');
         }
 
index 40ae817..5565663 100644 (file)
@@ -91,20 +91,11 @@ if (!isset($CFG->wwwroot) or $CFG->wwwroot === 'http://example.com/moodle') {
     exit(1);
 }
 
-// Ignore $CFG->behat_wwwroot and use the same wwwroot.
-if (!empty($CFG->behat_switchcompletely)) {
-    $CFG->behat_wwwroot = $CFG->wwwroot;
-
-} else if (empty($CFG->behat_wwwroot)) {
-    // Default URL for acceptance testing, only accessible from localhost.
-    $CFG->behat_wwwroot = 'http://localhost:8000';
-}
-
-
 // Test environment is requested if:
-// * Behat is running (constant set hooking the behat init process before requiring config.php).
-// * If we are accessing though the built-in web server (cli-server).
 // * If $CFG->behat_switchcompletely has been set (maintains CLI scripts behaviour, which ATM is only preventive).
+// * If we are accessing though the built-in web server (cli-server).
+// * Behat is running (constant set hooking the behat init process before requiring config.php).
+// * If $CFG->behat_wwwroot has been set and the hostname/port match what the page was requested with.
 // Test environment is enabled if:
 // * User has previously enabled through admin/tool/behat/cli/util.php --enable.
 // Both are required to switch to test mode
@@ -113,10 +104,24 @@ if (!defined('BEHAT_SITE_RUNNING') && !empty($CFG->behat_dataroot) &&
 
     $CFG->behat_dataroot = realpath($CFG->behat_dataroot);
 
-    $switchcompletely = !empty($CFG->behat_switchcompletely) && php_sapi_name() !== 'cli';
-    $builtinserver = php_sapi_name() === 'cli-server';
-    $behatrunning = defined('BEHAT_TEST');
-    $testenvironmentrequested = $switchcompletely || $builtinserver || $behatrunning;
+    if (!empty($CFG->behat_switchcompletely) && php_sapi_name() !== 'cli') {
+        $behatswitchcompletely = true;
+        $CFG->behat_wwwroot = $CFG->wwwroot;
+
+    } elseif (php_sapi_name() === 'cli-server') {
+        $behatbuiltinserver = true;
+        $CFG->behat_wwwroot = 'http://localhost:'.$_SERVER['SERVER_PORT'];
+
+    } elseif (defined('BEHAT_TEST')) {
+        $behatrunning = true;
+
+    } elseif (!empty($CFG->behat_wwwroot) && !empty($_SERVER['HTTP_HOST'])) {
+        $behaturl = parse_url($CFG->behat_wwwroot.'/');
+        $behaturl['port'] = isset($behaturl['port']) ? $behaturl['port'] : 80;
+        $behataltwww = ($behaturl['host'] == $_SERVER['HTTP_HOST']) && ($behaturl['port'] == $_SERVER['SERVER_PORT']);
+    }
+
+    $testenvironmentrequested = !empty($behatswitchcompletely) || !empty($behatbuiltinserver) || !empty($behatrunning) || !empty($behataltwww);
 
     // Only switch to test environment if it has been enabled.
     $testenvironmentenabled = file_exists($CFG->behat_dataroot . '/behat/test_environment_enabled.txt');