From f7c5f44ffbfa793f12a0a873d2e6e172fee7a249 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli <thomas@roundcube.net> Date: Thu, 07 May 2015 11:42:18 -0400 Subject: [PATCH] Populate IMAP test account with sample message and test its listing in Selenium tests --- tests/Selenium/bootstrap.php | 65 ++++++++++++++++++++++++++++---- 1 files changed, 57 insertions(+), 8 deletions(-) diff --git a/tests/Selenium/bootstrap.php b/tests/Selenium/bootstrap.php index 124a81e..fe2d111 100644 --- a/tests/Selenium/bootstrap.php +++ b/tests/Selenium/bootstrap.php @@ -24,7 +24,7 @@ if (!defined('INSTALL_PATH')) define('INSTALL_PATH', realpath(__DIR__ . '/../../') . '/' ); -define('TESTS_DIR', __DIR__ . '/'); +define('TESTS_DIR', realpath(__DIR__ . '/../') . '/'); if (@is_dir(TESTS_DIR . 'config')) { define('RCUBE_CONFIG_DIR', TESTS_DIR . 'config'); @@ -77,7 +77,7 @@ 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'), + realpath(TESTS_DIR . 'Selenium/data/mysql.sql'), escapeshellarg($dsn['host']), escapeshellarg($dsn['user']), escapeshellarg($dsn['pass']), @@ -94,7 +94,43 @@ if (!TESTS_USER) return false; - // TBD. + $rcmail = rcmail::get_instance(); + $imap = $rcmail->get_storage(); + + $imap_host = $rcmail->config->get('default_host'); + $a_host = parse_url($args['host']); + if ($a_host['host']) { + $imap_host = $a_host['host']; + $imap_ssl = isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls')); + $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : 143); + } + else { + $imap_port = 143; + $imap_ssl = false; + } + + if (!$imap->connect($imap_host, TESTS_USER, TESTS_PASS, $imap_port, $imap_ssl)) { + die("IMAP error: unable to authenticate with user " . TESTS_USER); + } + + // create Archive mailbox + $folders = $imap->list_folders(); + if (!in_array('Archive', $folders)) { + $imap->create_folder('Archive', true); + } + else { + $imap->delete_message('*', 'Archive'); + } + + // empty Inbox + $imap->delete_message('*', 'INBOX'); + + // import email messages + foreach (glob(TESTS_DIR . 'Selenium/data/mail/*.eml') as $f) { + $imap->save_message('INBOX', file_get_contents($f)); + } + + $imap->close(); } } @@ -118,8 +154,11 @@ protected function login() { - $this->go('mail'); + $this->go('mail', null, true); + } + protected function do_login() + { $user_input = $this->byCssSelector('form input[name="_user"]'); $pass_input = $this->byCssSelector('form input[name="_pass"]'); $submit = $this->byCssSelector('form input[type="submit"]'); @@ -134,16 +173,21 @@ sleep(TESTS_SLEEP); } - protected function go($task = 'mail', $action = null) + protected function go($task = 'mail', $action = null, $login = true) { $this->url(TESTS_URL . '?_task=' . $task); // wait for interface load (initial ajax requests, etc.) sleep(TESTS_SLEEP); + // check if we have a valid session + $env = $this->get_env(); + if ($login && $env['task'] == 'login') { + $this->do_login(); + } + if ($action) { $this->click_button($action); - sleep(TESTS_SLEEP); } } @@ -151,7 +195,7 @@ protected function get_env() { return $this->execute(array( - 'script' => 'return rcmail.env;', + 'script' => 'return window.rcmail ? rcmail.env : {};', 'args' => array(), )); } @@ -225,10 +269,15 @@ // get response $response = $this->execute(array( - 'script' => "return window.test_ajax_response_object['$action'];", + 'script' => "return window.test_ajax_response_object ? test_ajax_response_object['$action'] : {};", 'args' => array(), )); return $response; } + + protected function assertHasClass($classname, $element) + { + $this->assertContains($classname, $element->attribute('class')); + } } -- Gitblit v1.9.1