MDL-37046 behat: Adding build config file action
authorDavid Monllao <davidm@moodle.com>
Mon, 15 Oct 2012 05:14:01 +0000 (13:14 +0800)
committerDavid Monllao <davidm@moodle.com>
Tue, 29 Jan 2013 00:40:36 +0000 (08:40 +0800)
admin/tool/behat/cli/util.php
admin/tool/behat/index.php
admin/tool/behat/lang/en/tool_behat.php
admin/tool/behat/locallib.php

index e76bded..2583266 100644 (file)
@@ -69,12 +69,12 @@ if ($unrecognized) {
 
 $commands = array('stepsdefinitions', 'buildconfigfile', 'runtests');
 foreach ($commands as $command) {
-    if (isset($options[$command])) {
+    if ($options[$command]) {
         $action = $command;
     }
 }
 
-if (!$action) {
+if (empty($action)) {
     mtrace('No command selected');
     echo $help;
     exit(0);
index 2ec549b..96819b6 100644 (file)
@@ -31,5 +31,3 @@ $action = optional_param('action', 'info', PARAM_ALPHAEXT);
 admin_externalpage_setup('toolbehat');
 
 call_user_func('tool_behat::' . $action);
-
-echo $OUTPUT->footer();
index cb564c6..0e37926 100644 (file)
@@ -23,6 +23,8 @@
  */
 
 $string['actionnotsupported'] = 'Action not supported';
+$string['buildconfigfileinfo'] = 'Update the list of available acceptance tests';
+$string['configfilesuccess'] = 'Config file successfully built';
 $string['commandbuildconfigfile'] = 'Build config file';
 $string['commandinfo'] = 'Info';
 $string['commandruntests'] = 'Run tests';
@@ -31,7 +33,7 @@ $string['commandswitchenvironment'] = 'Switch environment';
 $string['finished'] = 'Process finished';
 $string['nobehatpath'] = 'You must specify the path to moodle-acceptance-tests.';
 $string['nostepsdefinitions'] = 'There aren\'t steps definitions matching this filter';
-$string['pluginname'] = 'Acceptance test tool';
+$string['pluginname'] = 'Acceptance testing';
 $string['switchenvironmentinfo'] = 'Caution! Use only in non-production sites, if you switch to the test environment all the logged users, including you, will be logged out.';
 $string['switchenvironmentenable'] = 'Switch to test environment';
 $string['switchenvironmentdisable'] = 'Return to regular environment';
index d5eb866..7a717c4 100644 (file)
@@ -24,7 +24,7 @@
 
 require_once($CFG->libdir . '/filestorage/file_exceptions.php');
 require_once($CFG->libdir . '/phpunit/bootstraplib.php');
-require_once($CFG->libdir . '/phpunit/classes/util.php');
+require_once($CFG->libdir . '/phpunit/classes/tests_finder.php');
 
 class tool_behat {
 
@@ -33,12 +33,13 @@ class tool_behat {
      */
     public static function info() {
 
-        $html = tool_behat::get_header();
-        $html .= tool_behat::get_info();
-        $html .= tool_behat::get_switch_environment_form();
-        $html .= tool_behat::get_steps_definitions_form();
-        $html .= tool_behat::get_run_tests_form();
-        $html .= tool_behat::get_footer();
+        $html = self::get_header();
+        $html .= self::get_info();
+        $html .= self::get_build_config_file_form();
+        $html .= self::get_switch_environment_form();
+        $html .= self::get_steps_definitions_form();
+        $html .= self::get_run_tests_form();
+        $html .= self::get_footer();
 
         echo $html;
     }
@@ -50,8 +51,10 @@ class tool_behat {
     public static function stepsdefinitions() {
         global $CFG;
 
-        confirm_sesskey();
-        tool_behat::check_behat_setup();
+        if (!CLI_SCRIPT) {
+            confirm_sesskey();
+        }
+        self::check_behat_setup();
 
         if ($filter = optional_param('filter', false, PARAM_ALPHANUMEXT)) {
             $filteroption = ' -d ' . $filter;
@@ -65,8 +68,8 @@ class tool_behat {
         chdir($currentcwd);
 
         // Outputing steps.
-        $html = tool_behat::get_header();
-        $html .= tool_behat::get_steps_definitions_form($filter);
+        $html = self::get_header();
+        $html .= self::get_steps_definitions_form($filter);
 
         $content = '';
         if ($steps) {
@@ -84,7 +87,7 @@ class tool_behat {
         }
 
         $html .= html_writer::tag('div', $content, array('id' => 'steps-definitions'));
-        $html .= tool_behat::get_footer();
+        $html .= self::get_footer();
 
         echo $html;
     }
@@ -95,13 +98,14 @@ class tool_behat {
     public static function switchenvironment() {
         global $CFG;
 
-        confirm_sesskey();
-
+        if (!CLI_SCRIPT) {
+            confirm_sesskey();
+        }
         $testenvironment = optional_param('testenvironment', 'enable', PARAM_ALPHA);
         if ($testenvironment == 'enable') {
-            tool_behat::enable_test_environment();
+            self::enable_test_environment();
         } else if ($testenvironment == 'disable') {
-            tool_behat::disable_test_environment();
+            self::disable_test_environment();
         }
 
         redirect(get_login_url());
@@ -111,7 +115,32 @@ class tool_behat {
      * Creates a file listing all the moodle with features and steps definitions
      */
     public static function buildconfigfile() {
+        global $CFG;
+
+        if (!CLI_SCRIPT) {
+            confirm_sesskey();
+        }
+
+        // Gets all the components with features
+        $components = tests_finder::get_components_with_tests('features');
+        if ($components) {
+            $contents = 'features:' . PHP_EOL;
+            foreach ($components as $componentname => $path) {
+                $contents .= '  - ' . $path . PHP_EOL;
+            }
+        }
+
+        // Gets all the components with steps definitions
         // TODO
+
+        $fullfilename = $CFG->dataroot . '/behat/config.yml';
+        if (!file_put_contents($fullfilename, $contents)) {
+            throw new file_exception('cannotcreatefile', $fullfilename);
+        }
+
+        echo self::get_header();
+        echo self::output_success(get_string('configfilesuccess', 'tool_behat'));
+        echo self::get_footer();
     }
 
     /**
@@ -120,10 +149,12 @@ class tool_behat {
     public static function runtests() {
         global $CFG;
 
-        confirm_sesskey();
-        tool_behat::check_behat_setup();
+        if (!CLI_SCRIPT) {
+            confirm_sesskey();
+        }
+        self::check_behat_setup();
 
-        echo tool_behat::get_header();
+        echo self::get_header();
 
         @set_time_limit(0);
 
@@ -133,20 +164,20 @@ class tool_behat {
         }
 
         // Switching database and dataroot to test environment.
-        tool_behat::enable_test_environment();
+        self::enable_test_environment();
         $currentcwd = getcwd();
 
         // Outputting runner form and tests results.
-        echo tool_behat::get_run_tests_form($tags);
+        echo self::get_run_tests_form($tags);
 
         chdir($CFG->behatpath);
         passthru('bin/behat --format html' . $tagsoption, $code);
 
         // Switching back to regular environment
-        tool_behat::disable_test_environment();
+        self::disable_test_environment();
         chdir($currentcwd);
 
-        echo tool_behat::get_footer();
+        echo self::get_footer();
     }
 
 
@@ -208,15 +239,13 @@ class tool_behat {
     private static function enable_test_environment() {
         global $CFG;
 
-        confirm_sesskey();
-
-        if (tool_behat::is_test_environment_enabled()) {
+        if (self::is_test_environment_enabled()) {
             debugging('Test environment was already enabled');
             return;
         }
 
         // Check that PHPUnit test environment is correctly set up.
-        tool_behat::test_environment_problem();
+        self::test_environment_problem();
 
         $behatdir = $CFG->dataroot . '/behat';
 
@@ -230,9 +259,9 @@ class tool_behat {
             throw new file_exception('storedfilecannotcreatefiledirs');
         }
 
-        $content = '$CFG->phpunit_prefix and $CFG->phpunit_dataroot are currently used as $CFG->prefix and $CFG->dataroot';
+        $contents = '$CFG->phpunit_prefix and $CFG->phpunit_dataroot are currently used as $CFG->prefix and $CFG->dataroot';
         $filepath = $behatdir . '/test_environment_enabled.txt';
-        if (!file_put_contents($filepath, $content)) {
+        if (!file_put_contents($filepath, $contents)) {
             throw new file_exception('cannotcreatefile', $filepath);
         }
 
@@ -243,11 +272,9 @@ class tool_behat {
      */
     private static function disable_test_environment() {
 
-        confirm_sesskey();
-
-        $testenvfile = tool_behat::get_test_filepath();
+        $testenvfile = self::get_test_filepath();
 
-        if (!tool_behat::is_test_environment_enabled()) {
+        if (!self::is_test_environment_enabled()) {
             debugging('Test environment was already disabled');
         } else {
             if (!unlink($testenvfile)) {
@@ -266,7 +293,7 @@ class tool_behat {
      */
     public static function is_test_environment_enabled() {
 
-        $testenvfile = tool_behat::get_test_filepath();
+        $testenvfile = self::get_test_filepath();
         if (file_exists($testenvfile)) {
             return true;
         }
@@ -296,7 +323,7 @@ class tool_behat {
     private static function get_test_filepath() {
         global $CFG;
 
-        if (tool_behat::is_test_environment_running()) {
+        if (self::is_test_environment_running()) {
             $testenvfile = $CFG->originaldataroot . '/behat/test_environment_enabled.txt';
         } else {
             $testenvfile = $CFG->dataroot . '/behat/test_environment_enabled.txt';
@@ -312,11 +339,12 @@ class tool_behat {
     private static function get_header() {
         global $OUTPUT;
 
+        $action = optional_param('action', 'info', PARAM_ALPHAEXT);
+
         if (CLI_SCRIPT) {
-            return get_string('command' . $action, 'tool_behat');
+            return '';
         }
 
-        $action = optional_param('action', 'info', PARAM_ALPHAEXT);
         $title = get_string('pluginname', 'tool_behat') . ' - ' . get_string('command' . $action, 'tool_behat');
         $html = $OUTPUT->header();
         $html .= $OUTPUT->heading($title);
@@ -338,6 +366,27 @@ class tool_behat {
         return $OUTPUT->footer();
     }
 
+    /**
+     * Returns a message and a button to continue if web execution
+     * @param string $html
+     * @param string $url
+     * @return string
+     */
+    private static function output_success($html, $url = false) {
+        global $CFG, $OUTPUT;
+
+        if (!$url) {
+            $url = $CFG->wwwroot . '/' . $CFG->admin . '/tool/behat/index.php';
+        }
+
+        if (!CLI_SCRIPT) {
+            $html = $OUTPUT->box($html, 'generalbox', 'notice');
+            $html .= $OUTPUT->continue_button($url);
+        }
+
+        return $html;
+    }
+
     /**
      * Returns the installation instructions
      *
@@ -371,7 +420,7 @@ class tool_behat {
     private static function get_switch_environment_form() {
         global $CFG, $OUTPUT;
 
-        if (tool_behat::is_test_environment_running()) {
+        if (self::is_test_environment_running()) {
             $perform = 'disable';
         } else {
             $perform = 'enable';
@@ -387,6 +436,24 @@ class tool_behat {
         return $html;
     }
 
+    /**
+     * Returns a button to execute the build config file form
+     * @return string
+     */
+    private static function get_build_config_file_form() {
+        global $OUTPUT, $CFG;
+
+        $params = array('action' => 'buildconfigfile', 'sesskey' => sesskey());
+        $url = new moodle_url('/' . $CFG->admin . '/tool/behat/index.php', $params);
+
+        $html = $OUTPUT->box_start();
+        $html .= '<p>' . get_string('buildconfigfileinfo', 'tool_behat') . '</p>';
+        $html .= $OUTPUT->single_button($url, get_string('commandbuildconfigfile', 'tool_behat'));
+        $html .= $OUTPUT->box_end();
+
+        return $html;
+    }
+
     /**
      * Returns the steps definitions form
      * @param string $filter To filter the steps definitions list by keyword
@@ -403,11 +470,10 @@ class tool_behat {
 
         $html = $OUTPUT->box_start();
         $html .= '<form method="get" action="index.php">';
-        $html .= '<p>';
         $html .= '<fieldset class="invisiblefieldset">';
         $html .= '<label for="id_filter">Steps definitions which contains</label> ';
         $html .= '<input type="text" id="id_filter" value="' . $filter . '" name="filter"/> (all steps definitions if empty)';
-        $html .= '</p>';
+        $html .= '<p></p>';
         $html .= '<input type="submit" value="View available steps definitions" />';
         $html .= '<input type="hidden" name="action" value="stepsdefinitions" />';
         $html .= '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
@@ -434,11 +500,10 @@ class tool_behat {
 
         $html = $OUTPUT->box_start();
         $html .= '<form method="get" action="index.php">';
-        $html .= '<p>';
         $html .= '<fieldset class="invisiblefieldset">';
         $html .= '<label for="id_tags">Tests tagged as</label> ';
         $html .= '<input type="text" id="id_tags" value="' . $tags . '" name="tags"/> (all available tests if empty)';
-        $html .= '</p>';
+        $html .= '<p></p>';
         $html .= '<input type="submit" value="Run tests" />';
         $html .= '<input type="hidden" name="action" value="runtests" />';
         $html .= '<input type="hidden" name="sesskey" value="'.sesskey().'" />';