From 2fece8372e58c9667f21cb9faf1061fc8f3de3da Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Wed, 13 May 2015 11:14:16 -0400
Subject: [PATCH] Allow selenium tests to use explicit login credentials

---
 tests/Selenium/bootstrap.php |   44 +++++++++++++++++++++++++++++++-------------
 1 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/tests/Selenium/bootstrap.php b/tests/Selenium/bootstrap.php
index e9d94f6..8c57571 100644
--- a/tests/Selenium/bootstrap.php
+++ b/tests/Selenium/bootstrap.php
@@ -102,14 +102,31 @@
             return self::$imap_ready;
         }
 
+        self::connect_imap(TESTS_USER, TESTS_PASS);
+        self::purge_mailbox('INBOX');
+        self::ensure_mailbox('Archive', true);
+
+        return self::$imap_ready;
+    }
+
+    /**
+     * Authenticate to IMAP with the given credentials
+     */
+    public static function connect_imap($username, $password, $host = null)
+    {
         $rcmail = rcmail::get_instance();
         $imap = $rcmail->get_storage();
 
-        $imap_host = $rcmail->config->get('default_host');
-        $a_host = parse_url($args['host']);
+        if ($imap->is_connected()) {
+            $imap->close();
+            self::$imap_ready = false;
+        }
+
+        $imap_host = $host ?: $rcmail->config->get('default_host');
+        $a_host = parse_url($imap_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_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 {
@@ -117,17 +134,11 @@
             $imap_ssl = false;
         }
 
-        if (!$imap->connect($imap_host, TESTS_USER, TESTS_PASS, $imap_port, $imap_ssl)) {
-            self::$imap_ready = false;
+        if (!$imap->connect($imap_host, $username, $password, $imap_port, $imap_ssl)) {
             die("IMAP error: unable to authenticate with user " . TESTS_USER);
         }
 
         self::$imap_ready = true;
-
-        self::purge_mailbox('INBOX');
-        self::ensure_mailbox('Archive', true);
-
-        return self::$imap_ready;
     }
 
     /**
@@ -185,9 +196,12 @@
  */
 class Selenium_Test extends PHPUnit_Extensions_Selenium2TestCase
 {
+    protected $login_data = null;
+
     protected function setUp()
     {
         $this->setBrowser(TESTS_BROWSER);
+        $this->login_data = array(TESTS_USER, TESTS_PASS);
 
         // Set root to our index.html, for better performance
         // See https://github.com/sebastianbergmann/phpunit-selenium/issues/217
@@ -195,8 +209,12 @@
         $this->setBrowserUrl($baseurl . '/tests/Selenium');
     }
 
-    protected function login()
+    protected function login($username = null, $password = null)
     {
+        if (!empty($username)) {
+            $this->login_data = array($username, $password);
+        }
+
         $this->go('mail', null, true);
     }
 
@@ -206,8 +224,8 @@
         $pass_input = $this->byCssSelector('form input[name="_pass"]');
         $submit     = $this->byCssSelector('form input[type="submit"]');
 
-        $user_input->value(TESTS_USER);
-        $pass_input->value(TESTS_PASS);
+        $user_input->value($this->login_data[0]);
+        $pass_input->value($this->login_data[1]);
 
         // submit login form
         $submit->click();

--
Gitblit v1.9.1