Merge pull request #4664 from aydun/CRM-15681-master
[civicrm-core.git] / tests / phpunit / WebTest / Contact / AdvancedSearchTest.php
index 80e2b1ee33964b789a8b1683e5498119b95e7469..083bbe5de626b2fded129cf1e678f3f4ac0323c1 100644 (file)
@@ -1,9 +1,9 @@
 <?php
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.4                                                |
+ | CiviCRM version 4.5                                                |
  +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2013                                |
+ | Copyright CiviCRM LLC (c) 2004-2014                                |
  +--------------------------------------------------------------------+
  | This file is a part of CiviCRM.                                    |
  |                                                                    |
 */
 
 require_once 'CiviTest/CiviSeleniumTestCase.php';
+
+/**
+ * Class WebTest_Contact_AdvancedSearchTest
+ */
 class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
 
   protected function setUp() {
@@ -52,79 +56,61 @@ class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
     $this->createDetailContact($firstName);
 
     // go to group tab and add to new group
-    $this->click("css=li#tab_group a");
-    $this->waitForElementPresent("_qf_GroupContact_next");
+    $this->clickAjaxLink("css=li#tab_group a", "_qf_GroupContact_next");
     $this->select("group_id", "$groupName");
-    $this->click("_qf_GroupContact_next");
-    $this->waitForPageToLoad($this->getTimeoutMsec());
+    $this->clickAjaxLink("_qf_GroupContact_next");
+    $this->waitForText('crm-notification-container', "Contact has been added to '$groupName'");
 
     // go to tag tab and add to new tag
-    $this->click("css=li#tab_tag a");
-    $this->waitForElementPresent("css=div#tagtree");
-    $this->click("xpath=//ul/li/label[text()=\"$tagName\"]");
-    $this->waitForElementPresent("css=.success");
-
-    // is status message correct?
-    $this->waitForTextPresent("Saved");
-    $this->waitForText('crm-notification-container', "Saved");
-
-    // go to event tab and register for event ( auto add activity and contribution )
-    $this->click("css=li#tab_participant a");
-    $this->waitForElementPresent("link=Add Event Registration");
-    $this->click("link=Add Event Registration");
-    $this->waitForElementPresent("note");
-    // fall fundraiser dinner event label is variable
-    $this->select("event_id", "value=1");
+    $this->clickAjaxLink("css=li#tab_tag a", "css=div#tagtree");
+    $this->click("xpath=//ul/li/span/label[text()=\"$tagName\"]");
+    $this->checkCRMStatus();
+
+    // register for event ( auto add activity and contribution )
+    $this->clickPopupLink("link=Register for Event");
+    $this->waitForText('s2id_event_id', "- select event -");
+    $this->select2("event_id", "Fall Fundraiser Dinner");
     $this->waitForElementPresent("receipt_text");
-    $this->click("role_id[2]");
+    $this->multiselect2("role_id", array('Volunteer'));
+    // Select $100 fee
+    $this->click("css=input[data-amount=100]");
     $this->check("record_contribution");
     $this->waitForElementPresent("contribution_status_id");
     $this->select("payment_instrument_id", "Check");
     $this->type("check_number", "chqNo$firstName");
     $this->type("trxn_id", "trid$firstName");
-    $this->click("_qf_Participant_upload-bottom");
-    $this->waitForPageToLoad($this->getTimeoutMsec());
+    $this->clickAjaxLink("_qf_Participant_upload-bottom", "link=Add Event Registration");
     $this->waitForText('crm-notification-container', "Event registration for $firstName adv$firstName has been added");
 
-    // go to pledge tab and add pledge
-    $this->click("css=li#tab_pledge a");
-    $this->waitForElementPresent("link=Add Pledge");
-    $this->click("link=Add Pledge");
+    // Add pledge
+    $this->clickPopupLink("link=Add Pledge");
     $this->waitForElementPresent("contribution_page_id");
     $this->type("amount", "200");
     $this->type("installments", "5");
     $this->type("frequency_interval", "1");
     $this->select("frequency_unit", "month(s)");
-    $this->click("_qf_Pledge_upload-bottom");
-    $this->waitForPageToLoad($this->getTimeoutMsec());
-
+    $this->clickAjaxLink("_qf_Pledge_upload-bottom", "link=Add Pledge");
     $this->waitForText('crm-notification-container', "Pledge has been recorded and the payment schedule has been created.");
 
-    // go to Membership tab and add membership
-    $this->click("css=li#tab_member a");
-    $this->waitForElementPresent("link=Add Membership");
-    $this->clickLink("link=Add Membership");
+    // Add membership
+    $this->clickPopupLink("link=Add Membership", "_qf_Membership_cancel-bottom");
     //let the organisation be default (Default Organization)
     $this->select("membership_type_id[0]", "value=1");
     $this->click("membership_type_id[1]");
     $this->select("membership_type_id[1]", "Student");
     $this->type("source", "membership source$firstName");
-    $this->clickLink("_qf_Membership_upload-bottom");
-
+    $this->clickAjaxLink("_qf_Membership_upload-bottom");
     $this->waitForText('crm-notification-container', "Student membership for $firstName adv$firstName has been added");
 
-    // go to relationship tab and add relationship
-    $this->click("css=li#tab_rel a");
-    $this->waitForElementPresent("link=Add Relationship");
-    $this->click("link=Add Relationship");
-    $this->waitForElementPresent("_qf_Relationship_cancel");
-    $this->select("relationship_type_id", "Employee of");
-    $this->webtestFillAutocomplete("Default"); //default organization is provided as employer contact
-    $this->waitForElementPresent("details-save");
+    // Add relationship
+    $this->clickPopupLink("link=Add Relationship", "_qf_Relationship_cancel");
+    $this->select2("relationship_type_id", "Employee of");
+    $this->waitForElementPresent("xpath=//input[@id='related_contact_id'][@placeholder='- select organization -']");
+    $this->select2("related_contact_id", "Default", TRUE);
     $this->webtestFillDate("start_date", "-1 day");
     $this->webtestFillDate("end_date", "+1 day");
-    $this->clickLink("details-save");
-    $this->waitForText('crm-notification-container', "New relationship created.");
+    $this->clickAjaxLink('_qf_Relationship_upload-bottom', NULL);
+    $this->waitForText('crm-notification-container', "Relationship created.");
 
     //-------------- advance search --------------
 
@@ -143,7 +129,7 @@ class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
       'CiviContribute' => array('contribution_currency_type', 'addContributionSearchDetail'),
       'CiviEvent' => array('participant_fee_amount_high', 'addParticipantSearchDetail'),
       'CiviMember' => array('member_end_date_high', 'addMemberSearchDetail'),
-      'CiviPledge' => array('pledge_in_honor_of', 'addPledgeSearchDetail'),
+      'CiviPledge' => array('pledge_frequency_interval', 'addPledgeSearchDetail'),
       'relationship' => array("xpath=//div[@id='relationship']/table/tbody/tr//td/label[text()='Relationship Status']/../label[text()='All']", ''),
     );
 
