Thomas Bruederli
2015-05-11 28b1cb04b619707f61e21cb2e6ab21d4bff0ae5f
Add more utility functions to prepare the IMAP account used for testing
1 files renamed
3 files modified
112 ■■■■ changed files
tests/Selenium/Mail/Getunread.php 26 ●●●●● patch | view | raw | blame | history
tests/Selenium/Mail/List.php 13 ●●●●● patch | view | raw | blame | history
tests/Selenium/bootstrap.php 73 ●●●● patch | view | raw | blame | history
tests/Selenium/data/mail/list_00.eml patch | view | raw | blame | history
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());
    }
}
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');
tests/Selenium/bootstrap.php
@@ -54,6 +54,8 @@
 */
class bootstrap
{
    static $imap_ready = null;
    /**
     * Wipe and re-initialize (mysql) database
     */
@@ -91,8 +93,12 @@
     */
    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 @@
        }
        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
        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');
        }
        $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');
        }
        $imap = rcmail::get_instance()->get_storage();
        $imap->delete_message('*', $mailbox);
    }
    /**
     * 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 = rcmail::get_instance()->get_storage();
        $folders = $imap->list_folders();
        if (!in_array('Archive', $folders)) {
            $imap->create_folder('Archive', true);
        if (!in_array($mailbox, $folders)) {
            $imap->create_folder($mailbox, true);
        }
        else {
            $imap->delete_message('*', 'Archive');
        else if ($empty) {
            $imap->delete_message('*', $mailbox);
        }
        // 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();
    }
}
tests/Selenium/data/mail/list_00.eml