]> gitweb.fluxo.info Git - semanticscuttle.git/commitdiff
cherry-pick:
authorChristian Weiske <cweiske@cweiske.de>
Wed, 6 Apr 2011 06:42:26 +0000 (08:42 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Wed, 6 Apr 2011 06:42:26 +0000 (08:42 +0200)
 add new feature: allow unit test mode enabling via HTTP GET parameter

data/config.default.php
src/SemanticScuttle/header.php
tests/TestBase.php

index cd611f1b36c60e1dda9d763e0587be85dd3c7905..85b9ccbe8e99ce4570ab0894f82e5f903187b484 100644 (file)
@@ -752,4 +752,12 @@ $authEmailSuffix = null;
  */
 $unittestUrl = null;
 
+/**
+ * Allow "unittestMode=1" in URLs.
+ * Should only be enabled on development systems
+ *
+ * @var boolean
+ */
+$allowUnittestMode = false;
+
 ?>
index d1a5c293bb09d834a6028f30e9e8eaace3ebd36e..5d1ec805ab47f444923698bc0fe686141cd6b04a 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
@@ -117,7 +131,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)) {
         $httpContentType = 'text/html';
index 8c1a934091907d154f89662ab05212336225be9f..edafd3d7f0f61101f5217f10d7d9840b5c3b951e 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.
      *
@@ -79,8 +91,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();
@@ -97,9 +126,69 @@ class TestBase extends PHPUnit_Framework_TestCase
             $password,
             'unittest-' . $rand . '@example.org'
         );
+        return array($uid, $username, $password);
+    }
+
+
+
+    /**
+     * Retrieves the UID of an admin user.
+     * If that user does not exist in the database, it is created.
+     *
+     * @return integer UID of admin user
+     */
+    protected function getAdminUser()
+    {
+        if (count($GLOBALS['admin_users']) == 0) {
+            $this->fail('No admin users configured');
+        }
+        $adminUserName = reset($GLOBALS['admin_users']);
+
+        $us  = SemanticScuttle_Service_Factory::get('User');
+        $uid = $us->getIdFromUser($adminUserName);
+        if ($uid === null) {
+            //that user does not exist in the database; create it
+            $uid = $us->addUser(
+                $adminUserName,
+                rand(),
+                'unittest-admin-' . $adminUserName . '@example.org'
+            );
+        }
+
         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