CRM-14078 - 'Payment Instrument' -> 'Payment Method'
[civicrm-core.git] / tests / phpunit / WebTest / Event / AddPricesetTest.php
CommitLineData
6a488035
TO
1<?php
2/*
3 +--------------------------------------------------------------------+
39de6fd5 4 | CiviCRM version 4.6 |
6a488035 5 +--------------------------------------------------------------------+
e7112fa7 6 | Copyright CiviCRM LLC (c) 2004-2015 |
6a488035
TO
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
13 | |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
18 | |
19 | You should have received a copy of the GNU Affero General Public |
20 | License along with this program; if not, contact CiviCRM LLC |
21 | at info[AT]civicrm[DOT]org. If you have questions about the |
22 | GNU Affero General Public License or the licensing of CiviCRM, |
23 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
24 +--------------------------------------------------------------------+
d25dd0ee 25 */
6a488035 26
6a488035 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
b87dcbda 199 if ($this->isElementPresent("xpath=//*[@class ='select2-chosen']")) {
200 $this->clickAt("xpath=//*[@class ='select2-chosen']");
201 }
6a488035
TO
202 $this->assertStringsPresent($validateStrings);
203 }
204
00be9182 205 public function testRegisterWithPriceSet() {
6a488035
TO
206 // Log in using webtestLogin() method
207 $this->webtestLogin();
208
209 $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7);
42daf119
CW
210 $usedFor = 'Event';
211 $setHelp = 'Select your conference options.';
6a488035
TO
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.
a471a3b6 216 $sid = $this->urlArg('sid');
6a488035
TO
217 $this->assertType('numeric', $sid);
218
219 $validStrings = array();
220 $fields = array(
221 'Full Conference' => 'Text',
6a488035
TO
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
c3ad8633
CW
230 // Use default payment processor
231 $processorName = 'Test Processor';
6a488035
TO
232 $this->webtestAddPaymentProcessor($processorName);
233
8b67c4d0 234 $this->openCiviPage('event/add', 'reset=1&action=add', '_qf_EventInfo_upload-bottom');
6a488035 235
42daf119
CW
236 $eventTitle = 'My Conference - ' . substr(sha1(rand()), 0, 7);
237 $email = 'Smith' . substr(sha1(rand()), 0, 7) . '@example.com';
6a488035
TO
238 $eventDescription = 'Here is a description for this conference.';
239
6a488035
TO
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
3379d026 262 $this->waitForElementPresent('_qf_Location_upload_done-bottom');
6a488035
TO
263
264 // Go to Fees tab
265 $this->click('link=Fees');
3379d026 266 $this->waitForElementPresent('_qf_Fee_upload_done-bottom');
6a488035 267 $this->click('CIVICRM_QFID_1_is_monetary');
e0f528d0 268 $this->click("xpath=//table[@id='paymentProcessor']/tbody/tr[1]/td[2]/label[text()='$processorName']");
389bcebf 269 $this->select('financial_type_id', 'label=Event Fee');
6a488035
TO
270 $this->select('price_set_id', 'label=' . $setTitle);
271
6a488035
TO
272 // intro text for registration page
273 $registerIntro = 'Fill in all the fields below and click Continue.';
3379d026 274 $this->clickLink('_qf_Fee_upload-bottom', 'link=Online Registration', FALSE);
6a488035
TO
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
e390a377 283 $this->fillRichTextField('intro_text', $registerIntro, 'CKEditor', TRUE);
6a488035
TO
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');
3379d026 291 $this->waitForTextPresent("'Online Registration' information has been saved.");
6a488035
TO
292
293 // verify event input on info page
294 // start at Manage Events listing
a9f5275d 295 $this->openCiviPage('event/manage', 'reset=1');
6a488035
TO
296 $this->click("link=$eventTitle");
297
298 $this->waitForPageToLoad($this->getTimeoutMsec());
299 $eventInfoUrl = $this->getLocation();
300
3379d026 301 $permissions = array("edit-1-register-for-events");
302 $this->changePermissions($permissions);
42daf119 303 $this->webtestLogout();
6a488035
TO
304 $this->open($eventInfoUrl);
305 $this->click('link=Register Now');
306 $this->waitForElementPresent('_qf_Register_upload-bottom');
307
3379d026 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']");
70452444 311 $this->type("first_name", "Jane");
312 $lastName = "Smith" . substr(sha1(rand()), 0, 7);
313 $this->type("last_name", $lastName);
6a488035
TO
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');
70452444 323 $this->type('billing_last_name', $lastName);
6a488035
TO
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
225a8648 330 $this->clickLink('_qf_Register_upload-bottom', '_qf_Confirm_next-bottom');
6a488035
TO
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
6a488035
TO
338 // Log in using webtestLogin() method
339 $this->webtestLogin();
340
341 //Find Participant
8b67c4d0 342 $this->openCiviPage('event/search', 'reset=1', '_qf_Search_refresh');
6a488035
TO
343
344 $this->type('sort_name', "$email");
225a8648 345 $this->clickLink('_qf_Search_refresh', "xpath=id('participantSearch')/table/tbody/tr/td[11]/span/a[text()='View']");
6a488035
TO
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) {
3379d026 355 $this->verifyText("xpath=id('ParticipantView')/div[2]/table[1]/tbody/tr[8]/td[2]/table/tbody/tr[$value]/td", $label);
6a488035
TO
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
00be9182 362 public function testParticipantWithDateSpecificPriceSet() {
6a488035
TO
363
364 // Log in using webtestLogin() method
365 $this->webtestLogin();
366
367 $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7);
42daf119
CW
368 $usedFor = 'Event';
369 $setHelp = 'Select your conference options.';
6a488035
TO
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.
a471a3b6 374 $sid = $this->urlArg('sid');
6a488035
TO
375 $this->assertType('numeric', $sid);
376
377 $validStrings = array();
378 $fields = array(
379 'Full Conference' => 'Text',
6a488035
TO
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
e390a377 442 $this->fillRichTextField('intro_text', $registerIntro, 'CKEditor', TRUE);
6a488035
TO
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');
3379d026 450 $this->waitForTextPresent("'Online Registration' information has been saved.");
6a488035
TO
451
452 // verify event input on info page
453 // start at Manage Events listing
a9f5275d 454 $this->openCiviPage('event/manage', 'reset=1');
6a488035
TO
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);
86bfa4f6 461 $lastName = 'Anderson' . substr(sha1(rand()), 0, 7);
5f0e3af6
DG
462 $this->webtestAddContact($firstName, $lastName, TRUE);
463 $contactName = "$lastName, $firstName";
464 $displayName = "$firstName $lastName";
6a488035 465
8b67c4d0 466 $this->openCiviPage('participant/add', 'reset=1&action=add&context=standalone', '_qf_Participant_upload-bottom');
6a488035 467
6a488035
TO
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.
e6c6db94 472 $this->select2('event_id', "$eventTitle");
6a488035 473 // Select role
e6c6db94 474 $this->multiselect2('role_id', array('Volunteer'));
6a488035 475
5f0e3af6 476 $this->waitForElementPresent("xpath=//input[@class='crm-form-radio']");
3379d026 477 $this->click("xpath=//input[@class='crm-form-radio']");
478 $this->click("xpath=//input[@class='crm-form-checkbox']");
6a488035
TO
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?
e6c6db94 492 $this->waitForText("crm-notification-container", "Event registration for $displayName has been added", "Status message didn't show up after saving!");
6a488035 493
ca0cdd20 494 $this->waitForElementPresent("xpath=//form[@class='CRM_Event_Form_Search crm-search-form']/table//tbody/tr[1]/td[8]/span/a[text()='View']");
6a488035
TO
495
496 //click through to the participant view screen
ca0cdd20 497 $this->click("xpath=//form[@class='CRM_Event_Form_Search crm-search-form']/table/tbody/tr[1]/td[8]/span/a[text()='View']");
e7066c8e 498 $this->waitForElementPresent("xpath=//button//span[contains(text(),'Done')]");
6a488035 499 }
7f587af0
PN
500
501 /**
100fef9d 502 * Test to regiter participant for event with
7f587af0 503 * multiple price fields in price-set
76e86fd8
CW
504 * CRM-11986
505
7f587af0 506 */
00be9182 507 public function testEventWithPriceSet() {
a49e5dea 508 $this->markTestSkipped('Skipping for now as it works fine locally.');
7f587af0
PN
509 // Log in using webtestLogin() method
510 $this->webtestLogin();
76e86fd8 511
7f587af0
PN
512 // Adding contact with randomized first name (so we can then select that contact when creating event registration)
513 // We're using Quick Add block on the main page for this.
514 $firstName = substr(sha1(rand()), 0, 7);
86bfa4f6 515 $lastName = 'Anderson' . substr(sha1(rand()), 0, 7);
5f0e3af6
DG
516 $this->webtestAddContact($firstName, $lastName, TRUE);
517 $contactName = "$lastName, $firstName";
518 $displayName = "$firstName $lastName";
76e86fd8 519
7f587af0 520 $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7);
42daf119
CW
521 $usedFor = 'Event';
522 $setHelp = 'Select your conference options.';
7f587af0
PN
523 $this->_testAddSet($setTitle, $usedFor, $setHelp);
524
525 // Get the price set id ($sid) by retrieving and parsing the URL of the New Price Field form
526 // which is where we are after adding Price Set.
a471a3b6 527 $sid = $this->urlArg('sid');
7f587af0
PN
528 $this->assertType('numeric', $sid);
529
530 $validStrings = array();
531 $fields = array(
532 'Full Conference' => 'Text',
533 'Pre-conference Meetup?' => 'Radio',
534 'Evening Sessions' => 'CheckBox',
535 );
536 $this->_testAddPriceFields($fields, $validateStrings);
76e86fd8 537
7f587af0
PN
538 // load the Price Set Preview and check for expected values
539 $this->_testVerifyPriceSet($validateStrings, $sid);
42daf119 540
8b67c4d0 541 $this->openCiviPage('event/add', 'reset=1&action=add', '_qf_EventInfo_upload-bottom');
7f587af0 542
42daf119
CW
543 $eventTitle = 'My Conference - ' . substr(sha1(rand()), 0, 7);
544 $email = 'Smith' . substr(sha1(rand()), 0, 7) . '@example.com';
7f587af0 545 $eventDescription = 'Here is a description for this conference.';
7f587af0 546
7f587af0 547 $this->select('event_type_id', 'value=1');
76e86fd8 548
7f587af0
PN
549 // Attendee role s/b selected now.
550 $this->select('default_role_id', 'value=1');
76e86fd8 551
7f587af0
PN
552 // Enter Event Title, Summary and Description
553 $this->type('title', $eventTitle);
554 $this->type('summary', 'This is a great conference. Sign up now!');
76e86fd8 555
7f587af0
PN
556 // Type description in ckEditor (fieldname, text to type, editor)
557 $this->fillRichTextField('description', $eventDescription);
76e86fd8 558
7f587af0
PN
559 // Choose Start and End dates.
560 // Using helper webtestFillDate function.
561 $this->webtestFillDateTime("start_date", "+1 week");
562 $this->webtestFillDateTime("end_date", "+1 week 1 day 8 hours ");
563
564 $this->type('max_participants', '50');
565 $this->click('is_map');
566 $this->click('_qf_EventInfo_upload-bottom');
567
568 // Wait for Location tab form to load
569 $this->waitForPageToLoad($this->getTimeoutMsec());
570
571 // Go to Fees tab
572 $this->click('link=Fees');
573 $this->waitForElementPresent('_qf_Fee_upload-bottom');
574 $this->click('CIVICRM_QFID_1_is_monetary');
6c6e6187 575 $this->select('financial_type_id', 'label=Event Fee');
7f587af0 576 $this->select('price_set_id', 'label=' . $setTitle);
76e86fd8 577
7f587af0 578 $this->click('_qf_Fee_upload-bottom');
6c6e6187 579 $this->waitForText("crm-notification-container", "'Fees' information has been saved.");
38653166 580 $this->waitForAjaxContent();
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
eba7445e 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
eba7445e 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");
ba4a1892 637 $this->verifyText("xpath=//table/tbody/tr/td[text()='Fees']/following-sibling::td/table/tbody/tr[2]/td", preg_quote('$ 2,705.00'));
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() {
a49e5dea 684 $this->markTestSkipped('Skipping for now as it works fine locally.');
9669d0f3
RN
685 // Log in using webtestLogin() method
686 $this->webtestLogin();
4cbe18b8 687
9669d0f3
RN
688 $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7);
689 $usedFor = 'Event';
690 $setHelp = 'Select your conference options.';
691 $this->_testAddSet($setTitle, $usedFor, $setHelp);
4cbe18b8 692
9669d0f3
RN
693 // Get the price set id ($sid) by retrieving and parsing the URL of the New Price Field form
694 // which is where we are after adding Price Set.
695 $sid = $this->urlArg('sid');
696 $this->assertType('numeric', $sid);
4cbe18b8 697
9669d0f3
RN
698 $validStrings = array();
699 $fields = array(
700 'Test Field' => 'Text',
701 );
702 $this->_testAddPriceFields($fields, $validateStrings);
703
704 // load the Price Set Preview and check for expected values
705 $this->_testVerifyPriceSet($validateStrings, $sid);
706 $this->openCiviPage('admin/eventTemplate', 'reset=1');
707 $this->clickLink('newEventTemplate');
708 $this->select("template_id", "value=6");
709 // Wait for event type to be filled in (since page reloads)
3379d026 710 $this->waitForElementPresent("template_id");
9669d0f3 711 // Enter Event Title, Summary and Description
3379d026 712 $this->select("event_type_id", "value=4");
713 $this->select("default_role_id", "value=1");
ea83a78e 714 $this->waitForAjaxContent();
0391e7ab 715 $this->type("title", "Test Event");
9669d0f3 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
38653166 734 $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.");
4cbe18b8 735
9669d0f3
RN
736 //check the delete for priceset
737 $this->openCiviPage("admin/price", "reset=1");
ca0cdd20 738 $this->waitForElementPresent("xpath=//table[@class='display crm-price-set-listing dataTable no-footer']/tbody/tr/td[4]/span[2]");
5c80555f 739 $this->click("xpath=//div[@class='dataTables_wrapper no-footer']/table/tbody/tr/td[4]/span[2]/ul/li[3]/a");
9669d0f3 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 }
96025800 761
6a488035 762}