@@ -187,11 +173,9 @@ class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
   function testActivitySearchByTypeTest() {
     $this->webtestLogin();
     $this->openCiviPage('contact/search/advanced', 'reset=1');
-    $this->click("activity");
-    $this->waitForElementPresent('activity_subject');
+    $this->clickAjaxLink("activity", 'activity_subject');
     $this->check("xpath=//div[@id='Activity']//div/label[text()='Tell a Friend']/../input");
-    $this->click("_qf_Advanced_refresh");
-    $this->waitForPageToLoad($this->getTimeoutMsec());
+    $this->clickLink("_qf_Advanced_refresh");
     $count = explode(" ", trim($this->getText("xpath=//div[@id='search-status']/table/tbody/tr/td")));
     $count = $count[0];
     $this->assertTrue(is_numeric($count), "The total count of search results not found");
@@ -213,7 +197,7 @@ class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
 
         //go to next page
         $this->click("xpath=//div[@class='crm-search-results']/div[@class='crm-pager']/span[@class='crm-pager-nav']/a[@title='next page']");
-        $this->waitForPageToLoad($this->getTimeoutMsec());
+        $this->waitForElementPresent("task");
         $j = $j + $subTotal;
       }
 
@@ -227,6 +211,9 @@ class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
   }
 
   //function to check match for sumbit Advance Search
