3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.3 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2013 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License along with this program; if not, contact CiviCRM LLC |
21 | at info[AT]civicrm[DOT]org. If you have questions about the |
22 | GNU Affero General Public License or the licensing of CiviCRM, |
23 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
24 +--------------------------------------------------------------------+
28 require_once 'CiviTest/CiviSeleniumTestCase.php';
29 class WebTest_Contact_AdvanceSearchPrivacyOptionsTest
extends CiviSeleniumTestCase
{
31 protected function setUp() {
35 function testSearchForPrivacyOptions() {
36 // This is the path where our testing install resides.
37 // The rest of URL is defined in CiviSeleniumTestCase base class, in
39 $this->open($this->sboxPath
);
41 // Logging in. Remember to wait for page to load. In most cases,
42 // you can rely on 30000 as the value that allows your test to pass, however,
43 // sometimes your test might fail because of this. In such cases, it's better to pick one element
44 // somewhere at the end of page and use waitForElementPresent on it - this assures you, that whole
45 // page contents loaded and you can continue your test execution.
46 $this->webtestLogin();
48 $privacyOptions = array(
49 'dn_phone_mail' => array('do_not_phone', 'do_not_mail'),
50 'dn_phone_email' => array('do_not_phone', 'do_not_email'),
51 'dn_trade_sms' => array('do_not_trade', 'do_not_sms'),
53 $randString = substr(sha1(rand()), 0, 7);
55 $contactsReffOptions = array(
56 'dn_phone_mail' => array('first_name' => $randString . 'John', 'last_name' => $randString . 'Smith'),
57 'dn_phone_email' => array('first_name' => $randString . 'Jeff', 'last_name' => $randString . 'Adams'),
58 'dn_trade_sms' => array('first_name' => $randString . 'Rocky', 'last_name' => $randString . 'Stanley'),
61 //creating individuals
62 $this->_addIndividual($contactsReffOptions['dn_phone_mail']['first_name'], $contactsReffOptions['dn_phone_mail']['last_name'], $privacyOptions['dn_phone_mail']);
63 $this->_addIndividual($contactsReffOptions['dn_phone_email']['first_name'], $contactsReffOptions['dn_phone_email']['last_name'], $privacyOptions['dn_phone_email']);
64 $this->_addIndividual($contactsReffOptions['dn_trade_sms']['first_name'], $contactsReffOptions['dn_trade_sms']['last_name'], $privacyOptions['dn_trade_sms']);
66 //advance search for created contacts
67 $this->open($this->sboxPath
. "civicrm/contact/search/advanced?reset=1");
68 $this->waitForElementPresent('_qf_Advanced_refresh');
69 $allPrivacyOptions = array(
77 $this->_addPrivacyCriteria('include', $privacyOptions['dn_phone_mail'], 'OR', $allPrivacyOptions);
78 $this->click('_qf_Advanced_refresh');
79 $this->waitForPageToLoad($this->getTimeoutMsec());
81 if ($this->_searchSortNameCriteria($contactsReffOptions['dn_phone_mail']['first_name'], $contactsReffOptions['dn_phone_mail']['last_name']) && $this->_searchSortNameCriteria($contactsReffOptions['dn_phone_mail']['first_name'], $contactsReffOptions['dn_phone_mail']['last_name']) && !$this->_searchSortNameCriteria($contactsReffOptions['dn_trade_sms']['first_name'], $contactsReffOptions['dn_trade_sms']['last_name'])) {
87 $this->assertTrue($assertCheck, 'Do not phone / mail assertion failed using criteria(include , OR )');
88 $this->_addPrivacyCriteria('exclude', $privacyOptions['dn_phone_mail'], 'OR', $allPrivacyOptions);
89 $this->click('_qf_Advanced_refresh');
90 $this->waitForPageToLoad($this->getTimeoutMsec());
93 if (!$this->_searchSortNameCriteria($contactsReffOptions['dn_phone_mail']['first_name'], $contactsReffOptions['dn_phone_mail']['last_name']) && $this->_searchSortNameCriteria($contactsReffOptions['dn_trade_sms']['first_name'], $contactsReffOptions['dn_trade_sms']['last_name'])) {
99 $this->assertTrue($assertCheck, 'Do not phone / mail assertion failed using criteria(exclude , OR )');
101 $this->_addPrivacyCriteria('include', $privacyOptions['dn_phone_mail'], 'AND', $allPrivacyOptions);
102 $this->click('_qf_Advanced_refresh');
103 $this->waitForPageToLoad($this->getTimeoutMsec());
105 if ($this->_searchSortNameCriteria($contactsReffOptions['dn_phone_mail']['first_name'], $contactsReffOptions['dn_phone_mail']['last_name']) && !$this->_searchSortNameCriteria($contactsReffOptions['dn_phone_email']['first_name'], $contactsReffOptions['dn_phone_email']['last_name']) && !$this->_searchSortNameCriteria($contactsReffOptions['dn_trade_sms']['first_name'], $contactsReffOptions['dn_trade_sms']['last_name'])) {
109 $assertCheck = FALSE;
111 $this->assertTrue($assertCheck, 'Do not phone / mail assertion failed using criteria(include , AND )');
113 $this->_addPrivacyCriteria('exclude', $privacyOptions['dn_phone_mail'], 'AND', $allPrivacyOptions);
114 $this->click('_qf_Advanced_refresh');
115 $this->waitForPageToLoad($this->getTimeoutMsec());
117 if (!$this->_searchSortNameCriteria($contactsReffOptions['dn_phone_mail']['first_name'], $contactsReffOptions['dn_phone_mail']['last_name']) && $this->_searchSortNameCriteria($contactsReffOptions['dn_trade_sms']['first_name'], $contactsReffOptions['dn_trade_sms']['last_name'])) {
121 $assertCheck = FALSE;
123 $this->assertTrue($assertCheck, 'Do not phone / mail assertion failed using criteria(exclude , AND )');
124 $this->_addPrivacyCriteria('include', $privacyOptions['dn_trade_sms'], 'AND', $allPrivacyOptions);
125 $this->click('_qf_Advanced_refresh');
126 $this->waitForPageToLoad($this->getTimeoutMsec());
128 if (!$this->_searchSortNameCriteria($contactsReffOptions['dn_phone_mail']['first_name'], $contactsReffOptions['dn_phone_mail']['last_name']) && !$this->_searchSortNameCriteria($contactsReffOptions['dn_phone_email']['first_name'], $contactsReffOptions['dn_phone_email']['last_name']) && $this->_searchSortNameCriteria($contactsReffOptions['dn_trade_sms']['first_name'], $contactsReffOptions['dn_trade_sms']['last_name'])) {
132 $assertCheck = FALSE;
134 $this->assertTrue($assertCheck, 'Do not trade / sms assertion failed using criteria(include , AND )');
137 function _addPrivacyCriteria($inEx, $privacyOptions, $privacyOperator, $allPrivacyOptions) {
138 $inExId = ($inEx == 'include') ?
'CIVICRM_QFID_2_privacy_toggle' : 'CIVICRM_QFID_1_privacy_toggle';
139 $this->click($inExId);
140 $this->select('privacy_operator', "{$privacyOperator}");
141 foreach ($privacyOptions as $privacyOption) {
142 $privacyOptionVal = $this->getOptionVal($privacyOption);
144 if (!$this->isElementPresent("xpath=//ul[@id='crmasmList4']//li//span[text()='{$privacyOptionVal}']")) {
145 $this->select('crmasmSelect4', "value={$privacyOption}");
146 $this->waitForElementPresent("xpath=//ul[@id='crmasmList4']//li//span[text()='{$privacyOptionVal}']");
150 foreach ($allPrivacyOptions as $allPrivacyOption) {
151 if (!in_array($allPrivacyOption, $privacyOptions)) {
152 $privacyOptionVal = $this->getOptionVal($allPrivacyOption);
153 if ($this->isElementPresent("xpath=//ul[@id='crmasmList4']//li//span[text()='{$privacyOptionVal}']")) {
154 $this->click("xpath=//ul[@id='crmasmList4']//li//span[text()='{$privacyOptionVal}']/../a[@class='crmasmListItemRemove']");
160 function _searchSortNameCriteria($firstName, $lastName) {
161 //type in the criteria
162 $this->type("sort_name", "{$lastName}, {$firstName}");
163 $this->click("_qf_Advanced_refresh");
164 $this->waitForPageToLoad($this->getTimeoutMsec());
166 //return its presence
167 return $this->isElementPresent("xpath=//div[@class='crm-search-results']/table/tbody/tr/td[3]/a[text()='{$lastName}, {$firstName}']");
170 function getOptionVal($privacyOption) {
171 if ($privacyOption == 'do_not_phone') {
172 $privacyOptionVal = 'Do not phone';
174 elseif ($privacyOption == 'do_not_mail') {
175 $privacyOptionVal = 'Do not mail';
177 elseif ($privacyOption == 'do_not_email') {
178 $privacyOptionVal = 'Do not email';
180 elseif ($privacyOption == 'do_not_trade') {
181 $privacyOptionVal = 'Do not trade';
183 elseif ($privacyOption == 'do_not_sms') {
184 $privacyOptionVal = 'Do not sms';
186 return $privacyOptionVal;
189 function _addIndividual($firstName, $lastName, $options) {
191 $this->open($this->sboxPath
. "civicrm/contact/add?reset=1&ct=Individual");
194 $this->type("first_name", $firstName);
197 $this->type("last_name", $lastName);
200 $this->type("email_1_email", "{$firstName}@{$lastName}.com");
203 $this->type("phone_1_phone", "2222-4444");
205 foreach ($options as $option) {
206 //Select preferred method for Privacy
207 $this->click("privacy_{$option}");
211 $this->click("_qf_Contact_upload_view");
212 $this->waitForPageToLoad($this->getTimeoutMsec());
213 $this->assertTrue($this->isTextPresent("{$firstName} {$lastName} has been created."));