Merge pull request #220 from kurund/CRM-12155
[civicrm-core.git] / tests / phpunit / WebTest / Event / TellAFriendTest.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 require_once 'CiviTest/CiviSeleniumTestCase.php';
28 class WebTest_Event_TellAFriendTest extends CiviSeleniumTestCase {
29
30 protected function setUp() {
31 parent::setUp();
32 }
33
34 function testAddEvent() {
35 // Log in using webtestLogin() method
36 $this->webtestLogin('admin');
37
38 $this->openCiviPage("event/add", "reset=1&action=add");
39
40 $eventTitle = 'My Conference - ' . substr(sha1(rand()), 0, 7);
41 $eventDescription = "Here is a description for this conference.";
42 $this->_testAddEventInfo($eventTitle, $eventDescription);
43
44 $streetAddress = "100 Main Street";
45 $this->_testAddLocation($streetAddress);
46
47 // intro text for registration page
48 $registerIntro = "Fill in all the fields below and click Continue.";
49 $multipleRegistrations = TRUE;
50 $this->_testAddOnlineRegistration($registerIntro, $multipleRegistrations);
51
52 // enable tell a friend
53 $subject = "$eventTitle Tell A Friend";
54 $thankYouMsg = "$eventTitle Tell A Friend Test Thankyou Message";
55 $this->_testAddTellAFriend($subject, $thankYouMsg, $eventTitle);
56
57 // get the url for registration
58 $this->waitForElementPresent("xpath=//div[@id='event_status_id']//div[@class='dataTables_wrapper']/table/tbody//tr/td[1]/a[text()='$eventTitle']");
59 $this->click("link=$eventTitle");
60 $this->waitForElementPresent("link=Register Now");
61 $this->click("link=Register Now");
62 $this->waitForElementPresent("_qf_Register_upload-bottom");
63 $registerUrl = $this->getLocation();
64
65 // give permissions for event registration
66 $permission = array('edit-1-register-for-events');
67 $this->changePermissions($permission);
68
69 // register as an anonymous user
70 $this->webtestLogout();
71 $this->open($registerUrl);
72 $this->waitForElementPresent('_qf_Register_upload-bottom');
73
74 $firstName = substr(sha1(rand()), 0, 7);
75 $this->type('email-Primary', "$firstName@Anderson.com");
76 $this->click('_qf_Register_upload-bottom');
77 $this->waitForPageToLoad($this->getTimeoutMsec());
78 $this->click("css=div.crm-event-thankyou-form-block div#tell-a-friend a");
79 $this->waitForElementPresent('_qf_Form_cancel');
80
81 $this->type('suggested_message', '$subject Test Message for the recipients');
82
83 // fill the recipients
84 $firstName1 = 'John' . substr(sha1(rand()), 0, 7);
85 $lastName1 = substr(sha1(rand()), 0, 7);
86 $this->type('friend_1_first_name', "$firstName1");
87 $this->type('friend_1_last_name', "$lastName1");
88 $this->type('friend_1_email', "$firstName1@$lastName1.com");
89
90 $firstName2 = 'Smith' . substr(sha1(rand()), 0, 7);
91 $lastName2 = substr(sha1(rand()), 0, 7);
92 $this->type('friend_2_first_name', "$firstName2");
93 $this->type('friend_2_last_name', "$lastName2");
94 $this->type('friend_2_email', "$firstName2@$lastName2.com");
95
96 $firstName3 = 'James' . substr(sha1(rand()), 0, 7);
97 $lastName3 = substr(sha1(rand()), 0, 7);
98 $this->type('friend_3_first_name', "$firstName3");
99 $this->type('friend_3_last_name', "$lastName3");
100 $this->type('friend_3_email', "$firstName3@$lastName3.com");
101
102 $this->click('_qf_Form_submit');
103 $this->waitForPageToLoad($this->getTimeoutMsec());
104
105 $this->waitForTextPresent($thankYouMsg);
106
107 // Log in using webtestLogin() method
108 $this->webtestLogin();
109
110 // get all friends contact id
111 $this->openCiviPage("contact/search", "reset=1", '_qf_Basic_refresh');
112 $this->type('sort_name', $firstName1);
113 $this->click('_qf_Basic_refresh ');
114 $this->waitForPageToLoad($this->getTimeoutMsec());
115 $this->click("xpath=//div[@class='crm-search-results']/table/tbody/tr/td[11]/span/a[text()='View']");
116 $this->waitForPageToLoad($this->getTimeoutMsec());
117
118 $this->openCiviPage("contact/search", "reset=1", '_qf_Basic_refresh');
119 $this->type('sort_name', $firstName2);
120 $this->click('_qf_Basic_refresh ');
121 $this->waitForPageToLoad($this->getTimeoutMsec());
122 $this->click("xpath=//div[@class='crm-search-results']/table/tbody/tr/td[11]/span/a[text()='View']");
123 $this->waitForPageToLoad($this->getTimeoutMsec());
124
125 $this->openCiviPage("contact/search", "reset=1", '_qf_Basic_refresh');
126 $this->type('sort_name', $firstName3);
127 $this->click('_qf_Basic_refresh ');
128 $this->waitForPageToLoad($this->getTimeoutMsec());
129 $this->click("xpath=//div[@class='crm-search-results']/table/tbody/tr/td[11]/span/a[text()='View']");
130 $this->waitForPageToLoad($this->getTimeoutMsec());
131
132 $this->openCiviPage("contact/search", "reset=1", '_qf_Basic_refresh');
133 $this->type('sort_name', $firstName);
134 $this->click('_qf_Basic_refresh ');
135 $this->waitForElementPresent('Print');
136 $this->assertTrue($this->isTextPresent('1 Contact'));
137
138 // Verify Activity created
139 $this->openCiviPage("activity/search", "reset=1", '_qf_Search_refresh');
140 $this->type('sort_name', $firstName1);
141 $this->click('_qf_Search_refresh');
142 $this->waitForElementPresent("_qf_Search_next_print");
143 $this->click("xpath=//div[@class='crm-search-results']//table[@class='selector']/tbody/tr[2]/td[9]/span/a[text()='View']");
144 $this->waitForElementPresent('_qf_Activity_cancel-bottom');
145
146 $this->verifyText("xpath=//table[@class='crm-info-panel']/tbody/tr[1]/td[2]",
147 preg_quote("$firstName@Anderson.com")
148 );
149
150 $this->verifyText("xpath=//table[@class='crm-info-panel']/tbody/tr[2]/td[2]/a[1]",
151 preg_quote("$lastName1, $firstName1")
152 );
153 $this->verifyText("xpath=//table[@class='crm-info-panel']/tbody/tr[2]/td[2]/a[2]",
154 preg_quote("$lastName2, $firstName2")
155 );
156 $this->verifyText("xpath=//table[@class='crm-info-panel']/tbody/tr[2]/td[2]/a[3]",
157 preg_quote("$lastName3, $firstName3")
158 );
159
160 $this->verifyText("xpath=//table[@class='crm-info-panel']/tbody/tr[4]/td[2]",
161 preg_quote("Tell a Friend:")
162 );
163 }
164
165 function _testAddEventInfo($eventTitle, $eventDescription) {
166 $this->waitForElementPresent("_qf_EventInfo_upload-bottom");
167
168 $this->select("event_type_id", "value=1");
169
170 // Attendee role s/b selected now.
171 $this->select("default_role_id", "value=1");
172
173 // Enter Event Title, Summary and Description
174 $this->type("title", $eventTitle);
175 $this->type("summary", "This is a great conference. Sign up now!");
176
177 // Type description in ckEditor (fieldname, text to type, editor)
178 $this->fillRichTextField("description", $eventDescription, 'CKEditor');
179
180 // Choose Start and End dates.
181 // Using helper webtestFillDate function.
182 $this->webtestFillDateTime("start_date", "+1 week");
183 $this->webtestFillDateTime("end_date", "+1 week 1 day 8 hours ");
184
185 $this->type("max_participants", "50");
186 $this->click("is_map");
187 $this->click("_qf_EventInfo_upload-bottom");
188 }
189
190 function _testAddLocation($streetAddress) {
191 // Wait for Location tab form to load
192 $this->waitForPageToLoad($this->getTimeoutMsec());
193 $this->waitForElementPresent("_qf_Location_upload-bottom");
194
195 // Fill in address fields
196 $streetAddress = "100 Main Street";
197 $this->type("address_1_street_address", $streetAddress);
198 $this->type("address_1_city", "San Francisco");
199 $this->type("address_1_postal_code", "94117");
200 $this->select("address_1_state_province_id", "value=1004");
201 $this->type("email_1_email", "info@civicrm.org");
202
203 $this->click("_qf_Location_upload-bottom");
204
205 // Wait for "saved" status msg
206 $this->waitForPageToLoad($this->getTimeoutMsec());
207 $this->waitForTextPresent("'Location' information has been saved.");
208 }
209
210 function _testAddOnlineRegistration($registerIntro, $multipleRegistrations = FALSE) {
211 // Go to Online Registration tab
212 $this->click("link=Online Registration");
213 $this->waitForElementPresent("_qf_Registration_upload-bottom");
214
215 $this->check("is_online_registration");
216 $this->assertChecked("is_online_registration");
217 if ($multipleRegistrations) {
218 $this->check("is_multiple_registrations");
219 $this->assertChecked("is_multiple_registrations");
220 }
221
222 $this->fillRichTextField("intro_text", $registerIntro);
223
224 // enable confirmation email
225 $this->click('xpath=//fieldset[@id="mail"]/div/table/tbody/tr/td[2]/label[contains(text(), "Yes")]');
226 $this->type("confirm_from_name", "Jane Doe");
227 $this->type("confirm_from_email", "jane.doe@example.org");
228
229 $this->click("_qf_Registration_upload-bottom");
230 $this->waitForPageToLoad($this->getTimeoutMsec());
231 $this->waitForTextPresent("'Registration' information has been saved.");
232 }
233
234 function _testAddTellAFriend($subject, $thankYouMsg, $eventTitle) {
235 // Go to Tell A Friend Tab
236 $this->click('link=Tell a Friend');
237 $this->waitForElementPresent('_qf_Event_cancel-bottom');
238
239 // Enable tell a friend feature
240 $this->check('tf_is_active');
241 $this->waitForElementPresent('tf_thankyou_text');
242
243 // Modify the messages
244 $this->type('intro', "This is $subject Test intro text");
245 $this->type('suggested_message', "$subject Test Message. This is amazing!");
246
247 $this->type('tf_thankyou_title', 'Test thank you title');
248 $this->type('tf_thankyou_text', $thankYouMsg);
249
250 $this->click('_qf_Event_upload_done-bottom');
251 $this->waitForElementPresent("xpath=//div[@id='event_status_id']//div[@class='dataTables_wrapper']/table/tbody//tr/td[1]/a[text()='$eventTitle']");
252 }
253 }
254