Merge pull request #4940 from mlutfy/crm15824
[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 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']");
6a488035
TO
267 $this->select('financial_type_id','label=Event Fee');
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 }
6a488035 760}