index-test.php | ●●●●● patch | view | raw | blame | history | |
tests/Selenium/Login.php | ●●●●● patch | view | raw | blame | history | |
tests/Selenium/README.md | ●●●●● patch | view | raw | blame | history | |
tests/Selenium/bootstrap.php | ●●●●● patch | view | raw | blame | history | |
tests/Selenium/data/mysql.sql | ●●●●● patch | view | raw | blame | history |
index-test.php
New file @@ -0,0 +1,27 @@ <?php /* +-----------------------------------------------------------------------+ | Roundcube Webmail Selenium Tests Entry Point | | | | Copyright (C) 2005-2014, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | | See the README file for a full license statement. | | | | PURPOSE: | | This is the public entry point for all HTTP requests to the | | Roundcube webmail application loading the 'tests' environment. | +-----------------------------------------------------------------------+ | Author: Thomas Bruederli <thomas@roundcube.net> | +-----------------------------------------------------------------------+ */ define('INSTALL_PATH', realpath(__DIR__) . '/'); $GLOBALS['env'] = 'test'; // include index.php from application root directory include INSTALL_PATH . 'index.php'; 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 tests/Selenium/README.md
New file @@ -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/ 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 @@ 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 @@ 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 @@ { 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 @@ 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); tests/Selenium/data/mysql.sql
New file @@ -0,0 +1 @@ -- empty