Global webtest cleanup
[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->webtestLogin();
37
38 $privacyOptions = array(
39 'dn_phone_mail' => array('do_not_phone', 'do_not_mail'),
40 'dn_phone_email' => array('do_not_phone', 'do_not_email'),
41 'dn_trade_sms' => array('do_not_trade', 'do_not_sms'),
42 );
43 $randString = substr(sha1(rand()), 0, 7);
44
45 $contactsReffOptions = array(
46 'dn_phone_mail' => array('first_name' => $randString . 'John', 'last_name' => $randString . 'Smith'),
47 'dn_phone_email' => array('first_name' => $randString . 'Jeff', 'last_name' => $randString . 'Adams'),
48 'dn_trade_sms' => array('first_name' => $randString . 'Rocky', 'last_name' => $randString . 'Stanley'),
49 );
50
51 //creating individuals
52 $this->_addIndividual($contactsReffOptions['dn_phone_mail']['first_name'], $contactsReffOptions['dn_phone_mail']['last_name'], $privacyOptions['dn_phone_mail']);
53 $this->_addIndividual($contactsReffOptions['dn_phone_email']['first_name'], $contactsReffOptions['dn_phone_email']['last_name'], $privacyOptions['dn_phone_email']);
54 $this->_addIndividual($contactsReffOptions['dn_trade_sms']['first_name'], $contactsReffOptions['dn_trade_sms']['last_name'], $privacyOptions['dn_trade_sms']);
55
56 //advance search for created contacts
57 $this->openCiviPage('contact/search/advanced', 'reset=1', '_qf_Advanced_refresh');
58 $allPrivacyOptions = array(
59 'do_not_phone',
60 'do_not_mail',
61 'do_not_email',
62 'do_not_sms',
63 'do_not_trade',
64 );
65
66 $this->_addPrivacyCriteria('include', $privacyOptions['dn_phone_mail'], 'OR', $allPrivacyOptions);
67 $this->click('_qf_Advanced_refresh');
68 $this->waitForPageToLoad($this->getTimeoutMsec());
69
70 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'])) {
71 $assertCheck = TRUE;
72 }
73 else {
74 $assertCheck = FALSE;
75 }
76 $this->assertTrue($assertCheck, 'Do not phone / mail assertion failed using criteria(include , OR )');
77 $this->_addPrivacyCriteria('exclude', $privacyOptions['dn_phone_mail'], 'OR', $allPrivacyOptions);
78 $this->click('_qf_Advanced_refresh');
79 $this->waitForPageToLoad($this->getTimeoutMsec());
80
81
82 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'])) {
83 $assertCheck = TRUE;
84 }
85 else {
86 $assertCheck = FALSE;
87 }
88 $this->assertTrue($assertCheck, 'Do not phone / mail assertion failed using criteria(exclude , OR )');
89
90 $this->_addPrivacyCriteria('include', $privacyOptions['dn_phone_mail'], 'AND', $allPrivacyOptions);
91 $this->click('_qf_Advanced_refresh');
92 $this->waitForPageToLoad($this->getTimeoutMsec());
93
94 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'])) {
95 $assertCheck = TRUE;
96 }
97 else {
98 $assertCheck = FALSE;
99 }
100 $this->assertTrue($assertCheck, 'Do not phone / mail assertion failed using criteria(include , AND )');
101
102 $this->_addPrivacyCriteria('exclude', $privacyOptions['dn_phone_mail'], 'AND', $allPrivacyOptions);
103 $this->click('_qf_Advanced_refresh');
104 $this->waitForPageToLoad($this->getTimeoutMsec());
105
106 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'])) {
107 $assertCheck = TRUE;
108 }
109 else {
110 $assertCheck = FALSE;
111 }
112 $this->assertTrue($assertCheck, 'Do not phone / mail assertion failed using criteria(exclude , AND )');
113 $this->_addPrivacyCriteria('include', $privacyOptions['dn_trade_sms'], '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_phone_email']['first_name'], $contactsReffOptions['dn_phone_email']['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 trade / sms assertion failed using criteria(include , AND )');
124 }
125
126 function _addPrivacyCriteria($inEx, $privacyOptions, $privacyOperator, $allPrivacyOptions) {
127 $inExId = ($inEx == 'include') ? 'CIVICRM_QFID_2_privacy_toggle' : 'CIVICRM_QFID_1_privacy_toggle';
128 $this->click($inExId);
129 $this->select('privacy_operator', "{$privacyOperator}");
130 foreach ($privacyOptions as $privacyOption) {
131 $privacyOptionVal = $this->getOptionVal($privacyOption);
132
133 if (!$this->isElementPresent("xpath=//ul[@id='crmasmList4']//li//span[text()='{$privacyOptionVal}']")) {
134 $this->select('crmasmSelect4', "value={$privacyOption}");
135 $this->waitForElementPresent("xpath=//ul[@id='crmasmList4']//li//span[text()='{$privacyOptionVal}']");
136 }
137 }
138
139 foreach ($allPrivacyOptions as $allPrivacyOption) {
140 if (!in_array($allPrivacyOption, $privacyOptions)) {
141 $privacyOptionVal = $this->getOptionVal($allPrivacyOption);
142 if ($this->isElementPresent("xpath=//ul[@id='crmasmList4']//li//span[text()='{$privacyOptionVal}']")) {
143 $this->click("xpath=//ul[@id='crmasmList4']//li//span[text()='{$privacyOptionVal}']/../a[@class='crmasmListItemRemove']");
144 }
145 }
146 }
147 }
148
149 function _searchSortNameCriteria($firstName, $lastName) {
150 //type in the criteria
151 $this->type("sort_name", "{$lastName}, {$firstName}");
152 $this->click("_qf_Advanced_refresh");
153 $this->waitForPageToLoad($this->getTimeoutMsec());
154
155 //return its presence
156 return $this->isElementPresent("xpath=//div[@class='crm-search-results']/table/tbody/tr/td[3]/a[text()='{$lastName}, {$firstName}']");
157 }
158
159 function getOptionVal($privacyOption) {
160 if ($privacyOption == 'do_not_phone') {
161 $privacyOptionVal = 'Do not phone';
162 }
163 elseif ($privacyOption == 'do_not_mail') {
164 $privacyOptionVal = 'Do not mail';
165 }
166 elseif ($privacyOption == 'do_not_email') {
167 $privacyOptionVal = 'Do not email';
168 }
169 elseif ($privacyOption == 'do_not_trade') {
170 $privacyOptionVal = 'Do not trade';
171 }
172 elseif ($privacyOption == 'do_not_sms') {
173 $privacyOptionVal = 'Do not sms';
174 }
175 return $privacyOptionVal;
176 }
177
178 function _addIndividual($firstName, $lastName, $options) {
179
180 $this->openCiviPage('contact/add', 'reset=1&ct=Individual');
181
182 //fill in first name
183 $this->type("first_name", $firstName);
184
185 //fill in last name
186 $this->type("last_name", $lastName);
187
188 //fill in email
189 $this->type("email_1_email", "{$firstName}@{$lastName}.com");
190
191 //fill in phone
192 $this->type("phone_1_phone", "2222-4444");
193
194 foreach ($options as $option) {
195 //Select preferred method for Privacy
196 $this->click("privacy_{$option}");
197 }
198
199 // Clicking save.
200 $this->click("_qf_Contact_upload_view");
201 $this->waitForPageToLoad($this->getTimeoutMsec());
202 $this->assertElementContainsText('crm-notification-container', "{$firstName} {$lastName} has been created.");
203
204 }
205 }
206