Ian province abbreviation patch - issue 724
[civicrm-core.git] / tests / phpunit / WebTest / Mailing / MailingTest.php
index 1ad127ecb4b0966cd73aaa7a0ba99cfd4d4ebf58..7f067fc7f517d47a70d2336cc51d7c42448e959c 100644 (file)
@@ -1,9 +1,9 @@
 <?php
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.6                                                |
+ | CiviCRM version 4.7                                                |
  +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2014                                |
+ | Copyright CiviCRM LLC (c) 2004-2015                                |
  +--------------------------------------------------------------------+
  | This file is a part of CiviCRM.                                    |
  |                                                                    |
@@ -22,7 +22,7 @@
  | GNU Affero General Public License or the licensing of CiviCRM,     |
  | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
  +--------------------------------------------------------------------+
-*/
+ */
 
 require_once 'CiviTest/CiviSeleniumTestCase.php';
 
@@ -78,60 +78,72 @@ class WebTest_Mailing_MailingTest extends CiviSeleniumTestCase {
     // configure default mail-box
     $this->setupDefaultMailbox();
 
-    $this->openCiviPage("mailing/send", "reset=1", "_qf_Group_cancel");
+    $this->openCiviPage("a/#/mailing/new");
 
     //-------select recipients----------
+    $tokens = ' {domain.address}{action.optOutUrl}';
 
     // fill mailing name
     $mailingName = substr(sha1(rand()), 0, 7);
-    $this->type("name", "Mailing $mailingName Webtest");
+    $this->waitForElementPresent("xpath=//input[@name='mailingName']");
+    $this->type("xpath=//input[@name='mailingName']", "Mailing $mailingName Webtest");
 
     // Add the test mailing group
-    $this->select("includeGroups", "$groupName");
+    $this->select2("s2id_crmUiId_8", $groupName, TRUE);
 
-    // click next
-    $this->clickLink("_qf_Group_next", "_qf_Settings_cancel", FALSE);
+    // do check count for Recipient
+    $this->waitForTextPresent("~1 recipient");
 
-    //--------track and respond----------
+    // fill subject for mailing
+    $this->type("xpath=//input[@name='subject']", "Test subject {$mailingName} for Webtest");
 
-    // check for default settings options
-    $this->assertChecked("url_tracking");
-    $this->assertChecked("open_tracking");
+    // HTML format message
+    $HTMLMessage = "This is HTML formatted content for Mailing {$mailingName} Webtest.";
+    $this->fillRichTextField("crmUiId_1", $HTMLMessage . $tokens);
 
-    // do check count for Recipient
-    $this->assertElementContainsText('css=.messages', "Total Recipients: 1");
+    // FIXME: Selenium can't access content in an iframe
+    //$this->click("xpath=//div[@class='preview-popup']//a[text()='Preview as HTML']");
+    //$this->waitForTextPresent($HTMLMessage);
+    //$this->waitForAjaxContent();
+    //$this->click("xpath=//button[@title='Close']");
 
-    // no need tracking for this test
+    // Open Plain-text Format pane and type text format msg
+    $this->click("//div[starts-with(text(),'Plain Text')]");
+    $this->type("xpath=//*[@name='body_text']", "This is text formatted content for Mailing {$mailingName} Webtest.$tokens");
 
-    // click next with default settings
-    $this->clickLink("_qf_Settings_next", "_qf_Upload_cancel");
+    $this->click("xpath=//div[@class='preview-popup']//a[text()='Preview as Plain Text']");
+    $this->waitForTextPresent("This is text formatted content for Mailing {$mailingName} Webtest.");
+    $this->waitForAjaxContent();
+    $this->click("xpath=//button[@title='Close']");
 
-    //--------Mailing content------------
-    // let from email address be default
+    // select default header and footer ( with label )
+    $this->click("xpath=//ul/li/a[text()='Header and Footer']");
+    $this->select2("s2id_crmUiId_10", "Mailing Header");
+    $this->select2("s2id_crmUiId_11", "Mailing Footer");
 
-    // fill subject for mailing
-    $this->type("subject", "Test subject {$mailingName} for Webtest");
+    //--------track and respond----------
 
-    // check for default option enabled
-    $this->assertChecked("CIVICRM_QFID_1_upload_type");
+    // check for default settings options
+    $this->click("xpath=//ul/li/a[text()='Tracking']");
+    $this->assertChecked("url_tracking");
+    $this->assertChecked("open_tracking");
 
-    // HTML format message
-    $HTMLMessage = "This is HTML formatted content for Mailing {$mailingName} Webtest.";
-    $this->fillRichTextField("html_message", $HTMLMessage);
+    // click next with default settings
+    $this->click("xpath=//div[@class='crm-wizard-buttons']/button[text()='Next']");
 
-    // Open Plain-text Format pane and type text format msg
-    $this->click("//fieldset[@id='compose_id']/div[2]/div[1]");
-    $this->type("text_message", "This is text formatted content for Mailing {$mailingName} Webtest.");
+    $this->waitForTextPresent("Mailing $mailingName Webtest");
+    $this->click("xpath=//div[@class='content']//a[text()='~1 recipient']");
+    $this->webtestVerifyTabularData(array("$firstName Mailson" => "mailino$firstName@mailson.co.in"));
+    $this->click("xpath=//button[@title='Close']");
+    $this->waitForTextPresent("(Include: $groupName)");
 
-    // select default header and footer ( with label )
-    $this->select("header_id", "label=Mailing Header");
-    $this->select("footer_id", "label=Mailing Footer");
+    //----------Schedule or Send------------
 
-    // do check count for Recipient
-    $this->assertElementContainsText('css=.messages', "Total Recipients: 1");
+    // do check for default option enabled
+    $this->assertChecked("xpath=//input[@id='schedule-send-now']");
 
     // click next with nominal content
-    $this->clickLink("_qf_Upload_upload", "_qf_Test_cancel");
+    $this->click("xpath=//center/a/div[text()='Submit Mailing']");
 
     //---------------Test------------------
 
@@ -150,27 +162,10 @@ class WebTest_Mailing_MailingTest extends CiviSeleniumTestCase {
 
     ////////
 
-    // do check count for Recipient
-    $this->assertElementContainsText('css=.messages', "Total Recipients: 1");
-
-    // click next
-    $this->clickLink("_qf_Test_next", "_qf_Schedule_cancel");
-
-    //----------Schedule or Send------------
-
-    // do check for default option enabled
-    $this->assertChecked("now");
-
-    // do check count for Recipient
-    $this->assertElementContainsText('css=.messages', "Total Recipients: 1");
-
-    // finally schedule the mail by clicking submit
-    $this->clickLink("_qf_Schedule_next");
-
     //----------end New Mailing-------------
 
     //check redirected page to Scheduled and Sent Mailings and  verify for mailing name
-    $this->assertElementContainsText('page-title', "Find Mailings");
+    $this->waitForTextPresent("Find Mailings");
     $this->assertElementContainsText("xpath=//table[@class='selector row-highlight']/tbody//tr//td", "Mailing $mailingName Webtest");
 
     //--------- mail delivery verification---------
@@ -214,10 +209,10 @@ class WebTest_Mailing_MailingTest extends CiviSeleniumTestCase {
     $this->clickLink("link=Successful Deliveries");
 
     // check for open page
-    $this->assertElementContainsText('page-title', "Successful Deliveries");
+    $this->waitForTextPresent("Successful Deliveries");
 
     // verify email
-    $this->verifyText("xpath=//table[@id='mailing_event']/tbody//tr/td[2]", preg_quote("mailino$firstName@mailson.co.in"));
+    $this->verifyText("xpath=//table[@id='mailing_event']/tbody//tr/td[3]", preg_quote("mailino$firstName@mailson.co.in"));
 
     $eventQueue = new CRM_Mailing_Event_DAO_Queue();
     $eventQueue->contact_id = $contactId;
@@ -258,7 +253,7 @@ class WebTest_Mailing_MailingTest extends CiviSeleniumTestCase {
     //------end delivery verification---------
 
     // //------ check with unsubscribe -------
-    // // FIX ME: there is an issue with DSN setting for Webtest, need to handle by seperate DSN setting for Webtests
+    // // FIX ME: there is an issue with DSN setting for Webtest, need to handle by separate DSN setting for Webtests
     // // build unsubscribe link
     // require_once 'CRM/Mailing/Event/DAO/Queue.php';
     // $eventQueue = new CRM_Mailing_Event_DAO_Queue( );
@@ -336,79 +331,77 @@ class WebTest_Mailing_MailingTest extends CiviSeleniumTestCase {
     $this->select('protocol', 'value=1');
     $this->clickLink('_qf_MailSettings_next-bottom');
 
-    // Go to Schedule and Send Mailing form
-    $this->openCiviPage('mailing/send', 'reset=1', '_qf_Group_cancel');
+    $this->openCiviPage("a/#/mailing/new");
 
     //-------select recipients----------
+    $tokens = ' {domain.address}{action.optOutUrl}';
 
     // fill mailing name
     $mailingName = substr(sha1(rand()), 0, 7);
-    $this->type("name", "Mailing $mailingName Webtest");
+    $this->waitForElementPresent("xpath=//input[@name='mailingName']");
+    $this->type("xpath=//input[@name='mailingName']", "Mailing $mailingName Webtest");
 
     // Add the test mailing group
-    $this->select("includeGroups", "$groupName");
-
-    // click next
-    $this->click("_qf_Group_next");
-    $this->waitForElementPresent("_qf_Settings_cancel");
-
-    //--------track and respond----------
-
-    // check for default settings options
-    $this->assertChecked("url_tracking");
-    $this->assertChecked("open_tracking");
+    $this->select2("s2id_crmUiId_8", $groupName, TRUE);
 
     // do check count for Recipient
-    $this->assertElementContainsText('css=.messages', "Total Recipients: 1");
-
-    // click next with default settings
-    $this->clickLink("_qf_Settings_next");
+    $this->waitForTextPresent("~1 recipient");
 
     // fill subject for mailing
-    $this->type("subject", "Test subject {$mailingName} for Webtest");
-
-    // check for default option enabled
-    $this->assertChecked("CIVICRM_QFID_1_upload_type");
+    $this->type("xpath=//input[@name='subject']", "Test subject {$mailingName} for Webtest");
 
     // HTML format message
     $HTMLMessage = "This is HTML formatted content for Mailing {$mailingName} Webtest.";
-    $this->fillRichTextField("html_message", $HTMLMessage);
+    $this->fillRichTextField("crmUiId_1", $HTMLMessage . $tokens);
+
+    // FIXME: Selenium can't access content in an iframe
+    //$this->click("xpath=//div[@class='preview-popup']//a[text()='Preview as HTML']");
+    //$this->waitForElementPresent($HTMLMessage);
+    //$this->waitForAjaxContent();
+    //$this->click("xpath=//button[@title='Close']");
 
     // Open Plain-text Format pane and type text format msg
-    $this->click("//fieldset[@id='compose_id']/div[2]/div[1]");
-    $this->type("text_message", "This is text formatted content for Mailing {$mailingName} Webtest.");
+    $this->click("//div[starts-with(text(),'Plain Text')]");
+    $this->type("xpath=//*[@name='body_text']", "This is text formatted content for Mailing {$mailingName} Webtest.$tokens");
+
+    $this->click("xpath=//div[@class='preview-popup']//a[text()='Preview as Plain Text']");
+    $this->waitForTextPresent("This is text formatted content for Mailing {$mailingName} Webtest.");
+    $this->waitForAjaxContent();
+    $this->click("xpath=//button[@title='Close']");
 
     // select default header and footer ( with label )
-    $this->select("header_id", "label=Mailing Header");
-    $this->select("footer_id", "label=Mailing Footer");
+    $this->click("xpath=//ul/li/a[text()='Header and Footer']");
+    $this->select2("s2id_crmUiId_10", "Mailing Header");
+    $this->select2("s2id_crmUiId_11", "Mailing Footer");
 
-    // do check count for Recipient
-    $this->assertElementContainsText('css=.messages', "Total Recipients: 1");
+    //--------track and respond----------
 
-    // click next with nominal content
-    $this->clickLink("_qf_Upload_upload", "_qf_Test_cancel");
+    // check for default settings options
+    $this->click("xpath=//ul/li/a[text()='Tracking']");
+    $this->assertChecked("url_tracking");
+    $this->assertChecked("open_tracking");
 
-    // do check count for Recipient
-    $this->assertElementContainsText('css=.messages', "Total Recipients: 1");
+    // click next with default settings
+    $this->click("xpath=//div[@class='crm-wizard-buttons']/button[text()='Next']");
 
-    // click next
-    $this->clickLink("_qf_Test_next", "_qf_Schedule_cancel");
+    $this->waitForTextPresent("Mailing $mailingName Webtest");
+    $this->click("xpath=//div[@class='content']//a[text()='~1 recipient']");
+    $this->webtestVerifyTabularData(array("$firstName Mailson" => "mailino$firstName@mailson.co.in"));
+    $this->click("xpath=//button[@title='Close']");
+    $this->waitForTextPresent("(Include: $groupName)");
 
     //----------Schedule or Send------------
 
     // do check for default option enabled
-    $this->assertChecked("now");
+    $this->assertChecked("xpath=//input[@id='schedule-send-now']");
 
-    // do check count for Recipient
-    $this->assertElementContainsText('css=.messages', "Total Recipients: 1");
-
-    // finally schedule the mail by clicking submit
-    $this->clickLink("_qf_Schedule_next");
+    // click next with nominal content
+    $this->click("xpath=//center/a/div[text()='Submit Mailing']");
 
     //----------end New Mailing-------------
 
     //check redirected page to Scheduled and Sent Mailings and  verify for mailing name
-    $this->assertElementContainsText('page-title', "Find Mailings");
+    $this->waitForTextPresent("Find Mailings");
     $this->assertElementContainsText("xpath=//table[@class='selector row-highlight']/tbody//tr//td", "Mailing $mailingName Webtest");
 
     // directly send schedule mailing -- not working right now
@@ -558,13 +551,13 @@ class WebTest_Mailing_MailingTest extends CiviSeleniumTestCase {
     foreach ($dataToCheck as $key => $value) {
       if ($entity == 'report') {
         if ($key == 'report_name') {
-          $this->assertElementContainsText('page-title', "{$value}");
+          $this->waitForTextPresent("{$value}");
           continue;
         }
         $this->assertTrue($this->isElementPresent("xpath=//form//div[3]/table/tbody//tr/th[contains(text(),'{$key}')]/../td[contains(text(),'{$value}')]"), "Criteria check for {$key} failed for Report for {$summaryInfo}");
       }
       else {
-        $this->assertElementContainsText('page-title', "Advanced Search");
+        $this->waitForTextPresent("Advanced Search");
         $assertedValue = $this->isElementPresent("xpath=//div[@class='crm-results-block']//div[@class='qill'][contains(text(),'{$key} {$value}')]");
         if (!$assertedValue) {
           $assertedValue = $this->isTextPresent("{$key} {$value}");