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