Import from SVN (r45945, r596)
[civicrm-core.git] / tests / phpunit / WebTest / Contact / AdvanceSearchPrivacyOptionsTest.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.3 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2013 |
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
28 require_once 'CiviTest/CiviSeleniumTestCase.php';
29 class WebTest_Contact_AdvanceSearchPrivacyOptionsTest extends CiviSeleniumTestCase {
30
31 protected function setUp() {
32 parent::setUp();
33 }
34
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
38 // class attributes.
39 $this->open($this->sboxPath);
40
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();
47
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'),
52 );
53 $randString = substr(sha1(rand()), 0, 7);
54
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'),
59 );
60
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']);
65
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(
70 'do_not_phone',
71 'do_not_mail',
72 'do_not_email',
73 'do_not_sms',
74 'do_not_trade',
75 );
76
77 $this->_addPrivacyCriteria('include', $privacyOptions['dn_phone_mail'], 'OR', $allPrivacyOptions);
78 $this->click('_qf_Advanced_refresh');
79 $this->waitForPageToLoad($this->getTimeoutMsec());
80
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'])) {
82 $assertCheck = TRUE;
83 }
84 else {
85 $assertCheck = FALSE;
86 }
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());
91
92
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'])) {
94 $assertCheck = TRUE;
95 }
96 else {
97 $assertCheck = FALSE;
98 }
99 $this->assertTrue($assertCheck, 'Do not phone / mail assertion failed using criteria(exclude , OR )');
100
101 $this->_addPrivacyCriteria('include', $privacyOptions['dn_phone_mail'], 'AND', $allPrivacyOptions);
102 $this->click('_qf_Advanced_refresh');
103 $this->waitForPageToLoad($this->getTimeoutMsec());
104
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'])) {
106 $assertCheck = TRUE;
107 }
108 else {
109 $assertCheck = FALSE;
110 }
111 $this->assertTrue($assertCheck, 'Do not phone / mail assertion failed using criteria(include , AND )');
112
113 $this->_addPrivacyCriteria('exclude', $privacyOptions['dn_phone_mail'], 'AND', $allPrivacyOptions);
114 $this->click('_qf_Advanced_refresh');
115 $this->waitForPageToLoad($this->getTimeoutMsec());
116
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'])) {
118 $assertCheck = TRUE;
119 }
120 else {
121 $assertCheck = FALSE;
122 }
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());
127
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'])) {
129 $assertCheck = TRUE;
130 }
131 else {
132 $assertCheck = FALSE;
133 }
134 $this->assertTrue($assertCheck, 'Do not trade / sms assertion failed using criteria(include , AND )');
135 }
136
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);
143
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}']");
147 }
148 }
149
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']");
155 }
156 }
157 }
158 }
159
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());
165
166 //return its presence
167 return $this->isElementPresent("xpath=//div[@class='crm-search-results']/table/tbody/tr/td[3]/a[text()='{$lastName}, {$firstName}']");
168 }
169
170 function getOptionVal($privacyOption) {
171 if ($privacyOption == 'do_not_phone') {
172 $privacyOptionVal = 'Do not phone';
173 }
174 elseif ($privacyOption == 'do_not_mail') {
175 $privacyOptionVal = 'Do not mail';
176 }
177 elseif ($privacyOption == 'do_not_email') {
178 $privacyOptionVal = 'Do not email';
179 }
180 elseif ($privacyOption == 'do_not_trade') {
181 $privacyOptionVal = 'Do not trade';
182 }
183 elseif ($privacyOption == 'do_not_sms') {
184 $privacyOptionVal = 'Do not sms';
185 }
186 return $privacyOptionVal;
187 }
188
189 function _addIndividual($firstName, $lastName, $options) {
190
191 $this->open($this->sboxPath . "civicrm/contact/add?reset=1&ct=Individual");
192
193 //fill in first name
194 $this->type("first_name", $firstName);
195
196 //fill in last name
197 $this->type("last_name", $lastName);
198
199 //fill in email
200 $this->type("email_1_email", "{$firstName}@{$lastName}.com");
201
202 //fill in phone
203 $this->type("phone_1_phone", "2222-4444");
204
205 foreach ($options as $option) {
206 //Select preferred method for Privacy
207 $this->click("privacy_{$option}");
208 }
209
210 // Clicking save.
211 $this->click("_qf_Contact_upload_view");
212 $this->waitForPageToLoad($this->getTimeoutMsec());
213 $this->assertTrue($this->isTextPresent("{$firstName} {$lastName} has been created."));
214
215 }
216 }
217