tests/Selenium/Login.php | ●●●●● patch | view | raw | blame | history | |
tests/Selenium/Mail/List.php | ●●●●● patch | view | raw | blame | history | |
tests/Selenium/Settings/About.php | ●●●●● patch | view | raw | blame | history | |
tests/Selenium/bootstrap.php | ●●●●● patch | view | raw | blame | history | |
tests/Selenium/data/mail/lines.eml | ●●●●● patch | view | raw | blame | history | |
tests/Selenium/phpunit.xml | ●●●●● patch | view | raw | blame | history |
tests/Selenium/Login.php
@@ -5,6 +5,7 @@ protected function setUp() { bootstrap::init_db(); bootstrap::init_imap(); parent::setUp(); } tests/Selenium/Mail/List.php
@@ -2,7 +2,7 @@ class Selenium_Mail_List extends Selenium_Test { public function testCheckRecent() public function testList() { $this->go('mail'); @@ -13,7 +13,6 @@ $this->assertRegExp('/this\.set_unread_count/', $res['exec']); $this->assertRegExp('/this\.set_rowcount/', $res['exec']); $this->assertRegExp('/this\.set_message_coltypes/', $res['exec']); // $this->assertRegExp('/this\.add_message_row/', $res['exec']); $this->assertContains('current_page', $res['env']); $this->assertContains('exists', $res['env']); @@ -21,5 +20,18 @@ $this->assertContains('pagesize', $res['env']); $this->assertContains('messagecount', $res['env']); $this->assertContains('mailbox', $res['env']); $this->assertEquals($res['env']['mailbox'], 'INBOX'); $this->assertEquals($res['env']['messagecount'], 1); // check message list $row = $this->byCssSelector('.messagelist tbody tr:first-child'); $this->assertHasClass('unread', $row); $subject = $this->byCssSelector('.messagelist tbody tr:first-child td.subject'); $this->assertEquals('Lines', $subject->text()); $icon = $this->byCssSelector('.messagelist tbody tr:first-child td.status span'); $this->assertHasClass('unread', $icon); } } tests/Selenium/Settings/About.php
@@ -4,7 +4,8 @@ { public function testAbout() { $this->url(TESTS_URL . '/?_task=settings&_action=about'); $this->url(TESTS_URL . '?_task=settings&_action=about'); sleep(TESTS_SLEEP); // check task and action $env = $this->get_env(); 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')); } } tests/Selenium/data/mail/lines.eml
New file @@ -0,0 +1,45 @@ Return-Path: <thomas@roundcube.net> X-Original-To: tb@tester.local To: Tom Tester <tb@tester.local> Subject: Lines X-PHP-Originating-Script: 501:rcmail.php MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_8853bfb47b7da1852ac882e69cc724f3" Date: Fri, 23 May 2014 19:44:50 +0200 From: "Thomas B." <thomas@roundcube.net> Reply-To: hello@roundcube.net Mail-Reply-To: hello@roundcube.net Message-ID: <99839b8ec12482419372f1edafa9de75@woodcrest.local> X-Sender: thomas@roundcube.net User-Agent: Roundcube Webmail/1.0.1 --=_8853bfb47b7da1852ac882e69cc724f3 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=UTF-8; format=flowed Plain text message body. -- Developer of Free Software Sent with Roundcube Webmail - roundcube.net --=_8853bfb47b7da1852ac882e69cc724f3 Content-Transfer-Encoding: base64 Content-Type: text/plain; name=lines.txt Content-Disposition: attachment; filename=lines.txt; size=13 Zm9vDQpiYXINCmduYQ== --=_8853bfb47b7da1852ac882e69cc724f3 Content-Transfer-Encoding: base64 Content-Type: text/plain; name=lines_lf.txt Content-Disposition: attachment; filename=lines_lf.txt; size=11 Zm9vCmJhcgpnbmE= --=_8853bfb47b7da1852ac882e69cc724f3-- tests/Selenium/phpunit.xml
@@ -2,20 +2,28 @@ bootstrap="bootstrap.php" colors="true"> <testsuites> <testsuite name="All Tests"> <testsuite name="Mail"> <file>Login.php</file><!-- Login.php test must be first --> <file>Addressbook/Addressbook.php</file> <file>Addressbook/Import.php</file> <file>Mail/Mail.php</file> <file>Mail/CheckRecent.php</file> <file>Mail/Compose.php</file> <file>Mail/Getunread.php</file> <file>Mail/List.php</file> <file>Logout.php</file><!-- Logout.php test must be last --> </testsuite> <testsuite name="Addressbook"> <file>Login.php</file> <file>Addressbook/Addressbook.php</file> <file>Addressbook/Import.php</file> <file>Logout.php</file> </testsuite> <testsuite name="Settings"> <file>Login.php</file> <file>Settings/About.php</file> <file>Settings/Folders.php</file> <file>Settings/Identities.php</file> <file>Settings/Settings.php</file> <file>Logout.php</file><!-- Logout.php test must be last --> <file>Logout.php</file> </testsuite> </testsuites> </phpunit>