]> gitweb.fluxo.info Git - semanticscuttle.git/commitdiff
add new feature: allow unit test mode enabling via HTTP GET parameter
authorChristian Weiske <cweiske@cweiske.de>
Sat, 26 Mar 2011 14:09:22 +0000 (15:09 +0100)
committerChristian Weiske <cweiske@cweiske.de>
Sat, 26 Mar 2011 14:09:22 +0000 (15:09 +0100)
data/config.default.php
src/SemanticScuttle/header.php
tests/TestBase.php

index 3d60b9179163de5b01375bfaaf0e4ad8daf93b6d..af79891e9bb7fb6be7e1145c0becad2cd92eadf2 100644 (file)
@@ -735,4 +735,12 @@ $authEmailSuffix = null;
  */
 $unittestUrl = null;
 
+/**
+ * Allow "unittestMode=1" in URLs.
+ * Should only be enabled on development systems
+ *
+ * @var boolean
+ */
+$allowUnittestMode = false;
+
 ?>
index 9c5f7da48d14c5acecf4313e4d3e30ea1881e799..75e52041f3fc2a09c5ded23e0966f06306f5d0df 100644 (file)
@@ -39,6 +39,20 @@ set_include_path(
 require_once $datadir . '/config.default.php';
 require_once $datadir . '/config.php';
 
+if (isset($_GET['unittestMode']) && $_GET['unittestMode'] == 1
+) {
+    if ($allowUnittestMode !== true) {
+        header('HTTP/1.0 400 Bad Request');
+        die("Unittestmode is not allowed\n");
+    }
+
+    $unittestConfigFile = $datadir . '/config.unittest.php';
+    if (file_exists($unittestConfigFile)) {
+        require_once $unittestConfigFile;
+    }
+    define('HTTP_UNIT_TEST_MODE', true);
+    define('UNIT_TEST_MODE', true);
+}
 if (defined('UNIT_TEST_MODE')) {
     //make local config vars global - needed for unit tests
     //run with phpunit
@@ -118,7 +132,7 @@ $tplVars['currentUser'] = $currentUser;
 $tplVars['userservice'] = $userservice;
 
 // 6 // Force UTF-8 behaviour for server (cannot be moved into top.inc.php which is not included into every file)
-if (!defined('UNIT_TEST_MODE')) {
+if (!defined('UNIT_TEST_MODE') || defined('HTTP_UNIT_TEST_MODE')) {
     //API files define that, so we need a way to support both of them
     if (!isset($httpContentType)) {
         if (DEBUG_MODE) {
index 3e2e213bc127e098bb1b7294484f7229daee139c..b85c189846a453cecc6b2036cdf0073eb2c7fda4 100644 (file)
  */
 class TestBase extends PHPUnit_Framework_TestCase
 {
+    /**
+     * Clean up after test
+     */
+    public function tearDown()
+    {
+        if (file_exists($GLOBALS['datadir'] . '/config.unittest.php')) {
+            unlink($GLOBALS['datadir'] . '/config.unittest.php');
+        }
+    }
+
+
+
     /**
      * Create a new bookmark.
      *
@@ -80,8 +92,25 @@ class TestBase extends PHPUnit_Framework_TestCase
      * @param string $password Password
      *
      * @return integer ID of user
+     *
+     * @uses addUserData()
      */
     protected function addUser($username = null, $password = null)
+    {
+        return reset($this->addUserData($username, $password));
+    }
+
+
+
+    /**
+     * Creates a new user in the database and returns id, username and password.
+     *
+     * @param string $username Username
+     * @param string $password Password
+     *
+     * @return array ID of user, Name of user, password of user
+     */
+    protected function addUserData($username = null, $password = null)
     {
         $us   = SemanticScuttle_Service_Factory::get('User');
         $rand = rand();
@@ -98,7 +127,7 @@ class TestBase extends PHPUnit_Framework_TestCase
             $password,
             'unittest-' . $rand . '@example.org'
         );
-        return $uid;
+        return array($uid, $username, $password);
     }
 
 
@@ -129,6 +158,38 @@ class TestBase extends PHPUnit_Framework_TestCase
 
         return $uid;
     }
+
+
+    /**
+     * Writes a special unittest configuration file.
+     * The unittest config file is read when a GET request with unittestMode=1
+     * is sent, and the user allowed unittestmode in config.php.
+     *
+     * @param array $arConfig Array with config names as key and their value as
+     *                        value
+     *
+     * @return void
+     */
+    protected function setUnittestConfig($arConfig)
+    {
+        $str = '<' . "?php\r\n";
+        foreach ($arConfig as $name => $value) {
+            $str .= '$' . $name . ' = '
+                . var_export($value, true) . ";\n";
+        }
+
+        if (!is_dir($GLOBALS['datadir'])) {
+            $this->fail(
+                'datadir not set or not a directory: ' . $GLOBALS['datadir']
+            );
+        }
+
+        $this->assertInternalType(
+            'integer',
+            file_put_contents($GLOBALS['datadir'] . '/config.unittest.php', $str),
+            'Writing config.unittest.php failed'
+        );
+    }
 }
 
 ?>
\ No newline at end of file