diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/Selenium/Login.php | 6 | ||||
| -rw-r--r-- | tests/Selenium/README.md | 49 | ||||
| -rw-r--r-- | tests/Selenium/bootstrap.php | 61 | ||||
| -rw-r--r-- | tests/Selenium/data/mysql.sql | 1 | 
4 files changed, 111 insertions, 6 deletions
| diff --git a/tests/Selenium/Login.php b/tests/Selenium/Login.php index a3f0ab6b4..65b082851 100644 --- a/tests/Selenium/Login.php +++ b/tests/Selenium/Login.php @@ -2,6 +2,12 @@  class Selenium_Login extends Selenium_Test  { +    protected function setUp() +    { +        bootstrap::init_db(); +        parent::setUp(); +    } +      public function testLogin()      {          // first test, we're already on the login page diff --git a/tests/Selenium/README.md b/tests/Selenium/README.md new file mode 100644 index 000000000..5610fae71 --- /dev/null +++ b/tests/Selenium/README.md @@ -0,0 +1,49 @@ +Running Selenium Tests +====================== + +In order to run the Selenium-based web tests, some configuration for the  +Roundcube test instance need to be created. Along with the default config for a  +given Roundcube instance, you should provide a config specifically for running  +tests. To do so, create a config file named `config-test.inc.php` in the  +regular Roundcube config dir. That should provide specific `db_dsnw` and  +`default_host` values for testing purposes as well as the credentials of a  +valid IMAP user account used for running the tests with. + +Add these config options used by the Selenium tests: + +```php +  // Unit tests settings +  $config['tests_username'] = 'roundcube.test@example.org'; +  $config['tests_password'] = '<test-account-password>'; +  $config['tests_url'] = 'http://localhost/roundcube/index-test.php'; +``` + +The `tests_url` should point to Roundcube's index-test.php file accessible by  +the Selenium web browser. + +WARNING +------- +Please note that the configured IMAP account as well as the Roundcube database  +configred in `db_dsnw` will be wiped and filled with test data in every test  +run. Under no circumstances you should use credentials of a production database  +or email account! + + +Run the tests +------------- + +First you need to start a Selenium server. We recommend to use the +[Selenium Standalone Server][selenium-server] but the tests will also run on a  +Selenium  Grid. The tests are based in [PHPUnit_Selenium][phpunit] which can be  +installed through [PEAR][pear-phpunit]. + +To start the test suite call `phpunit` from the Selenium directory: + +``` +  cd <roundcube-dir>/tests/Selenium +  phpunit +``` + +[phpunit]: http://phpunit.de/manual/4.0/en/selenium.html +[pear-phpunit]: http://pear.phpunit.de/ +[selenium-server]: http://docs.seleniumhq.org/download/ diff --git a/tests/Selenium/bootstrap.php b/tests/Selenium/bootstrap.php index e8b186a1e..ed9c2eb32 100644 --- a/tests/Selenium/bootstrap.php +++ b/tests/Selenium/bootstrap.php @@ -5,7 +5,7 @@   | tests/Selenium/bootstrap.php                                          |   |                                                                       |   | This file is part of the Roundcube Webmail client                     | - | Copyright (C) 2009-2013, The Roundcube Dev Team                       | + | Copyright (C) 2009-2014, The Roundcube Dev Team                       |   |                                                                       |   | Licensed under the GNU General Public License version 3 or            |   | any later version with exceptions for skins & plugins.                | @@ -38,7 +38,7 @@ if (set_include_path($include_path) === false) {      die("Fatal error: ini_set/set_include_path does not work.");  } -$rcmail = rcube::get_instance('test'); +$rcmail = rcmail::get_instance('test');  define('TESTS_URL',     $rcmail->config->get('tests_url'));  define('TESTS_BROWSER', $rcmail->config->get('tests_browser', 'firefox')); @@ -48,7 +48,56 @@ define('TESTS_SLEEP',   $rcmail->config->get('tests_sleep', 5));  PHPUnit_Extensions_Selenium2TestCase::shareSession(true); -// @TODO: remove user record from DB before running tests + +/** + * satisfy PHPUnit + */ +class bootstrap +{ +    /** +     * Wipe and re-initialize (mysql) database +     */ +    public static function init_db() +    { +        $rcmail = rcmail::get_instance(); + +        // drop all existing tables first +        $db = $rcmail->get_dbh(); +        $db->query("SET FOREIGN_KEY_CHECKS=0"); +        $sql_res = $db->query("SHOW TABLES"); +        while ($sql_arr = $db->fetch_array($sql_res)) { +            $table = reset($sql_arr); +            $db->query("DROP TABLE $table"); +        } + +        // init database with schema +        $dsn = parse_url($rcmail->config->get('db_dsnw')); +        $db_name = trim($dsn['path'], '/'); + +        if ($dsn['scheme'] == 'mysql' || $dsn['scheme'] == 'mysqli') { +            system(sprintf('cat %s %s | mysql -h %s -u %s --password=%s %s', +                realpath(INSTALL_PATH . '/SQL/mysql.initial.sql'), +                realpath(TESTS_DIR . '/Selenium/data/mysql.sql'), +                escapeshellarg($dsn['host']), +                escapeshellarg($dsn['user']), +                escapeshellarg($dsn['pass']), +                escapeshellarg($db_name) +            )); +        } +    } + +    /** +     * Wipe the configured IMAP account and fill with test data +     */ +    public static function init_imap() +    { +        if (!TESTS_USER) +            return false; + +        // TBD. +    } +} +  // @TODO: make sure mailbox has some content (always the same) or is empty  // @TODO: plugins: enable all? @@ -59,12 +108,12 @@ class Selenium_Test extends PHPUnit_Extensions_Selenium2TestCase  {      protected function setUp()      { -//        $this->rc = rcube::get_instance();          $this->setBrowser(TESTS_BROWSER);          // Set root to our index.html, for better performance          // See https://github.com/sebastianbergmann/phpunit-selenium/issues/217 -        $this->setBrowserUrl(TESTS_URL . '/tests/Selenium'); +        $baseurl = preg_replace('!/index(-.+)?\.php^!', '', TESTS_URL); +        $this->setBrowserUrl($baseurl . '/tests/Selenium');      }      protected function login() @@ -87,7 +136,7 @@ class Selenium_Test extends PHPUnit_Extensions_Selenium2TestCase      protected function go($task = 'mail', $action = null)      { -        $this->url(TESTS_URL . '/?_task=' . $task); +        $this->url(TESTS_URL . '?_task=' . $task);          // wait for interface load (initial ajax requests, etc.)          sleep(TESTS_SLEEP); diff --git a/tests/Selenium/data/mysql.sql b/tests/Selenium/data/mysql.sql new file mode 100644 index 000000000..fe6741a02 --- /dev/null +++ b/tests/Selenium/data/mysql.sql @@ -0,0 +1 @@ +-- empty
\ No newline at end of file | 
