diff --git a/tests/Selenium/Mail/Getunread.php b/tests/Selenium/Mail/Getunread.php index d6362f2f4..16b6bd1d2 100644 --- a/tests/Selenium/Mail/Getunread.php +++ b/tests/Selenium/Mail/Getunread.php @@ -2,12 +2,36 @@ class Selenium_Mail_Getunread extends Selenium_Test { + protected $msgcount = 0; + + protected function setUp() + { + parent::setUp(); + + bootstrap::init_imap(); + bootstrap::purge_mailbox('INBOX'); + + // import email messages + foreach (glob(TESTS_DIR . 'Selenium/data/mail/list_*.eml') as $f) { + bootstrap::import_message($f, 'INBOX'); + $this->msgcount++; + } + } + public function testGetunread() { $this->go('mail'); $res = $this->ajaxResponse('getunread', "rcmail.http_request('getunread')"); - $this->assertEquals('getunread', $res['action']); + + $env = $this->get_env(); + $this->assertEquals($env['unread_counts']['INBOX'], $this->msgcount); + + $li = $this->byCssSelector('.folderlist li.inbox'); + $this->assertHasClass('unread', $li); + + $badge = $this->byCssSelector('.folderlist li.inbox span.unreadcount'); + $this->assertEquals(strval($this->msgcount), $badge->text()); } } diff --git a/tests/Selenium/Mail/List.php b/tests/Selenium/Mail/List.php index 9c1d4a8d8..88fdb25cb 100644 --- a/tests/Selenium/Mail/List.php +++ b/tests/Selenium/Mail/List.php @@ -2,6 +2,19 @@ class Selenium_Mail_List extends Selenium_Test { + protected function setUp() + { + parent::setUp(); + + bootstrap::init_imap(); + bootstrap::purge_mailbox('INBOX'); + + // import email messages + foreach (glob(TESTS_DIR . 'Selenium/data/mail/list_00.eml') as $f) { + bootstrap::import_message($f, 'INBOX'); + } + } + public function testList() { $this->go('mail'); diff --git a/tests/Selenium/bootstrap.php b/tests/Selenium/bootstrap.php index fe2d11156..dfc9c67b1 100644 --- a/tests/Selenium/bootstrap.php +++ b/tests/Selenium/bootstrap.php @@ -54,6 +54,8 @@ PHPUnit_Extensions_Selenium2TestCase::shareSession(true); */ class bootstrap { + static $imap_ready = null; + /** * Wipe and re-initialize (mysql) database */ @@ -91,8 +93,12 @@ class bootstrap */ public static function init_imap() { - if (!TESTS_USER) + if (!TESTS_USER) { return false; + } + else if (self::$imap_ready !== null) { + return self::$imap_ready; + } $rcmail = rcmail::get_instance(); $imap = $rcmail->get_storage(); @@ -110,27 +116,62 @@ class bootstrap } if (!$imap->connect($imap_host, TESTS_USER, TESTS_PASS, $imap_port, $imap_ssl)) { + self::$imap_ready = false; 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); + self::$imap_ready = true; + + self::purge_mailbox('INBOX'); + self::ensure_mailbox('Archive', true); + + return self::$imap_ready; + } + + /** + * Import the given file into IMAP + */ + public static function import_message($filename, $mailbox = 'INBOX') + { + if (!self::init_imap()) { + die(__METHOD__ . ': IMAP connection unavailable'); } - else { - $imap->delete_message('*', 'Archive'); + + $imap = rcmail::get_instance()->get_storage(); + $imap->save_message($mailbox, file_get_contents($filename)); + } + + /** + * Delete all messages from the given mailbox + */ + public static function purge_mailbox($mailbox) + { + if (!self::init_imap()) { + die(__METHOD__ . ': IMAP connection unavailable'); } - // empty Inbox - $imap->delete_message('*', 'INBOX'); + $imap = rcmail::get_instance()->get_storage(); + $imap->delete_message('*', $mailbox); + } - // import email messages - foreach (glob(TESTS_DIR . 'Selenium/data/mail/*.eml') as $f) { - $imap->save_message('INBOX', file_get_contents($f)); + /** + * Make sure the given mailbox exists in IMAP + */ + public static function ensure_mailbox($mailbox, $empty = false) + { + if (!self::init_imap()) { + die(__METHOD__ . ': IMAP connection unavailable'); } - $imap->close(); + $imap = rcmail::get_instance()->get_storage(); + + $folders = $imap->list_folders(); + if (!in_array($mailbox, $folders)) { + $imap->create_folder($mailbox, true); + } + else if ($empty) { + $imap->delete_message('*', $mailbox); + } } } diff --git a/tests/Selenium/data/mail/lines.eml b/tests/Selenium/data/mail/list_00.eml similarity index 100% rename from tests/Selenium/data/mail/lines.eml rename to tests/Selenium/data/mail/list_00.eml