Fix for WebTest_Mailing_SpoolTest
authorColeman Watts <coleman@civicrm.org>
Mon, 22 Sep 2014 15:49:34 +0000 (11:49 -0400)
committerColeman Watts <coleman@civicrm.org>
Mon, 22 Sep 2014 15:49:34 +0000 (11:49 -0400)
CRM/Mailing/BAO/Mailing.php
tests/phpunit/CiviTest/CiviMailUtils.php

index 6122848e7335bba2346168cd02f22f73ecc19916..15b5f15d9ed98262a9d989ec685d5c1f50e1fb53 100644 (file)
@@ -1108,7 +1108,7 @@ ORDER BY   civicrm_email.is_bulkmail DESC
    *
    * @param null $replyToEmail
    *
-   * @return object               The mail object
+   * @return Mail_mime               The mail object
    * @access public
    */
   public function &compose($job_id, $event_queue_id, $hash, $contactId,
index bd9a5e05843b66286678938d349647df09667f7f..dcb166d84275ed6fbbaf5b5d471e380cbab5a48b 100644 (file)
@@ -61,14 +61,13 @@ class CiviMailUtils extends PHPUnit_Framework_TestCase {
   /**
    * Constructor
    *
-   * @param $unit_test object The currently running test
+   * @param $unit_test CiviSeleniumTestCase The currently running test
    * @param $startImmediately bool Start writing to db now or wait until start() is called
    */
   function __construct(&$unit_test, $startImmediately = TRUE) {
-    $this->_ut = $unit_test;
-
     // Check if running under webtests or not
     if (is_subclass_of($unit_test, 'CiviSeleniumTestCase')) {
+      $this->_ut = $unit_test;
       $this->_webtest = TRUE;
     }
 
@@ -83,15 +82,13 @@ class CiviMailUtils extends PHPUnit_Framework_TestCase {
   function start() {
     if ($this->_webtest) {
       // Change outbound mail setting
-      $this->_ut->open($this->_ut->sboxPath . "civicrm/admin/setting/smtp?reset=1");
-      $this->_ut->waitForElementPresent("_qf_Smtp_next");
+      $this->_ut->openCiviPage('admin/setting/smtp', "reset=1", "_qf_Smtp_next");
 
       // First remember the current setting
       $this->_outBound_option = $this->getSelectedOutboundOption();
 
       $this->_ut->click('xpath=//input[@name="outBound_option" and @value="' . CRM_Mailing_Config::OUTBOUND_OPTION_REDIRECT_TO_DB . '"]');
-      $this->_ut->click("_qf_Smtp_next");
-      $this->_ut->waitForPageToLoad("30000");
+      $this->_ut->clickLink("_qf_Smtp_next");
 
       // Is there supposed to be a status message displayed when outbound email settings are changed?
       // assert something?
@@ -120,12 +117,10 @@ class CiviMailUtils extends PHPUnit_Framework_TestCase {
 
   function stop() {
     if ($this->_webtest) {
-
-      $this->_ut->open($this->_ut->sboxPath . "civicrm/admin/setting/smtp?reset=1");
-      $this->_ut->waitForElementPresent("_qf_Smtp_next");
+      // Change outbound mail setting
+      $this->_ut->openCiviPage('admin/setting/smtp', "reset=1", "_qf_Smtp_next");
       $this->_ut->click('xpath=//input[@name="outBound_option" and @value="' . $this->_outBound_option . '"]');
-      $this->_ut->click("_qf_Smtp_next");
-      $this->_ut->waitForPageToLoad("30000");
+      $this->_ut->clickLink("_qf_Smtp_next");
 
       // Is there supposed to be a status message displayed when outbound email settings are changed?
       // assert something?
@@ -154,34 +149,21 @@ class CiviMailUtils extends PHPUnit_Framework_TestCase {
   function getMostRecentEmail($type = 'raw') {
     $msg = '';
 
-    // Check if running under webtests or not
     if ($this->_webtest) {
-
-      $this->_ut->open($this->_ut->sboxPath . 'civicrm/mailing/browse/archived?reset=1');
       // I don't understand but for some reason we have to load the page twice for a recent mailing to appear.
-      $this->_ut->waitForPageToLoad("30000");
-      $this->_ut->open($this->_ut->sboxPath . 'civicrm/mailing/browse/archived?reset=1');
-      $this->_ut->waitForElementPresent('css=td.crm-mailing-name');
-
+      $this->_ut->openCiviPage('mailing/browse/archived', 'reset=1');
+      $this->_ut->openCiviPage('mailing/browse/archived', 'reset=1', 'css=td.crm-mailing-name');
+    }
+    // We can't fetch mailing headers from webtest so we'll only try if the format is raw
+    if ($this->_webtest && $type == 'raw') {
       // This should select the first "Report" link in the table, which is sorted by Completion Date descending, so in theory is the most recent email. Not sure of a more robust way at the moment.
       $this->_ut->clickLink('xpath=//tr[contains(@id, "crm-mailing_")]//a[text()="Report"]');
 
       // Also not sure how robust this is, but there isn't a good
       // identifier for this link either.
       $this->_ut->waitForElementPresent('xpath=//a[contains(text(), "View complete message")]');
-      $this->_ut->clickLinkSuppressPopup('xpath=//a[contains(text(), "View complete message")]', NULL);
-      /*
-       * FIXME:
-       *
-       * Argh.
-       * getBodyText() doesn't work because you can't get the actual html, just the rendered version.
-       * getHtmlSource() doesn't work because it sees email addresses as html tags and inserts its own closing tags.
-       *
-       * At the moment the combination of escaping just the headers in CRM_Mailing_BAO_Spool plus using getBodyText() works well enough to do basic unit testing and also not screw up the display in the actual UI.
-       */
-      //$msg = $this->_ut->getHtmlSource();
-      $msg = $this->_ut->getBodyText();
-
+      $this->_ut->clickAjaxLink('xpath=//a[contains(text(), "View complete message")]', NULL);
+      $msg = $this->_ut->getText('css=.ui-dialog-content.crm-ajax-container');
     }
     else {
       $dao = CRM_Core_DAO::executeQuery('SELECT headers, body FROM civicrm_mailing_spool ORDER BY id DESC LIMIT 1');
@@ -323,7 +305,7 @@ class CiviMailUtils extends PHPUnit_Framework_TestCase {
    * @return ezcMail
    */
   private function convertToEzc($msg) {
-    $set = new ezcMailVariableSet($msg);print_r($msg);
+    $set = new ezcMailVariableSet($msg);
     $parser = new ezcMailParser();
     $mail = $parser->parseMail($set);
     $this->_ut->assertNotEmpty($mail, 'Cannot parse mail');