From 14d3f751021dff99aa4ed7643e2b722cd05e6886 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Mon, 22 Sep 2014 11:49:34 -0400 Subject: [PATCH] Fix for WebTest_Mailing_SpoolTest --- CRM/Mailing/BAO/Mailing.php | 2 +- tests/phpunit/CiviTest/CiviMailUtils.php | 48 ++++++++---------------- 2 files changed, 16 insertions(+), 34 deletions(-) diff --git a/CRM/Mailing/BAO/Mailing.php b/CRM/Mailing/BAO/Mailing.php index 6122848e73..15b5f15d9e 100644 --- a/CRM/Mailing/BAO/Mailing.php +++ b/CRM/Mailing/BAO/Mailing.php @@ -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, diff --git a/tests/phpunit/CiviTest/CiviMailUtils.php b/tests/phpunit/CiviTest/CiviMailUtils.php index bd9a5e0584..dcb166d842 100644 --- a/tests/phpunit/CiviTest/CiviMailUtils.php +++ b/tests/phpunit/CiviTest/CiviMailUtils.php @@ -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'); -- 2.25.1