+  /**
+   * @param string $firstName
+   */
   function submitSearch($firstName) {
     $this->clickLink("_qf_Advanced_refresh");
     // verify unique name
@@ -237,28 +224,42 @@ class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
     $this->click("xpath=//form[@id='Advanced']//div[2]/div/div[1]");
   }
 
-  // function to fill auto complete
-  function fillAutoComplete($text, $elementId) {
-    $this->click("$elementId");
-    $this->type("$elementId", "$text");
-    $this->typeKeys("$elementId", "$text");
-    $this->waitForElementPresent("css=div.ac_results li");
-    $this->click("css=div.ac_results li");
-    $this->assertContains($text, $this->getValue("$elementId"),
-      "autocomplete expected $text but didn’t find it in " . $this->getValue("$elementId")
-    );
+  /*
+   * Check for CRM-14952
+   */
+  function testStateSorting() {
+    $this->webtestLogin();
+    $this->openCiviPage('contact/search/advanced', 'reset=1', 'group');
+    $this->select2("group", "Newsletter", TRUE);
+    $this->select2("group", "Summer", TRUE);
+    $this->select2("group", "Advisory", TRUE);
+    $this->clickAjaxLink("location", 'country');
+    $this->select2("country", "United States", False);
+    $this->waitForElementPresent('state_province');
+    $this->multiselect2("state_province", array("Ohio", "New York", "New Mexico", "Connecticut", "Georgia", "New Jersey", "Texas"));
+    $this->clickLink("_qf_Advanced_refresh", "xpath=//div[@class='crm-search-results']//table/tbody/tr[1]/td[6]");
+
+    $stateBeforeSort = $this->getText("xpath=//div[@class='crm-search-results']//table/tbody/tr[1]/td[6]");
+    $this->click("xpath=//div[@class='crm-search-results']//table/thead/tr//th/a[contains(text(),'State')]");
+    $this->waitForElementPresent("xpath=//div[@class='crm-search-results']//table/thead/tr//th/a[contains(text(),'State')]");
+    $this->assertElementNotContainsText("xpath=//div[@class='crm-search-results']//table/tbody/tr[1]/td[6]", $stateBeforeSort);
   }
 
   // function to fill basic search detail
+  /**
+   * @param string $firstName
+   * @param string $groupName
+   * @param $tagName
+   */
   function addBasicSearchDetail($firstName, $groupName, $tagName) {
     // fill partial sort name
     $this->type("sort_name", "$firstName");
     // select subtype
-    $this->select("crmasmSelect0", "value=Individual\ 1Student");
+    $this->select("contact_type", "value=Individual\ 1Student");
     // select group
-    $this->select("crmasmSelect1", "label=$groupName");
+    $this->select("group", "label=$groupName");
     // select tag
-    $this->select("crmasmSelect3", "label=$tagName");
+    $this->select("contact_tags", "label=$tagName");
     // select prefered language
     $this->select("preferred_language", "value=en_US");
     // select privacy
@@ -272,10 +273,12 @@ class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
   }
 
   // function to fill address search block values in advance search
+  /**
+   * @param $firstName
+   */
   function addAddressSearchDetail($firstName) {
     // select location type (home and main)
-    $this->click("xpath=//div[@id='location']/table/tbody/tr[1]/td[1]//label[text()='Home']");
-    $this->click("xpath=//div[@id='location']/table/tbody/tr[1]/td[1]//label[text()='Main']");
+    $this->multiselect2('location_type', array('Home', 'Main'));
     // fill street address
     $this->type("street_address", "street 1 $firstName");
     // fill city
@@ -286,15 +289,19 @@ class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
     // select country
     $this->select("country", "United States");
     // select state-province
-    $this->select("state_province", "Alaska");
+    $this->waitForElementPresent('state_province');
+    $this->select2("state_province", "Alaska", TRUE);
   }
 
   // function to fill activity search block in advance search
+  /**
+   * @param $firstName
+   */
   function addActivitySearchDetail($firstName) {
     // check activity types
     $checkActivityTypes = array("Contribution", "Event Registration", "Membership Signup");
     foreach ($checkActivityTypes as $labels) {
-      $this->click("xpath=//div[@id='activity']/table/tbody/tr[1]/td[1]/div[1]//div/label[text()=\"$labels\"]");
+      $this->click("xpath=//div[@id='activity']/table/tbody/tr[2]/td[1]/div[1]//div/label[text()=\"$labels\"]");
     }
     // fill date range
     $this->select("activity_date_relative","value=0");
@@ -323,6 +330,9 @@ class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
   }
 
   //function to fill contribution search details
+  /**
+   * @param $firstName
+   */
   function addContributionSearchDetail($firstName) {
     // fill contribution date range
     $this->select("contribution_date_relative","value=0");
@@ -347,21 +357,24 @@ class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
   // function to fill participant search details
   function addParticipantSearchDetail() {
     // fill event name
-    $this->fillAutoComplete("Fall Fundraiser Dinner", "event_name");
+    $this->select2("event_id", "Fall Fundraiser Dinner");
     // fill event type
-    $this->fillAutoComplete("Fundraiser", "event_type");
+    $this->select2("event_type_id", "Fundraiser");
     // check participant status (registered)
     $this->click("xpath=//div[@id='participantForm']/table/tbody//tr/td/label[text()='Participant Status']/../div//div/label[text()='Registered']");
     // check participant role (Volunteer)
     $this->click("xpath=//div[@id='participantForm']/table/tbody//tr/td/label[text()='Participant Role']/../div//div/label[text()='Volunteer']");
     // fill participant fee level (couple)
-    $this->fillAutoComplete("Couple", "participant_fee_level");
+    $this->select2("participant_fee_id", "Couple");
     // fill amount range
     $this->type("participant_fee_amount_low", "1");
     $this->type("participant_fee_amount_high", "150");
   }
 
   // function to fill member search details
+  /**
+   * @param $firstName
+   */
   function addMemberSearchDetail($firstName) {
     // check membership type (Student)
     $this->click("xpath=//div[@id='memberForm']/table/tbody/tr[1]/td[1]/div[1]//div/label[text()='Student']");
@@ -386,6 +399,9 @@ class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
   }
 
   // function to fill member search details
+  /**
+   * @param $firstName
+   */
   function addPledgeSearchDetail($firstName) {
     // fill pledge schedule date range
     $this->select("pledge_payment_date_relative","value=0");
@@ -411,6 +427,9 @@ class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
   }
 
   // function to create contact with details (contact details, address, Constituent information ...)
+  /**
+   * @param null $firstName
+   */
   function createDetailContact($firstName = NULL) {
     if (!$firstName) {
       $firstName = substr(sha1(rand()), 0, 7);
@@ -425,7 +444,7 @@ class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
     $this->type("first_name", "$firstName");
     $this->type("middle_name", "mid$firstName");
     $this->type("last_name", "adv$firstName");
-    $this->select("contact_sub_type", "label=$Subtype");
+    $this->select("contact_sub_type", "label=$Subtype");
     $this->type("email_1_email", "$firstName@advsearch.co.in");
     $this->type("phone_1_phone", "123456789");
     $this->type("external_identifier", "extid$firstName");
@@ -477,8 +496,7 @@ class WebTest_Contact_AdvancedSearchTest extends CiviSeleniumTestCase {
     $this->webtestFillDate("deceased_date", "now");
 
     // save contact
-    $this->click("_qf_Contact_upload_view");
-    $this->waitForPageToLoad($this->getTimeoutMsec());
+    $this->clickLink("_qf_Contact_upload_view", 'css=.crm-summary-display_name');
     $this->assertElementContainsText('css=.crm-summary-display_name', "$firstName adv$firstName");
   }
 }