INFRA-132 - Change "else if" to "elseif"
[civicrm-core.git] / tests / phpunit / WebTest / Event / AddPricesetTest.php
CommitLineData
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 +--------------------------------------------------------------------+
25*/
26
6a488035 27require_once 'CiviTest/CiviSeleniumTestCase.php';
e9479dcf
EM
28
29/**
30 * Class WebTest_Event_AddPricesetTest
31 */
6a488035
TO
32class 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
TO
121 1 => array(
122 'label' => 'Chicken',
6a488035
TO
123 'amount' => '30.00',
124 'financial_type_id' => 'Donation'
125 ),
126 2 => array(
127 'label' => 'Vegetarian',
128 'amount' => '25.00',
129 'financial_type_id' => 'Donation'
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
TO
140 1 => array(
141 'label' => 'Yes',
6a488035 142 'amount' => '50.00',
76e86fd8
CW
143 'financial_type_id' => 'Donation'
144
6a488035
TO
145 ),
146 2 => array(
147 'label' => 'No',
148 'amount' => '0',
149 'financial_type_id' => 'Donation'
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
TO
161 1 => array(
162 'label' => 'First Night',
6a488035
TO
163 'amount' => '15.00',
164 'financial_type_id' => 'Donation'
165 ),
166 2 => array(
167 'label' => 'Second Night',
168 'amount' => '15.00',
169 'financial_type_id' => 'Donation'
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');
3e60ff7f 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
TO
265 $this->click('CIVICRM_QFID_1_is_monetary');
266 $this->click("xpath=//tr[@class='crm-event-manage-fee-form-block-payment_processor']/td[2]/label[text()='$processorName']");
6c6e6187 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)
408 $this->fillRichTextField('description', $eventDescription );
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);
5f0e3af6
DG
462 $lastName = 'Anderson'. substr(sha1(rand()), 0, 7);
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
76e86fd8 504
7f587af0 505 * multiple price fields in price-set
76e86fd8
CW
506 * CRM-11986
507
7f587af0
PN
508 *
509 */
00be9182 510 public function testEventWithPriceSet() {
76e86fd8 511
7f587af0
PN
512 // Log in using webtestLogin() method
513 $this->webtestLogin();
76e86fd8 514
7f587af0
PN
515 // Adding contact with randomized first name (so we can then select that contact when creating event registration)
516 // We're using Quick Add block on the main page for this.
517 $firstName = substr(sha1(rand()), 0, 7);
5f0e3af6
DG
518 $lastName = 'Anderson'. substr(sha1(rand()), 0, 7);
519 $this->webtestAddContact($firstName, $lastName, TRUE);
520 $contactName = "$lastName, $firstName";
521 $displayName = "$firstName $lastName";
76e86fd8 522
7f587af0 523 $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7);
42daf119
CW
524 $usedFor = 'Event';
525 $setHelp = 'Select your conference options.';
7f587af0
PN
526 $this->_testAddSet($setTitle, $usedFor, $setHelp);
527
528 // Get the price set id ($sid) by retrieving and parsing the URL of the New Price Field form
529 // which is where we are after adding Price Set.
a471a3b6 530 $sid = $this->urlArg('sid');
7f587af0
PN
531 $this->assertType('numeric', $sid);
532
533 $validStrings = array();
534 $fields = array(
535 'Full Conference' => 'Text',
536 'Pre-conference Meetup?' => 'Radio',
537 'Evening Sessions' => 'CheckBox',
538 );
539 $this->_testAddPriceFields($fields, $validateStrings);
76e86fd8 540
7f587af0
PN
541 // load the Price Set Preview and check for expected values
542 $this->_testVerifyPriceSet($validateStrings, $sid);
42daf119 543
8b67c4d0 544 $this->openCiviPage('event/add', 'reset=1&action=add', '_qf_EventInfo_upload-bottom');
7f587af0 545
42daf119
CW
546 $eventTitle = 'My Conference - ' . substr(sha1(rand()), 0, 7);
547 $email = 'Smith' . substr(sha1(rand()), 0, 7) . '@example.com';
7f587af0 548 $eventDescription = 'Here is a description for this conference.';
7f587af0 549
7f587af0 550 $this->select('event_type_id', 'value=1');
76e86fd8 551
7f587af0
PN
552 // Attendee role s/b selected now.
553 $this->select('default_role_id', 'value=1');
76e86fd8 554
7f587af0
PN
555 // Enter Event Title, Summary and Description
556 $this->type('title', $eventTitle);
557 $this->type('summary', 'This is a great conference. Sign up now!');
76e86fd8 558
7f587af0
PN
559 // Type description in ckEditor (fieldname, text to type, editor)
560 $this->fillRichTextField('description', $eventDescription);
76e86fd8 561
7f587af0
PN
562 // Choose Start and End dates.
563 // Using helper webtestFillDate function.
564 $this->webtestFillDateTime("start_date", "+1 week");
565 $this->webtestFillDateTime("end_date", "+1 week 1 day 8 hours ");
566
567 $this->type('max_participants', '50');
568 $this->click('is_map');
569 $this->click('_qf_EventInfo_upload-bottom');
570
571 // Wait for Location tab form to load
572 $this->waitForPageToLoad($this->getTimeoutMsec());
573
574 // Go to Fees tab
575 $this->click('link=Fees');
576 $this->waitForElementPresent('_qf_Fee_upload-bottom');
577 $this->click('CIVICRM_QFID_1_is_monetary');
6c6e6187 578 $this->select('financial_type_id', 'label=Event Fee');
7f587af0 579 $this->select('price_set_id', 'label=' . $setTitle);
76e86fd8 580
7f587af0 581 $this->click('_qf_Fee_upload-bottom');
6c6e6187 582 $this->waitForText("crm-notification-container", "'Fees' information has been saved.");
7f587af0 583
42daf119 584 $this->openCiviPage('participant/add', 'reset=1&action=add&context=standalone', '_qf_Participant_upload-bottom');
7f587af0 585
7f587af0
PN
586 // Type contact last name in contact auto-complete, wait for dropdown and click first result
587 $this->webtestFillAutocomplete($firstName);
9ffaaf79 588 $this->select2('event_id', $eventTitle);
7f587af0 589 // Select role
e6c6db94 590 $this->multiselect2('role_id', array('Volunteer'));
76e86fd8 591
7f587af0
PN
592 // Choose Registration Date.
593 // Using helper webtestFillDate function.
594 $this->webtestFillDate('register_date', 'now');
595 $today = date('F jS, Y', strtotime('now'));
596 // May 5th, 2010
76e86fd8 597
7f587af0
PN
598 // Select participant status
599 $this->select('status_id', 'value=1');
600
601 // Setting registration source
602 $this->type('source', 'Event StandaloneAddTest Webtest');
76e86fd8 603
7f587af0 604 // Select an event fee
4cbbec00 605 $this->waitForElementPresent("xpath=//div[@id='priceset']/div[2]/div[2]/input");
60ad1b50
RK
606 $this->type("xpath=//div[@id='priceset']/div[2]/div[2]/input", '5');
607 $this->fireEvent("xpath=//div[@id='priceset']/div[2]/div[2]/input", 'blur');
608 $this->waitForElementPresent("xpath=//div[@id='priceset']/div[3]/div[2]/div[1]/span/input");
3bbf7318 609 $this->click("xpath=//div[@id='priceset']/div[3]/div[2]/div[1]/span/input");
610 $this->click("xpath=//div[@id='priceset']/div[4]/div[2]/div[1]/span/input");
611 $this->click("xpath=//div[@id='priceset']/div[4]/div[2]/div[2]/span/input");
76e86fd8 612
7f587af0
PN
613 // Select payment method = Check and enter chk number
614 $this->select('payment_instrument_id', 'value=4');
615 $this->waitForElementPresent('check_number');
76e86fd8
CW
616 $this->type('check_number', '1044');
617
7f587af0
PN
618 // Clicking save.
619 $this->click('_qf_Participant_upload-bottom');
620 $this->waitForPageToLoad($this->getTimeoutMsec());
76e86fd8 621
7f587af0 622 // Is status message correct?
7df6dc24 623 $this->waitForText("crm-notification-container", "Event registration for $displayName has been added");
76e86fd8 624
9ffaaf79 625 $this->waitForElementPresent("xpath=//form[@id='Search']//table//tbody/tr[1]/td[8]/span/a[text()='View']");
7f587af0 626 //click through to the participant view screen
9ffaaf79 627 $this->click("xpath=//form[@id='Search']//table//tbody/tr[1]/td[8]/span/a[text()='View']");
7f587af0 628 $this->waitForElementPresent('_qf_ParticipantView_cancel-bottom');
76e86fd8 629
7f587af0
PN
630 $this->webtestVerifyTabularData(
631 array(
632 'Event' => $eventTitle,
633 'Participant Role' => 'Attendee',
634 'Status' => 'Registered',
635 'Event Source' => 'Event StandaloneAddTest Webtest',
7f587af0
PN
636 )
637 );
e6c6db94 638 $this->waitForElementPresent("xpath=//table/tbody/tr/td[text()='Fees']/following-sibling::td");
639 $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
640 $expectedLineItems = array(
641 2 => array(
642 1 => 'Full Conference',
643 2 => '5',
644 3 => '$ 525.00',
645 4 => '$ 2,625.00',
646 ),
647 3 => array(
648 2 => '1',
649 3 => '$ 50.00',
650 4 => '$ 50.00',
651 ),
652 4 => array(
653 1 => 'Evening Sessions - First Night',
654 2 => '1',
655 3 => '$ 15.00',
656 4 => '$ 15.00',
657 ),
658 5 => array(
659 1 => 'Evening Sessions - Second Night',
660 2 => '1',
661 3 => '$ 15.00',
662 4 => '$ 15.00',
663 ),
664 );
665 $this->_checkLineItems($expectedLineItems);
666 // check contribution record as well
667 // click through to the contribution view screen
9ffaaf79 668 $this->click("xpath=//*[@id='ParticipantView']/div[2]/table[@class='selector row-highlight']/tbody/tr[1]/td[8]/span/a[text()='View']");
7f587af0
PN
669 $this->waitForElementPresent('_qf_ContributionView_cancel-bottom');
670
671 $this->webtestVerifyTabularData(
672 array(
673 'From' => $displayName,
674 'Financial Type' => 'Event Fee',
675 'Contribution Status' => 'Completed',
676 'Paid By' => 'Check',
677 'Check Number' => '1044',
7f587af0
PN
678 'Received Into' => 'Deposit Bank Account',
679 )
680 );
60709d21 681 $this->verifyText("xpath=//td[text()='Contribution Amount']/following-sibling::td//div/div", preg_quote('Contribution Total: $ 2,705.00'));
7f587af0 682 }
76e86fd8 683
9669d0f3 684
00be9182 685 public function testDeletePriceSetforEventTemplate() {
9669d0f3
RN
686 // Log in using webtestLogin() method
687 $this->webtestLogin();
4cbe18b8 688
9669d0f3
RN
689 $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7);
690 $usedFor = 'Event';
691 $setHelp = 'Select your conference options.';
692 $this->_testAddSet($setTitle, $usedFor, $setHelp);
4cbe18b8 693
9669d0f3
RN
694 // Get the price set id ($sid) by retrieving and parsing the URL of the New Price Field form
695 // which is where we are after adding Price Set.
696 $sid = $this->urlArg('sid');
697 $this->assertType('numeric', $sid);
4cbe18b8 698
9669d0f3
RN
699 $validStrings = array();
700 $fields = array(
701 'Test Field' => 'Text',
702 );
703 $this->_testAddPriceFields($fields, $validateStrings);
704
705 // load the Price Set Preview and check for expected values
706 $this->_testVerifyPriceSet($validateStrings, $sid);
707 $this->openCiviPage('admin/eventTemplate', 'reset=1');
708 $this->clickLink('newEventTemplate');
709 $this->select("template_id", "value=6");
710 // Wait for event type to be filled in (since page reloads)
3379d026 711 $this->waitForElementPresent("template_id");
9669d0f3 712 // Enter Event Title, Summary and Description
3379d026 713 $this->select("event_type_id", "value=4");
714 $this->select("default_role_id", "value=1");
9669d0f3
RN
715 $this->type("title", "Test Event");
716 $this->type("summary", "This is a great conference. Sign up now!");
4cbe18b8 717
3379d026 718 $this->click("_qf_EventInfo_upload-bottom");
719 $this->waitForElementPresent('link=Fees');
9669d0f3
RN
720 // Go to Fees tab
721 $this->click('link=Fees');
722 $this->waitForElementPresent('_qf_Fee_upload-bottom');
723 $this->click('CIVICRM_QFID_1_is_monetary');
6c6e6187 724 $this->select('financial_type_id', 'label=Event Fee');
9669d0f3
RN
725 $this->select('price_set_id', 'label=' . $setTitle);
726 $templateId = $this->urlArg('id');
3379d026 727 $this->click('_qf_Fee_upload-bottom');
4cbe18b8 728
9669d0f3
RN
729 //check the delete for price field
730 $this->openCiviPage("admin/price/field", "reset=1&action=browse&sid={$sid}");
4cbbec00 731 $this->waitForElementPresent("xpath=//table[@id='options']/tbody/tr/td[9]/span[2]");
3e60ff7f 732 $this->click("xpath=//table[@id='options']/tbody/tr/td[9]/span[2]/ul/li[2]/a");
9669d0f3 733 //assert the message
5be3afb2 734 $this->waitForText('price_set_used_by',
735 "it is currently in use by one or more active events or contribution pages or contributions or event templates.");
4cbe18b8 736
9669d0f3
RN
737 //check the delete for priceset
738 $this->openCiviPage("admin/price", "reset=1");
739 $this->click("xpath=//table[@id='option11']/tbody/tr/td[4]/span[2]/ul/li[3]/a");
740 // Check confirmation alert.
6c6e6187 741 $this->assertTrue((bool) preg_match("/^Are you sure you want to delete this price set?/",
9669d0f3
RN
742 $this->getConfirmation()
743 ));
744 $this->chooseOkOnNextConfirmation();
745 $this->waitForPageToLoad($this->getTimeoutMsec());
746 //assert the message
5be3afb2 747 $this->waitForText('price_set_used_by',
748 "it is currently in use by one or more active events or contribution pages or contributions or event templates.");
9669d0f3 749 }
4cbe18b8
EM
750
751 /**
100fef9d 752 * @param array $expectedLineItems
4cbe18b8 753 */
00be9182 754 public function _checkLineItems($expectedLineItems) {
76e86fd8 755 foreach ($expectedLineItems as $lineKey => $lineValue) {
76e86fd8 756 foreach ($lineValue as $key => $value) {
9ffaaf79 757 $this->verifyText("xpath=//table/tbody//tr/td[text()='Selections']/following-sibling::td/table/tbody//tr[$lineKey]/td[$key]", preg_quote($value));
7f587af0
PN
758 }
759 }
760 }
6a488035 761}