add missing comments - tests directory
[civicrm-core.git] / tests / phpunit / WebTest / Contact / AdvanceSearchPrivacyOptionsTest.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.5 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2014 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
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. |
13 | |
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. |
18 | |
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 +--------------------------------------------------------------------+
25 */
26
27 require_once 'CiviTest/CiviSeleniumTestCase.php';
28 class WebTest_Contact_AdvanceSearchPrivacyOptionsTest extends CiviSeleniumTestCase {
29
30 protected function setUp() {
31 parent::setUp();
32 }
33
34 function testSearchForPrivacyOptions() {
35 $this->webtestLogin();
36
37 $privacyOptions = array(
38 'dn_phone_mail' => array('do_not_phone', 'do_not_mail'),
39 'dn_phone_email' => array('do_not_phone', 'do_not_email'),
40 'dn_trade_sms' => array('do_not_trade', 'do_not_sms'),
41 );
42 $randString = substr(sha1(rand()), 0, 7);
43
44 $contactsReffOptions = array(
45 'dn_phone_mail' => array('first_name' => $randString . 'John', 'last_name' => $randString . 'Smith'),
46 'dn_phone_email' => array('first_name' => $randString . 'Jeff', 'last_name' => $randString . 'Adams'),
47 'dn_trade_sms' => array('first_name' => $randString . 'Rocky', 'last_name' => $randString . 'Stanley'),
48 );
49
50 //creating individuals
51 $this->_addIndividual($contactsReffOptions['dn_phone_mail']['first_name'], $contactsReffOptions['dn_phone_mail']['last_name'], $privacyOptions['dn_phone_mail']);
52 $this->_addIndividual($contactsReffOptions['dn_phone_email']['first_name'], $contactsReffOptions['dn_phone_email']['last_name'], $privacyOptions['dn_phone_email']);
53 $this->_addIndividual($contactsReffOptions['dn_trade_sms']['first_name'], $contactsReffOptions['dn_trade_sms']['last_name'], $privacyOptions['dn_trade_sms']);
54
55 //advance search for created contacts
56 $this->openCiviPage('contact/search/advanced', 'reset=1', '_qf_Advanced_refresh');
57 $allPrivacyOptions = array(
58 'do_not_phone',
59 'do_not_mail',
60 'do_not_email',
61 'do_not_sms',
62 'do_not_trade',
63 );
64
65 $this->_addPrivacyCriteria('include', $privacyOptions['dn_phone_mail'], 'OR', $allPrivacyOptions);
66 $this->click('_qf_Advanced_refresh');
67 $this->waitForPageToLoad($this->getTimeoutMsec());
68
69 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'])) {
70 $assertCheck = TRUE;
71 }
72 else {
73 $assertCheck = FALSE;
74 }
75 $this->assertTrue($assertCheck, 'Do not phone / mail assertion failed using criteria(include , OR )');
76 $this->_addPrivacyCriteria('exclude', $privacyOptions['dn_phone_mail'], 'OR', $allPrivacyOptions);
77 $this->click('_qf_Advanced_refresh');
78 $this->waitForPageToLoad($this->getTimeoutMsec());
79
80 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'])) {
81 $assertCheck = TRUE;
82 }
83 else {
84 $assertCheck = FALSE;
85 }
86 $this->assertTrue($assertCheck, 'Do not phone / mail assertion failed using criteria(exclude , OR )');
87
88 $this->_addPrivacyCriteria('include', $privacyOptions['dn_phone_mail'], 'AND', $allPrivacyOptions);
89 $this->click('_qf_Advanced_refresh');
90 $this->waitForPageToLoad($this->getTimeoutMsec());
91
92 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'])) {
93 $assertCheck = TRUE;
94 }
95 else {
96 $assertCheck = FALSE;
97 }
98 $this->assertTrue($assertCheck, 'Do not phone / mail assertion failed using criteria(include , AND )');
99
100 $this->_addPrivacyCriteria('exclude', $privacyOptions['dn_phone_mail'], 'AND', $allPrivacyOptions);
101 $this->click('_qf_Advanced_refresh');
102 $this->waitForPageToLoad($this->getTimeoutMsec());
103
104 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'])) {
105 $assertCheck = TRUE;
106 }
107 else {
108 $assertCheck = FALSE;
109 }
110 $this->assertTrue($assertCheck, 'Do not phone / mail assertion failed using criteria(exclude , AND )');
111 $this->_addPrivacyCriteria('include', $privacyOptions['dn_trade_sms'], 'AND', $allPrivacyOptions);
112 $this->click('_qf_Advanced_refresh');
113 $this->waitForPageToLoad($this->getTimeoutMsec());
114
115 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'])) {
116 $assertCheck = TRUE;
117 }
118 else {
119 $assertCheck = FALSE;
120 }
121 $this->assertTrue($assertCheck, 'Do not trade / sms assertion failed using criteria(include , AND )');
122 }
123
124 /**
125 * @param $inEx
126 * @param $privacyOptions
127 * @param $privacyOperator
128 * @param $allPrivacyOptions
129 */
130 function _addPrivacyCriteria($inEx, $privacyOptions, $privacyOperator, $allPrivacyOptions) {
131 $inExId = ($inEx == 'include') ? 'CIVICRM_QFID_2_privacy_toggle' : 'CIVICRM_QFID_1_privacy_toggle';
132 $this->click($inExId);
133 $this->select('privacy_operator', "{$privacyOperator}");
134 foreach ($privacyOptions as $privacyOption) {
135 $privacyOptionVal = $this->getOptionVal($privacyOption);
136
137 if (!$this->isElementPresent("xpath=//div[@id='s2id_privacy_options']//ul//li//div[text()='{$privacyOptionVal}']")) {
138 $this->select('privacy_options', "value={$privacyOption}");
139 $this->waitForElementPresent("xpath=//div[@id='s2id_privacy_options']//ul//li//div[text()='{$privacyOptionVal}']");
140 }
141 }
142
143 foreach ($allPrivacyOptions as $allPrivacyOption) {
144 if (!in_array($allPrivacyOption, $privacyOptions)) {
145 $privacyOptionVal = $this->getOptionVal($allPrivacyOption);
146 if ($this->isElementPresent("xpath=//div[@id='s2id_privacy_options']//ul//li//div[text()='{$privacyOptionVal}']")) {
147 $this->click("xpath=//div[@id='s2id_privacy_options']//ul//li//div[text()='{$privacyOptionVal}']/../a[@class='select2-search-choice-close']");
148 }
149 }
150 }
151 }
152
153 /**
154 * @param $firstName
155 * @param $lastName
156 *
157 * @return bool
158 */
159 function _searchSortNameCriteria($firstName, $lastName) {
160 //type in the criteria
161 $this->type("sort_name", "{$lastName}, {$firstName}");
162
163 $this->click("_qf_Advanced_refresh");
164
165 $this->waitForPageToLoad($this->getTimeoutMsec());
166
167 //return its presence
168 return $this->isElementPresent("xpath=//div[@class='crm-search-results']/table/tbody/tr/td[3]/a[text()='{$lastName}, {$firstName}']");
169 }
170
171 /**
172 * @param $privacyOption
173 *
174 * @return string
175 */
176 function getOptionVal($privacyOption) {
177 if ($privacyOption == 'do_not_phone') {
178 $privacyOptionVal = 'Do not phone';
179 }
180 elseif ($privacyOption == 'do_not_mail') {
181 $privacyOptionVal = 'Do not mail';
182 }
183 elseif ($privacyOption == 'do_not_email') {
184 $privacyOptionVal = 'Do not email';
185 }
186 elseif ($privacyOption == 'do_not_trade') {
187 $privacyOptionVal = 'Do not trade';
188 }
189 elseif ($privacyOption == 'do_not_sms') {
190 $privacyOptionVal = 'Do not sms';
191 }
192 return $privacyOptionVal;
193 }
194
195 /**
196 * @param $firstName
197 * @param $lastName
198 * @param $options
199 */
200 function _addIndividual($firstName, $lastName, $options) {
201
202 $this->openCiviPage('contact/add', 'reset=1&ct=Individual');
203
204 //fill in first name
205 $this->type("first_name", $firstName);
206
207 //fill in last name
208 $this->type("last_name", $lastName);
209
210 //fill in email
211 $this->type("email_1_email", "{$firstName}@{$lastName}.com");
212
213 //fill in phone
214 $this->type("phone_1_phone", "2222-4444");
215
216 foreach ($options as $option) {
217 //Select preferred method for Privacy
218 $this->click("privacy_{$option}");
219 }
220
221 // Clicking save.
222 $this->click("_qf_Contact_upload_view");
223 $this->waitForPageToLoad($this->getTimeoutMsec());
224 $this->waitForText('crm-notification-container', "{$firstName} {$lastName} has been created.");
225
226 }
227 }
228