Commit | Line | Data |
---|---|---|
6a488035 TO |
1 | <?php |
2 | /* | |
3 | +--------------------------------------------------------------------+ | |
39de6fd5 | 4 | | CiviCRM version 4.6 | |
6a488035 | 5 | +--------------------------------------------------------------------+ |
06a1bc01 | 6 | | Copyright CiviCRM LLC (c) 2004-2014 | |
6a488035 TO |
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 | +--------------------------------------------------------------------+ | |
d25dd0ee | 25 | */ |
6a488035 | 26 | |
6a488035 | 27 | require_once 'CiviTest/CiviSeleniumTestCase.php'; |
e9479dcf EM |
28 | |
29 | /** | |
30 | * Class WebTest_Event_AddPricesetTest | |
31 | */ | |
6a488035 TO |
32 | class WebTest_Event_AddPricesetTest extends CiviSeleniumTestCase { |
33 | ||
34 | protected function setUp() { | |
35 | parent::setUp(); | |
36 | } | |
37 | ||
00be9182 | 38 | public function testAddPriceSet() { |
6a488035 TO |
39 | |
40 | // Log in using webtestLogin() method | |
41 | $this->webtestLogin(); | |
42 | ||
43 | $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7); | |
42daf119 CW |
44 | $usedFor = 'Event'; |
45 | $setHelp = 'Select your conference options.'; | |
6a488035 TO |
46 | $this->_testAddSet($setTitle, $usedFor, $setHelp); |
47 | ||
48 | // Get the price set id ($sid) by retrieving and parsing the URL of the New Price Field form | |
49 | // which is where we are after adding Price Set. | |
a471a3b6 | 50 | $sid = $this->urlArg('sid'); |
6a488035 TO |
51 | $this->assertType('numeric', $sid); |
52 | ||
50d95825 | 53 | $validateStrings = array(); |
6a488035 TO |
54 | |
55 | $fields = array( | |
56 | 'Full Conference' => 'Text', | |
57 | 'Meal Choice' => 'Select', | |
58 | 'Pre-conference Meetup?' => 'Radio', | |
59 | 'Evening Sessions' => 'CheckBox', | |
60 | ); | |
61 | $this->_testAddPriceFields($fields, $validateStrings); | |
6a488035 TO |
62 | |
63 | // load the Price Set Preview and check for expected values | |
64 | $this->_testVerifyPriceSet($validateStrings, $sid); | |
65 | } | |
66 | ||
4cbe18b8 EM |
67 | /** |
68 | * @param $setTitle | |
69 | * @param $usedFor | |
70 | * @param $setHelp | |
71 | * @param string $financialType | |
72 | */ | |
00be9182 | 73 | public function _testAddSet($setTitle, $usedFor, $setHelp, $financialType = 'Event Fee') { |
8b67c4d0 | 74 | $this->openCiviPage('admin/price', 'reset=1&action=add', '_qf_Set_next-bottom'); |
6a488035 TO |
75 | |
76 | // Enter Priceset fields (Title, Used For ...) | |
77 | $this->type('title', $setTitle); | |
78 | if ($usedFor == 'Event') { | |
79 | $this->check('extends[1]'); | |
80 | } | |
81 | elseif ($usedFor == 'Contribution') { | |
82 | $this->check('extends[2]'); | |
83 | } | |
84 | ||
9ffaaf79 | 85 | $this->select("financial_type_id", "label={$financialType}"); |
76e86fd8 | 86 | |
6a488035 TO |
87 | $this->type('help_pre', $setHelp); |
88 | ||
89 | $this->assertChecked('is_active', 'Verify that Is Active checkbox is set.'); | |
7df6dc24 | 90 | $this->clickLink('_qf_Set_next-bottom'); |
6a488035 TO |
91 | } |
92 | ||
4cbe18b8 EM |
93 | /** |
94 | * @param $fields | |
95 | * @param $validateStrings | |
96 | * @param bool $dateSpecificFields | |
97 | */ | |
00be9182 | 98 | public function _testAddPriceFields(&$fields, &$validateStrings, $dateSpecificFields = FALSE) { |
50d95825 | 99 | $this->clickLinkSuppressPopup('newPriceField'); |
6a488035 TO |
100 | foreach ($fields as $label => $type) { |
101 | $validateStrings[] = $label; | |
102 | ||
103 | $this->type('label', $label); | |
104 | $this->select('html_type', "value={$type}"); | |
105 | ||
106 | switch ($type) { | |
107 | case 'Text': | |
108 | $validateStrings[] = '525.00'; | |
109 | $this->type('price', '525.00'); | |
110 | $this->select('financial_type_id', 'Donation'); | |
111 | if ($dateSpecificFields == TRUE) { | |
112 | $this->webtestFillDateTime('active_on', '+1 week'); | |
113 | } | |
114 | else { | |
115 | $this->check('is_required'); | |
116 | } | |
117 | break; | |
118 | ||
119 | case 'Select': | |
120 | $options = array( | |
6c6e6187 | 121 | 1 => array( |
92915c55 | 122 | 'label' => 'Chicken', |
6a488035 | 123 | 'amount' => '30.00', |
21dfd5f5 | 124 | 'financial_type_id' => 'Donation', |
6a488035 TO |
125 | ), |
126 | 2 => array( | |
127 | 'label' => 'Vegetarian', | |
128 | 'amount' => '25.00', | |
21dfd5f5 | 129 | 'financial_type_id' => 'Donation', |
6a488035 TO |
130 | ), |
131 | ); | |
132 | $this->addMultipleChoiceOptions($options, $validateStrings); | |
133 | if ($dateSpecificFields == TRUE) { | |
134 | $this->webtestFillDateTime('expire_on', '-1 week'); | |
135 | } | |
136 | break; | |
137 | ||
138 | case 'Radio': | |
139 | $options = array( | |
6c6e6187 | 140 | 1 => array( |
92915c55 | 141 | 'label' => 'Yes', |
6a488035 | 142 | 'amount' => '50.00', |
21dfd5f5 | 143 | 'financial_type_id' => 'Donation', |
76e86fd8 | 144 | |
92915c55 | 145 | ), |
6a488035 TO |
146 | 2 => array( |
147 | 'label' => 'No', | |
148 | 'amount' => '0', | |
21dfd5f5 | 149 | 'financial_type_id' => 'Donation', |
6a488035 TO |
150 | ), |
151 | ); | |
152 | $this->addMultipleChoiceOptions($options, $validateStrings); | |
3e60ff7f | 153 | $this->click('is_required'); |
6a488035 TO |
154 | if ($dateSpecificFields == TRUE) { |
155 | $this->webtestFillDateTime('active_on', '-1 week'); | |
156 | } | |
157 | break; | |
158 | ||
159 | case 'CheckBox': | |
160 | $options = array( | |
6c6e6187 | 161 | 1 => array( |
92915c55 | 162 | 'label' => 'First Night', |
6a488035 | 163 | 'amount' => '15.00', |
21dfd5f5 | 164 | 'financial_type_id' => 'Donation', |
6a488035 TO |
165 | ), |
166 | 2 => array( | |
167 | 'label' => 'Second Night', | |
168 | 'amount' => '15.00', | |
21dfd5f5 | 169 | 'financial_type_id' => 'Donation', |
6a488035 TO |
170 | ), |
171 | ); | |
172 | $this->addMultipleChoiceOptions($options, $validateStrings); | |
173 | if ($dateSpecificFields == TRUE) { | |
174 | $this->webtestFillDateTime('expire_on', '+1 week'); | |
175 | } | |
176 | break; | |
177 | ||
178 | default: | |
179 | break; | |
180 | } | |
50d95825 | 181 | $this->clickLink('_qf_Field_next_new-bottom', '_qf_Field_next-bottom'); |
92fcb95f | 182 | $this->waitForText('crm-notification-container', "Price Field '" . $label . "' has been saved."); |
6a488035 TO |
183 | } |
184 | } | |
185 | ||
4cbe18b8 EM |
186 | /** |
187 | * @param $validateStrings | |
100fef9d | 188 | * @param int $sid |
4cbe18b8 | 189 | */ |
00be9182 | 190 | public function _testVerifyPriceSet($validateStrings, $sid) { |
6a488035 TO |
191 | // verify Price Set at Preview page |
192 | // start at Manage Price Sets listing | |
a9f5275d | 193 | $this->openCiviPage('admin/price', 'reset=1'); |
6a488035 TO |
194 | |
195 | // Use the price set id ($sid) to pick the correct row | |
9ffaaf79 | 196 | $this->clickLink("//*[@id='price_set-{$sid}']/td[4]/span[1]/a[2]", '_qf_Preview_cancel-bottom'); |
6a488035 TO |
197 | |
198 | // Check for expected price set field strings | |
199 | $this->assertStringsPresent($validateStrings); | |
200 | } | |
201 | ||
00be9182 | 202 | public function testRegisterWithPriceSet() { |
6a488035 TO |
203 | // Log in using webtestLogin() method |
204 | $this->webtestLogin(); | |
205 | ||
206 | $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7); | |
42daf119 CW |
207 | $usedFor = 'Event'; |
208 | $setHelp = 'Select your conference options.'; | |
6a488035 TO |
209 | $this->_testAddSet($setTitle, $usedFor, $setHelp); |
210 | ||
211 | // Get the price set id ($sid) by retrieving and parsing the URL of the New Price Field form | |
212 | // which is where we are after adding Price Set. | |
a471a3b6 | 213 | $sid = $this->urlArg('sid'); |
6a488035 TO |
214 | $this->assertType('numeric', $sid); |
215 | ||
216 | $validStrings = array(); | |
217 | $fields = array( | |
218 | 'Full Conference' => 'Text', | |
219 | 'Meal Choice' => 'Select', | |
220 | 'Pre-conference Meetup?' => 'Radio', | |
221 | 'Evening Sessions' => 'CheckBox', | |
222 | ); | |
223 | $this->_testAddPriceFields($fields, $validateStrings); | |
224 | ||
225 | // load the Price Set Preview and check for expected values | |
226 | $this->_testVerifyPriceSet($validateStrings, $sid); | |
227 | ||
c3ad8633 CW |
228 | // Use default payment processor |
229 | $processorName = 'Test Processor'; | |
6a488035 TO |
230 | $this->webtestAddPaymentProcessor($processorName); |
231 | ||
8b67c4d0 | 232 | $this->openCiviPage('event/add', 'reset=1&action=add', '_qf_EventInfo_upload-bottom'); |
6a488035 | 233 | |
42daf119 CW |
234 | $eventTitle = 'My Conference - ' . substr(sha1(rand()), 0, 7); |
235 | $email = 'Smith' . substr(sha1(rand()), 0, 7) . '@example.com'; | |
6a488035 TO |
236 | $eventDescription = 'Here is a description for this conference.'; |
237 | ||
6a488035 TO |
238 | $this->select('event_type_id', 'value=1'); |
239 | ||
240 | // Attendee role s/b selected now. | |
241 | $this->select('default_role_id', 'value=1'); | |
242 | ||
243 | // Enter Event Title, Summary and Description | |
244 | $this->type('title', $eventTitle); | |
245 | $this->type('summary', 'This is a great conference. Sign up now!'); | |
246 | ||
247 | // Type description in ckEditor (fieldname, text to type, editor) | |
248 | $this->fillRichTextField('description', $eventDescription); | |
249 | ||
250 | // Choose Start and End dates. | |
251 | // Using helper webtestFillDate function. | |
252 | $this->webtestFillDateTime("start_date", "+1 week"); | |
253 | $this->webtestFillDateTime("end_date", "+1 week 1 day 8 hours "); | |
254 | ||
255 | $this->type('max_participants', '50'); | |
256 | $this->click('is_map'); | |
257 | $this->click('_qf_EventInfo_upload-bottom'); | |
258 | ||
259 | // Wait for Location tab form to load | |
3379d026 | 260 | $this->waitForElementPresent('_qf_Location_upload_done-bottom'); |
6a488035 TO |
261 | |
262 | // Go to Fees tab | |
263 | $this->click('link=Fees'); | |
3379d026 | 264 | $this->waitForElementPresent('_qf_Fee_upload_done-bottom'); |
6a488035 | 265 | $this->click('CIVICRM_QFID_1_is_monetary'); |
1361cc61 | 266 | $this->click("xpath=//tbale[@id='paymentProcessor']/tbody/tr[1]/td[2]/label[text()='$processorName']"); |
389bcebf | 267 | $this->select('financial_type_id', 'label=Event Fee'); |
6a488035 TO |
268 | $this->select('price_set_id', 'label=' . $setTitle); |
269 | ||
6a488035 TO |
270 | // intro text for registration page |
271 | $registerIntro = 'Fill in all the fields below and click Continue.'; | |
3379d026 | 272 | $this->clickLink('_qf_Fee_upload-bottom', 'link=Online Registration', FALSE); |
6a488035 TO |
273 | |
274 | // Go to Online Registration tab | |
275 | $this->click('link=Online Registration'); | |
276 | $this->waitForElementPresent('_qf_Registration_upload-bottom'); | |
277 | ||
278 | $this->check('is_online_registration'); | |
279 | $this->assertChecked('is_online_registration'); | |
280 | ||
60709d21 | 281 | $this->click('intro_text-plain'); |
6a488035 TO |
282 | $this->fillRichTextField('intro_text', $registerIntro); |
283 | ||
284 | // enable confirmation email | |
285 | $this->click('CIVICRM_QFID_1_is_email_confirm'); | |
286 | $this->type('confirm_from_name', 'Jane Doe'); | |
287 | $this->type('confirm_from_email', 'jane.doe@example.org'); | |
288 | ||
289 | $this->click('_qf_Registration_upload-bottom'); | |
3379d026 | 290 | $this->waitForTextPresent("'Online Registration' information has been saved."); |
6a488035 TO |
291 | |
292 | // verify event input on info page | |
293 | // start at Manage Events listing | |
a9f5275d | 294 | $this->openCiviPage('event/manage', 'reset=1'); |
6a488035 TO |
295 | $this->click("link=$eventTitle"); |
296 | ||
297 | $this->waitForPageToLoad($this->getTimeoutMsec()); | |
298 | $eventInfoUrl = $this->getLocation(); | |
299 | ||
3379d026 | 300 | $permissions = array("edit-1-register-for-events"); |
301 | $this->changePermissions($permissions); | |
42daf119 | 302 | $this->webtestLogout(); |
6a488035 TO |
303 | $this->open($eventInfoUrl); |
304 | $this->click('link=Register Now'); | |
305 | $this->waitForElementPresent('_qf_Register_upload-bottom'); | |
306 | ||
3379d026 | 307 | $this->type("xpath=//input[@class='four crm-form-text required']", "1"); |
308 | $this->click("xpath=//input[@class='crm-form-radio']"); | |
309 | $this->click("xpath=//input[@class='crm-form-checkbox']"); | |
70452444 | 310 | $this->type("first_name", "Jane"); |
311 | $lastName = "Smith" . substr(sha1(rand()), 0, 7); | |
312 | $this->type("last_name", $lastName); | |
6a488035 TO |
313 | $this->type('email-Primary', $email); |
314 | ||
315 | $this->waitForElementPresent('credit_card_type'); | |
316 | $this->select('credit_card_type', 'value=Visa'); | |
317 | $this->type('credit_card_number', '4111111111111111'); | |
318 | $this->type('cvv2', '000'); | |
319 | $this->select('credit_card_exp_date[M]', 'value=1'); | |
320 | $this->select('credit_card_exp_date[Y]', 'value=2020'); | |
321 | $this->type('billing_first_name', 'Jane'); | |
70452444 | 322 | $this->type('billing_last_name', $lastName); |
6a488035 TO |
323 | $this->type('billing_street_address-5', '15 Main St.'); |
324 | $this->type(' billing_city-5', 'San Jose'); | |
325 | $this->select('billing_country_id-5', 'value=1228'); | |
326 | $this->select('billing_state_province_id-5', 'value=1004'); | |
327 | $this->type('billing_postal_code-5', '94129'); | |
328 | ||
225a8648 | 329 | $this->clickLink('_qf_Register_upload-bottom', '_qf_Confirm_next-bottom'); |
6a488035 TO |
330 | $confirmStrings = array('Event Fee(s)', 'Billing Name and Address', 'Credit Card Information'); |
331 | $this->assertStringsPresent($confirmStrings); | |
332 | $this->click('_qf_Confirm_next-bottom'); | |
333 | $this->waitForPageToLoad($this->getTimeoutMsec()); | |
334 | $thankStrings = array('Thank You for Registering', 'Event Total', 'Transaction Date'); | |
335 | $this->assertStringsPresent($thankStrings); | |
336 | ||
6a488035 TO |
337 | // Log in using webtestLogin() method |
338 | $this->webtestLogin(); | |
339 | ||
340 | //Find Participant | |
8b67c4d0 | 341 | $this->openCiviPage('event/search', 'reset=1', '_qf_Search_refresh'); |
6a488035 TO |
342 | |
343 | $this->type('sort_name', "$email"); | |
225a8648 | 344 | $this->clickLink('_qf_Search_refresh', "xpath=id('participantSearch')/table/tbody/tr/td[11]/span/a[text()='View']"); |
6a488035 TO |
345 | $this->click("xpath=id('participantSearch')/table/tbody/tr/td[11]/span/a[text()='View']"); |
346 | $this->waitForElementPresent('_qf_ParticipantView_cancel-bottom'); | |
347 | ||
348 | $expected = array( | |
349 | 2 => 'Full Conference', | |
350 | 3 => 'Pre-conference Meetup? - Yes', | |
351 | 4 => 'Evening Sessions - First Night', | |
352 | ); | |
353 | foreach ($expected as $value => $label) { | |
3379d026 | 354 | $this->verifyText("xpath=id('ParticipantView')/div[2]/table[1]/tbody/tr[8]/td[2]/table/tbody/tr[$value]/td", $label); |
6a488035 TO |
355 | } |
356 | // Fixme: We can't asset full string like - "Event Total: $ 590.00" as it has special char | |
357 | $this->assertStringsPresent(' 590.00'); | |
358 | $this->click('_qf_ParticipantView_cancel-bottom'); | |
359 | } | |
360 | ||
00be9182 | 361 | public function testParticipantWithDateSpecificPriceSet() { |
6a488035 TO |
362 | |
363 | // Log in using webtestLogin() method | |
364 | $this->webtestLogin(); | |
365 | ||
366 | $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7); | |
42daf119 CW |
367 | $usedFor = 'Event'; |
368 | $setHelp = 'Select your conference options.'; | |
6a488035 TO |
369 | $this->_testAddSet($setTitle, $usedFor, $setHelp); |
370 | ||
371 | // Get the price set id ($sid) by retrieving and parsing the URL of the New Price Field form | |
372 | // which is where we are after adding Price Set. | |
a471a3b6 | 373 | $sid = $this->urlArg('sid'); |
6a488035 TO |
374 | $this->assertType('numeric', $sid); |
375 | ||
376 | $validStrings = array(); | |
377 | $fields = array( | |
378 | 'Full Conference' => 'Text', | |
379 | 'Meal Choice' => 'Select', | |
380 | 'Pre-conference Meetup?' => 'Radio', | |
381 | 'Evening Sessions' => 'CheckBox', | |
382 | ); | |
383 | $this->_testAddPriceFields($fields, $validateStrings, TRUE); | |
384 | ||
385 | // load the Price Set Preview and check for expected values | |
386 | $this->_testVerifyPriceSet($validateStrings, $sid); | |
387 | ||
c3ad8633 CW |
388 | // Use default payment processor |
389 | $processorName = 'Test Processor'; | |
6a488035 TO |
390 | $this->webtestAddPaymentProcessor($processorName); |
391 | ||
8b67c4d0 | 392 | $this->openCiviPage('event/add', 'reset=1&action=add', '_qf_EventInfo_upload-bottom'); |
6a488035 | 393 | |
42daf119 CW |
394 | $eventTitle = 'My Conference - ' . substr(sha1(rand()), 0, 7); |
395 | $email = 'Smith' . substr(sha1(rand()), 0, 7) . '@example.com'; | |
6a488035 TO |
396 | $eventDescription = 'Here is a description for this conference.'; |
397 | ||
6a488035 TO |
398 | $this->select('event_type_id', 'value=1'); |
399 | ||
400 | // Attendee role s/b selected now. | |
401 | $this->select('default_role_id', 'value=1'); | |
402 | ||
403 | // Enter Event Title, Summary and Description | |
404 | $this->type('title', $eventTitle); | |
405 | $this->type('summary', 'This is a great conference. Sign up now!'); | |
406 | ||
407 | // Type description in ckEditor (fieldname, text to type, editor) | |
481a74f4 | 408 | $this->fillRichTextField('description', $eventDescription); |
6a488035 TO |
409 | |
410 | // Choose Start and End dates. | |
411 | // Using helper webtestFillDate function. | |
412 | $this->webtestFillDateTime("start_date", "+1 week"); | |
413 | $this->webtestFillDateTime("end_date", "+1 week 1 day 8 hours "); | |
414 | ||
415 | $this->type('max_participants', '50'); | |
416 | $this->click('is_map'); | |
417 | $this->click('_qf_EventInfo_upload-bottom'); | |
418 | ||
419 | // Wait for Location tab form to load | |
420 | $this->waitForPageToLoad($this->getTimeoutMsec()); | |
421 | ||
422 | // Go to Fees tab | |
423 | $this->click('link=Fees'); | |
424 | $this->waitForElementPresent('_qf_Fee_upload-bottom'); | |
425 | $this->click('CIVICRM_QFID_1_is_monetary'); | |
426 | $this->click("xpath=//tr[@class='crm-event-manage-fee-form-block-payment_processor']/td[2]/label[text()='$processorName']"); | |
6c6e6187 | 427 | $this->select('financial_type_id', 'label=Event Fee'); |
6a488035 TO |
428 | $this->select('price_set_id', 'label=' . $setTitle); |
429 | ||
3379d026 | 430 | $this->clickLink('_qf_Fee_upload-bottom', 'link=Online Registration', FALSE); |
6a488035 TO |
431 | |
432 | // intro text for registration page | |
433 | $registerIntro = 'Fill in all the fields below and click Continue.'; | |
434 | ||
435 | // Go to Online Registration tab | |
436 | $this->click('link=Online Registration'); | |
437 | $this->waitForElementPresent('_qf_Registration_upload-bottom'); | |
438 | ||
439 | $this->check('is_online_registration'); | |
440 | $this->assertChecked('is_online_registration'); | |
441 | ||
60709d21 | 442 | $this->click('intro_text-plain'); |
6a488035 TO |
443 | $this->fillRichTextField('intro_text', $registerIntro); |
444 | ||
445 | // enable confirmation email | |
446 | $this->click('CIVICRM_QFID_1_is_email_confirm'); | |
447 | $this->type('confirm_from_name', 'Jane Doe'); | |
448 | $this->type('confirm_from_email', 'jane.doe@example.org'); | |
449 | ||
450 | $this->click('_qf_Registration_upload-bottom'); | |
3379d026 | 451 | $this->waitForTextPresent("'Online Registration' information has been saved."); |
6a488035 TO |
452 | |
453 | // verify event input on info page | |
454 | // start at Manage Events listing | |
a9f5275d | 455 | $this->openCiviPage('event/manage', 'reset=1'); |
6a488035 TO |
456 | $this->click("link=$eventTitle"); |
457 | ||
458 | $this->waitForPageToLoad($this->getTimeoutMsec()); | |
459 | // Adding contact with randomized first name (so we can then select that contact when creating event registration) | |
460 | // We're using Quick Add block on the main page for this. | |
461 | $firstName = substr(sha1(rand()), 0, 7); | |
86bfa4f6 | 462 | $lastName = 'Anderson' . substr(sha1(rand()), 0, 7); |
5f0e3af6 DG |
463 | $this->webtestAddContact($firstName, $lastName, TRUE); |
464 | $contactName = "$lastName, $firstName"; | |
465 | $displayName = "$firstName $lastName"; | |
6a488035 | 466 | |
8b67c4d0 | 467 | $this->openCiviPage('participant/add', 'reset=1&action=add&context=standalone', '_qf_Participant_upload-bottom'); |
6a488035 | 468 | |
6a488035 TO |
469 | // Type contact last name in contact auto-complete, wait for dropdown and click first result |
470 | $this->webtestFillAutocomplete($firstName); | |
471 | ||
472 | // Select event. Based on label for now. | |
e6c6db94 | 473 | $this->select2('event_id', "$eventTitle"); |
6a488035 | 474 | // Select role |
e6c6db94 | 475 | $this->multiselect2('role_id', array('Volunteer')); |
6a488035 | 476 | |
5f0e3af6 | 477 | $this->waitForElementPresent("xpath=//input[@class='crm-form-radio']"); |
3379d026 | 478 | $this->click("xpath=//input[@class='crm-form-radio']"); |
479 | $this->click("xpath=//input[@class='crm-form-checkbox']"); | |
6a488035 TO |
480 | |
481 | // Choose Registration Date. | |
482 | // Using helper webtestFillDate function. | |
483 | $this->webtestFillDate('register_date', 'now'); | |
484 | $today = date('F jS, Y', strtotime('now')); | |
485 | ||
486 | // Select participant status | |
487 | $this->select('status_id', 'value=1'); | |
488 | ||
489 | // Clicking save. | |
490 | $this->click('_qf_Participant_upload-bottom'); | |
491 | $this->waitForPageToLoad($this->getTimeoutMsec()); | |
492 | // Is status message correct? | |
e6c6db94 | 493 | $this->waitForText("crm-notification-container", "Event registration for $displayName has been added", "Status message didn't show up after saving!"); |
6a488035 | 494 | |
3379d026 | 495 | $this->waitForElementPresent("xpath=//*[@id='Search']//table//tbody/tr[1]/td[8]/span/a[text()='View']"); |
6a488035 TO |
496 | |
497 | //click through to the participant view screen | |
3379d026 | 498 | $this->click("xpath=//*[@id='Search']//table//tbody/tr[1]/td[8]/span/a[text()='View']"); |
6a488035 TO |
499 | $this->waitForElementPresent('_qf_ParticipantView_cancel-bottom'); |
500 | } | |
7f587af0 PN |
501 | |
502 | /** | |
100fef9d | 503 | * Test to regiter participant for event with |
7f587af0 | 504 | * multiple price fields in price-set |
76e86fd8 CW |
505 | * CRM-11986 |
506 | ||
7f587af0 | 507 | */ |
00be9182 | 508 | public function testEventWithPriceSet() { |
76e86fd8 | 509 | |
7f587af0 PN |
510 | // Log in using webtestLogin() method |
511 | $this->webtestLogin(); | |
76e86fd8 | 512 | |
7f587af0 PN |
513 | // Adding contact with randomized first name (so we can then select that contact when creating event registration) |
514 | // We're using Quick Add block on the main page for this. | |
515 | $firstName = substr(sha1(rand()), 0, 7); | |
86bfa4f6 | 516 | $lastName = 'Anderson' . substr(sha1(rand()), 0, 7); |
5f0e3af6 DG |
517 | $this->webtestAddContact($firstName, $lastName, TRUE); |
518 | $contactName = "$lastName, $firstName"; | |
519 | $displayName = "$firstName $lastName"; | |
76e86fd8 | 520 | |
7f587af0 | 521 | $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7); |
42daf119 CW |
522 | $usedFor = 'Event'; |
523 | $setHelp = 'Select your conference options.'; | |
7f587af0 PN |
524 | $this->_testAddSet($setTitle, $usedFor, $setHelp); |
525 | ||
526 | // Get the price set id ($sid) by retrieving and parsing the URL of the New Price Field form | |
527 | // which is where we are after adding Price Set. | |
a471a3b6 | 528 | $sid = $this->urlArg('sid'); |
7f587af0 PN |
529 | $this->assertType('numeric', $sid); |
530 | ||
531 | $validStrings = array(); | |
532 | $fields = array( | |
533 | 'Full Conference' => 'Text', | |
534 | 'Pre-conference Meetup?' => 'Radio', | |
535 | 'Evening Sessions' => 'CheckBox', | |
536 | ); | |
537 | $this->_testAddPriceFields($fields, $validateStrings); | |
76e86fd8 | 538 | |
7f587af0 PN |
539 | // load the Price Set Preview and check for expected values |
540 | $this->_testVerifyPriceSet($validateStrings, $sid); | |
42daf119 | 541 | |
8b67c4d0 | 542 | $this->openCiviPage('event/add', 'reset=1&action=add', '_qf_EventInfo_upload-bottom'); |
7f587af0 | 543 | |
42daf119 CW |
544 | $eventTitle = 'My Conference - ' . substr(sha1(rand()), 0, 7); |
545 | $email = 'Smith' . substr(sha1(rand()), 0, 7) . '@example.com'; | |
7f587af0 | 546 | $eventDescription = 'Here is a description for this conference.'; |
7f587af0 | 547 | |
7f587af0 | 548 | $this->select('event_type_id', 'value=1'); |
76e86fd8 | 549 | |
7f587af0 PN |
550 | // Attendee role s/b selected now. |
551 | $this->select('default_role_id', 'value=1'); | |
76e86fd8 | 552 | |
7f587af0 PN |
553 | // Enter Event Title, Summary and Description |
554 | $this->type('title', $eventTitle); | |
555 | $this->type('summary', 'This is a great conference. Sign up now!'); | |
76e86fd8 | 556 | |
7f587af0 PN |
557 | // Type description in ckEditor (fieldname, text to type, editor) |
558 | $this->fillRichTextField('description', $eventDescription); | |
76e86fd8 | 559 | |
7f587af0 PN |
560 | // Choose Start and End dates. |
561 | // Using helper webtestFillDate function. | |
562 | $this->webtestFillDateTime("start_date", "+1 week"); | |
563 | $this->webtestFillDateTime("end_date", "+1 week 1 day 8 hours "); | |
564 | ||
565 | $this->type('max_participants', '50'); | |
566 | $this->click('is_map'); | |
567 | $this->click('_qf_EventInfo_upload-bottom'); | |
568 | ||
569 | // Wait for Location tab form to load | |
570 | $this->waitForPageToLoad($this->getTimeoutMsec()); | |
571 | ||
572 | // Go to Fees tab | |
573 | $this->click('link=Fees'); | |
574 | $this->waitForElementPresent('_qf_Fee_upload-bottom'); | |
575 | $this->click('CIVICRM_QFID_1_is_monetary'); | |
6c6e6187 | 576 | $this->select('financial_type_id', 'label=Event Fee'); |
7f587af0 | 577 | $this->select('price_set_id', 'label=' . $setTitle); |
76e86fd8 | 578 | |
7f587af0 | 579 | $this->click('_qf_Fee_upload-bottom'); |
6c6e6187 | 580 | $this->waitForText("crm-notification-container", "'Fees' information has been saved."); |
7f587af0 | 581 | |
42daf119 | 582 | $this->openCiviPage('participant/add', 'reset=1&action=add&context=standalone', '_qf_Participant_upload-bottom'); |
7f587af0 | 583 | |
7f587af0 PN |
584 | // Type contact last name in contact auto-complete, wait for dropdown and click first result |
585 | $this->webtestFillAutocomplete($firstName); | |
9ffaaf79 | 586 | $this->select2('event_id', $eventTitle); |
7f587af0 | 587 | // Select role |
e6c6db94 | 588 | $this->multiselect2('role_id', array('Volunteer')); |
76e86fd8 | 589 | |
7f587af0 PN |
590 | // Choose Registration Date. |
591 | // Using helper webtestFillDate function. | |
592 | $this->webtestFillDate('register_date', 'now'); | |
593 | $today = date('F jS, Y', strtotime('now')); | |
594 | // May 5th, 2010 | |
76e86fd8 | 595 | |
7f587af0 PN |
596 | // Select participant status |
597 | $this->select('status_id', 'value=1'); | |
598 | ||
599 | // Setting registration source | |
600 | $this->type('source', 'Event StandaloneAddTest Webtest'); | |
76e86fd8 | 601 | |
7f587af0 | 602 | // Select an event fee |
4cbbec00 | 603 | $this->waitForElementPresent("xpath=//div[@id='priceset']/div[2]/div[2]/input"); |
60ad1b50 RK |
604 | $this->type("xpath=//div[@id='priceset']/div[2]/div[2]/input", '5'); |
605 | $this->fireEvent("xpath=//div[@id='priceset']/div[2]/div[2]/input", 'blur'); | |
606 | $this->waitForElementPresent("xpath=//div[@id='priceset']/div[3]/div[2]/div[1]/span/input"); | |
3bbf7318 | 607 | $this->click("xpath=//div[@id='priceset']/div[3]/div[2]/div[1]/span/input"); |
608 | $this->click("xpath=//div[@id='priceset']/div[4]/div[2]/div[1]/span/input"); | |
609 | $this->click("xpath=//div[@id='priceset']/div[4]/div[2]/div[2]/span/input"); | |
76e86fd8 | 610 | |
7f587af0 PN |
611 | // Select payment method = Check and enter chk number |
612 | $this->select('payment_instrument_id', 'value=4'); | |
613 | $this->waitForElementPresent('check_number'); | |
76e86fd8 CW |
614 | $this->type('check_number', '1044'); |
615 | ||
7f587af0 PN |
616 | // Clicking save. |
617 | $this->click('_qf_Participant_upload-bottom'); | |
618 | $this->waitForPageToLoad($this->getTimeoutMsec()); | |
76e86fd8 | 619 | |
7f587af0 | 620 | // Is status message correct? |
7df6dc24 | 621 | $this->waitForText("crm-notification-container", "Event registration for $displayName has been added"); |
76e86fd8 | 622 | |
9ffaaf79 | 623 | $this->waitForElementPresent("xpath=//form[@id='Search']//table//tbody/tr[1]/td[8]/span/a[text()='View']"); |
7f587af0 | 624 | //click through to the participant view screen |
9ffaaf79 | 625 | $this->click("xpath=//form[@id='Search']//table//tbody/tr[1]/td[8]/span/a[text()='View']"); |
7f587af0 | 626 | $this->waitForElementPresent('_qf_ParticipantView_cancel-bottom'); |
76e86fd8 | 627 | |
7f587af0 PN |
628 | $this->webtestVerifyTabularData( |
629 | array( | |
630 | 'Event' => $eventTitle, | |
631 | 'Participant Role' => 'Attendee', | |
632 | 'Status' => 'Registered', | |
633 | 'Event Source' => 'Event StandaloneAddTest Webtest', | |
7f587af0 PN |
634 | ) |
635 | ); | |
e6c6db94 | 636 | $this->waitForElementPresent("xpath=//table/tbody/tr/td[text()='Fees']/following-sibling::td"); |
637 | $this->verifyText("xpath=//table/tbody/tr/td[text()='Fees']/following-sibling::td/table/tbody/tr[2]/td", preg_quote('$ 2,705.00'), 'In line ' . __LINE__); | |
7f587af0 PN |
638 | $expectedLineItems = array( |
639 | 2 => array( | |
640 | 1 => 'Full Conference', | |
641 | 2 => '5', | |
642 | 3 => '$ 525.00', | |
643 | 4 => '$ 2,625.00', | |
644 | ), | |
645 | 3 => array( | |
646 | 2 => '1', | |
647 | 3 => '$ 50.00', | |
648 | 4 => '$ 50.00', | |
649 | ), | |
650 | 4 => array( | |
651 | 1 => 'Evening Sessions - First Night', | |
652 | 2 => '1', | |
653 | 3 => '$ 15.00', | |
654 | 4 => '$ 15.00', | |
655 | ), | |
656 | 5 => array( | |
657 | 1 => 'Evening Sessions - Second Night', | |
658 | 2 => '1', | |
659 | 3 => '$ 15.00', | |
660 | 4 => '$ 15.00', | |
661 | ), | |
662 | ); | |
663 | $this->_checkLineItems($expectedLineItems); | |
664 | // check contribution record as well | |
665 | // click through to the contribution view screen | |
9ffaaf79 | 666 | $this->click("xpath=//*[@id='ParticipantView']/div[2]/table[@class='selector row-highlight']/tbody/tr[1]/td[8]/span/a[text()='View']"); |
7f587af0 PN |
667 | $this->waitForElementPresent('_qf_ContributionView_cancel-bottom'); |
668 | ||
669 | $this->webtestVerifyTabularData( | |
670 | array( | |
671 | 'From' => $displayName, | |
672 | 'Financial Type' => 'Event Fee', | |
673 | 'Contribution Status' => 'Completed', | |
674 | 'Paid By' => 'Check', | |
675 | 'Check Number' => '1044', | |
7f587af0 PN |
676 | 'Received Into' => 'Deposit Bank Account', |
677 | ) | |
678 | ); | |
60709d21 | 679 | $this->verifyText("xpath=//td[text()='Contribution Amount']/following-sibling::td//div/div", preg_quote('Contribution Total: $ 2,705.00')); |
7f587af0 | 680 | } |
76e86fd8 | 681 | |
9669d0f3 | 682 | |
00be9182 | 683 | public function testDeletePriceSetforEventTemplate() { |
9669d0f3 RN |
684 | // Log in using webtestLogin() method |
685 | $this->webtestLogin(); | |
4cbe18b8 | 686 | |
9669d0f3 RN |
687 | $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7); |
688 | $usedFor = 'Event'; | |
689 | $setHelp = 'Select your conference options.'; | |
690 | $this->_testAddSet($setTitle, $usedFor, $setHelp); | |
4cbe18b8 | 691 | |
9669d0f3 RN |
692 | // Get the price set id ($sid) by retrieving and parsing the URL of the New Price Field form |
693 | // which is where we are after adding Price Set. | |
694 | $sid = $this->urlArg('sid'); | |
695 | $this->assertType('numeric', $sid); | |
4cbe18b8 | 696 | |
9669d0f3 RN |
697 | $validStrings = array(); |
698 | $fields = array( | |
699 | 'Test Field' => 'Text', | |
700 | ); | |
701 | $this->_testAddPriceFields($fields, $validateStrings); | |
702 | ||
703 | // load the Price Set Preview and check for expected values | |
704 | $this->_testVerifyPriceSet($validateStrings, $sid); | |
705 | $this->openCiviPage('admin/eventTemplate', 'reset=1'); | |
706 | $this->clickLink('newEventTemplate'); | |
707 | $this->select("template_id", "value=6"); | |
708 | // Wait for event type to be filled in (since page reloads) | |
3379d026 | 709 | $this->waitForElementPresent("template_id"); |
9669d0f3 | 710 | // Enter Event Title, Summary and Description |
3379d026 | 711 | $this->select("event_type_id", "value=4"); |
712 | $this->select("default_role_id", "value=1"); | |
9669d0f3 RN |
713 | $this->type("title", "Test Event"); |
714 | $this->type("summary", "This is a great conference. Sign up now!"); | |
4cbe18b8 | 715 | |
3379d026 | 716 | $this->click("_qf_EventInfo_upload-bottom"); |
717 | $this->waitForElementPresent('link=Fees'); | |
9669d0f3 RN |
718 | // Go to Fees tab |
719 | $this->click('link=Fees'); | |
720 | $this->waitForElementPresent('_qf_Fee_upload-bottom'); | |
721 | $this->click('CIVICRM_QFID_1_is_monetary'); | |
6c6e6187 | 722 | $this->select('financial_type_id', 'label=Event Fee'); |
9669d0f3 RN |
723 | $this->select('price_set_id', 'label=' . $setTitle); |
724 | $templateId = $this->urlArg('id'); | |
3379d026 | 725 | $this->click('_qf_Fee_upload-bottom'); |
4cbe18b8 | 726 | |
9669d0f3 RN |
727 | //check the delete for price field |
728 | $this->openCiviPage("admin/price/field", "reset=1&action=browse&sid={$sid}"); | |
4cbbec00 | 729 | $this->waitForElementPresent("xpath=//table[@id='options']/tbody/tr/td[9]/span[2]"); |
3e60ff7f | 730 | $this->click("xpath=//table[@id='options']/tbody/tr/td[9]/span[2]/ul/li[2]/a"); |
9669d0f3 | 731 | //assert the message |
5be3afb2 | 732 | $this->waitForText('price_set_used_by', |
733 | "it is currently in use by one or more active events or contribution pages or contributions or event templates."); | |
4cbe18b8 | 734 | |
9669d0f3 RN |
735 | //check the delete for priceset |
736 | $this->openCiviPage("admin/price", "reset=1"); | |
5c80555f WA |
737 | $this->waitForElementPresent("xpath=//div[@class='dataTables_wrapper no-footer']/table/tbody/tr/td[4]/span[2]"); |
738 | $this->click("xpath=//div[@class='dataTables_wrapper no-footer']/table/tbody/tr/td[4]/span[2]/ul/li[3]/a"); | |
9669d0f3 | 739 | // Check confirmation alert. |
6c6e6187 | 740 | $this->assertTrue((bool) preg_match("/^Are you sure you want to delete this price set?/", |
9669d0f3 RN |
741 | $this->getConfirmation() |
742 | )); | |
743 | $this->chooseOkOnNextConfirmation(); | |
744 | $this->waitForPageToLoad($this->getTimeoutMsec()); | |
745 | //assert the message | |
5be3afb2 | 746 | $this->waitForText('price_set_used_by', |
747 | "it is currently in use by one or more active events or contribution pages or contributions or event templates."); | |
9669d0f3 | 748 | } |
4cbe18b8 EM |
749 | |
750 | /** | |
100fef9d | 751 | * @param array $expectedLineItems |
4cbe18b8 | 752 | */ |
00be9182 | 753 | public function _checkLineItems($expectedLineItems) { |
76e86fd8 | 754 | foreach ($expectedLineItems as $lineKey => $lineValue) { |
76e86fd8 | 755 | foreach ($lineValue as $key => $value) { |
9ffaaf79 | 756 | $this->verifyText("xpath=//table/tbody//tr/td[text()='Selections']/following-sibling::td/table/tbody//tr[$lineKey]/td[$key]", preg_quote($value)); |
7f587af0 PN |
757 | } |
758 | } | |
759 | } | |
96025800 | 760 | |
6a488035 | 761 | } |