Populate IMAP test account with sample message and test its listing in Selenium tests

pull/247/merge
Thomas Bruederli 9 years ago
parent 585ee9e181
commit f7c5f44ffb

@ -5,6 +5,7 @@ class Selenium_Login extends Selenium_Test
protected function setUp()
{
bootstrap::init_db();
bootstrap::init_imap();
parent::setUp();
}

@ -2,7 +2,7 @@
class Selenium_Mail_List extends Selenium_Test
{
public function testCheckRecent()
public function testList()
{
$this->go('mail');
@ -13,7 +13,6 @@ class Selenium_Mail_List extends Selenium_Test
$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 @@ class Selenium_Mail_List extends Selenium_Test
$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);
}
}

@ -4,7 +4,8 @@ class Selenium_Settings_About extends Selenium_Test
{
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();

@ -24,7 +24,7 @@ if (php_sapi_name() != 'cli')
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 @@ class bootstrap
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 @@ class bootstrap
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 @@ class Selenium_Test extends PHPUnit_Extensions_Selenium2TestCase
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 @@ class Selenium_Test extends PHPUnit_Extensions_Selenium2TestCase
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 @@ class Selenium_Test extends PHPUnit_Extensions_Selenium2TestCase
protected function get_env()
{
return $this->execute(array(
'script' => 'return rcmail.env;',
'script' => 'return window.rcmail ? rcmail.env : {};',
'args' => array(),
));
}
@ -225,10 +269,15 @@ class Selenium_Test extends PHPUnit_Extensions_Selenium2TestCase
// 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'));
}
}

@ -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--

@ -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>

Loading…
Cancel
Save