Commit | Line | Data |
---|---|---|
6a488035 TO |
1 | <?php |
2 | /* | |
3 | +--------------------------------------------------------------------+ | |
39de6fd5 | 4 | | CiviCRM version 4.6 | |
6a488035 | 5 | +--------------------------------------------------------------------+ |
06a1bc01 | 6 | | Copyright CiviCRM LLC (c) 2004-2014 | |
6a488035 TO |
7 | +--------------------------------------------------------------------+ |
8 | | This file is a part of CiviCRM. | | |
9 | | | | |
10 | | CiviCRM is free software; you can copy, modify, and distribute it | | |
11 | | under the terms of the GNU Affero General Public License | | |
12 | | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | | |
13 | | | | |
14 | | CiviCRM is distributed in the hope that it will be useful, but | | |
15 | | WITHOUT ANY WARRANTY; without even the implied warranty of | | |
16 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | | |
17 | | See the GNU Affero General Public License for more details. | | |
18 | | | | |
19 | | You should have received a copy of the GNU Affero General Public | | |
20 | | License along with this program; if not, contact CiviCRM LLC | | |
21 | | at info[AT]civicrm[DOT]org. If you have questions about the | | |
22 | | GNU Affero General Public License or the licensing of CiviCRM, | | |
23 | | see the CiviCRM license FAQ at http://civicrm.org/licensing | | |
24 | +--------------------------------------------------------------------+ | |
25 | */ | |
26 | ||
6a488035 | 27 | require_once 'CiviTest/CiviSeleniumTestCase.php'; |
e9479dcf EM |
28 | |
29 | /** | |
30 | * Class WebTest_Contribute_AddPricesetTest | |
31 | */ | |
6a488035 TO |
32 | class WebTest_Contribute_AddPricesetTest extends CiviSeleniumTestCase { |
33 | ||
34 | protected function setUp() { | |
35 | parent::setUp(); | |
36 | } | |
76e86fd8 | 37 | |
6a488035 | 38 | function testAddPriceSet() { |
6a488035 TO |
39 | // Log in using webtestLogin() method |
40 | $this->webtestLogin(); | |
41 | ||
42 | //add financial type of account type expense | |
76e86fd8 | 43 | |
6a488035 TO |
44 | $financialType = $this->_testAddFinancialType(); |
45 | ||
46 | $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7); | |
42daf119 CW |
47 | $usedFor = 'Contribution'; |
48 | $setHelp = 'Select your conference options.'; | |
6a488035 TO |
49 | $this->_testAddSet($setTitle, $usedFor, $setHelp, $financialType); |
50 | ||
51 | // Get the price set id ($sid) by retrieving and parsing the URL of the New Price Field form | |
52 | // which is where we are after adding Price Set. | |
a471a3b6 | 53 | $sid = $this->urlArg('sid'); |
6a488035 TO |
54 | $this->assertType('numeric', $sid); |
55 | ||
56 | $validStrings = array(); | |
57 | ||
58 | $fields = array( | |
59 | 'Full Conference' => 'Text', | |
60 | 'Meal Choice' => 'Select', | |
61 | 'Pre-conference Meetup?' => 'Radio', | |
62 | 'Evening Sessions' => 'CheckBox', | |
63 | ); | |
d1c1ddc7 | 64 | $this->_testAddPriceFields($fields, $validateStrings, $financialType); |
6a488035 TO |
65 | // var_dump($validateStrings); |
66 | ||
67 | // load the Price Set Preview and check for expected values | |
68 | $this->_testVerifyPriceSet($validateStrings, $sid); | |
69 | } | |
70 | ||
4cbe18b8 EM |
71 | /** |
72 | * @param $setTitle | |
73 | * @param $usedFor | |
74 | * @param $setHelp | |
75 | * @param null $financialType | |
76 | */ | |
6a488035 | 77 | function _testAddSet($setTitle, $usedFor, $setHelp, $financialType = NULL) { |
42daf119 | 78 | $this->openCiviPage("admin/price", "reset=1&action=add", '_qf_Set_next-bottom'); |
6a488035 TO |
79 | |
80 | // Enter Priceset fields (Title, Used For ...) | |
81 | $this->type('title', $setTitle); | |
82 | if ($usedFor == 'Event') { | |
83 | $this->check('extends_1'); | |
84 | } | |
85 | elseif ($usedFor == 'Contribution') { | |
86 | $this->check('extends_2'); | |
87 | } | |
88 | ||
89 | if ($financialType) { | |
6d5f1345 | 90 | $this->select("financial_type_id", "label={$financialType}"); |
6a488035 TO |
91 | } |
92 | $this->type('help_pre', $setHelp); | |
93 | ||
94 | $this->assertChecked('is_active', 'Verify that Is Active checkbox is set.'); | |
7df6dc24 | 95 | $this->clickLink('_qf_Set_next-bottom'); |
6a488035 TO |
96 | } |
97 | ||
4cbe18b8 EM |
98 | /** |
99 | * @param $fields | |
100 | * @param $validateString | |
101 | * @param $financialType | |
102 | * @param bool $dateSpecificFields | |
103 | */ | |
6a488035 TO |
104 | function _testAddPriceFields(&$fields, &$validateString, $financialType, $dateSpecificFields = FALSE) { |
105 | $validateStrings[] = $financialType; | |
39a2888d CW |
106 | $sid = $this->urlArg('sid'); |
107 | $this->openCiviPage('admin/price/field', "reset=1&action=add&sid=$sid", 'label'); | |
6a488035 TO |
108 | foreach ($fields as $label => $type) { |
109 | $validateStrings[] = $label; | |
76e86fd8 | 110 | |
6a488035 TO |
111 | $this->type('label', $label); |
112 | $this->select('html_type', "value={$type}"); | |
113 | ||
114 | switch ($type) { | |
d1c1ddc7 | 115 | case 'Text': |
116 | $validateStrings[] = '525.00'; | |
117 | $this->type('price', '525.00'); | |
118 | if ($dateSpecificFields == TRUE) { | |
119 | $this->webtestFillDateTime('active_on', '+1 week'); | |
120 | } | |
121 | else { | |
122 | $this->check('is_required'); | |
123 | } | |
124 | break; | |
125 | ||
126 | case 'Select': | |
127 | $options = array( | |
128 | 1 => array( | |
129 | 'label' => 'Chicken', | |
130 | 'amount' => '30.00', | |
131 | ), | |
132 | 2 => array( | |
133 | 'label' => 'Vegetarian', | |
134 | 'amount' => '25.00', | |
135 | ), | |
136 | ); | |
137 | $this->addMultipleChoiceOptions($options, $validateStrings); | |
138 | if ($dateSpecificFields == TRUE) { | |
139 | $this->webtestFillDateTime('expire_on', '-1 week'); | |
140 | } | |
141 | break; | |
142 | ||
143 | case 'Radio': | |
144 | $options = array( | |
145 | 1 => array( | |
146 | 'label' => 'Yes', | |
147 | 'amount' => '50.00', | |
148 | ), | |
149 | 2 => array( | |
150 | 'label' => 'No', | |
151 | 'amount' => '0', | |
152 | ), | |
153 | ); | |
154 | $this->addMultipleChoiceOptions($options, $validateStrings); | |
6a488035 | 155 | $this->check('is_required'); |
d1c1ddc7 | 156 | if ($dateSpecificFields == TRUE) { |
157 | $this->webtestFillDateTime('active_on', '-1 week'); | |
158 | } | |
159 | break; | |
160 | ||
161 | case 'CheckBox': | |
162 | $options = array( | |
163 | 1 => array( | |
164 | 'label' => 'First Night', | |
165 | 'amount' => '15.00', | |
166 | ), | |
167 | 2 => array( | |
168 | 'label' => 'Second Night', | |
169 | 'amount' => '15.00', | |
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; | |
6a488035 TO |
180 | } |
181 | $this->select('financial_type_id', "label={$financialType}"); | |
ba6f320f JP |
182 | $this->clickLink('_qf_Field_next_new-bottom', '_qf_Field_next-bottom', FALSE); |
183 | $this->waitForText('crm-notification-container', "Price Field '$label' has been saved."); | |
6a488035 TO |
184 | } |
185 | } | |
76e86fd8 | 186 | |
4cbe18b8 EM |
187 | /** |
188 | * @return string | |
189 | */ | |
6a488035 | 190 | function _testAddFinancialType() { |
6a488035 | 191 | //Add new Financial Type |
d1c1ddc7 | 192 | $financialType['name'] = 'FinancialType ' . substr(sha1(rand()), 0, 4); |
6a488035 TO |
193 | $financialType['is_deductible'] = TRUE; |
194 | $financialType['is_reserved'] = FALSE; | |
195 | $this->addeditFinancialType($financialType); | |
6a488035 TO |
196 | return $financialType['name']; |
197 | } | |
76e86fd8 | 198 | |
4cbe18b8 EM |
199 | /** |
200 | * @param $validateStrings | |
100fef9d | 201 | * @param int $sid |
4cbe18b8 | 202 | */ |
6a488035 TO |
203 | function _testVerifyPriceSet($validateStrings, $sid) { |
204 | // verify Price Set at Preview page | |
205 | // start at Manage Price Sets listing | |
071a6d2e | 206 | $this->openCiviPage("admin/price", "reset=1"); |
6a488035 TO |
207 | |
208 | // Use the price set id ($sid) to pick the correct row | |
c1d1bf14 | 209 | $this->clickLink("//*[@id='price_set-{$sid}']/td[4]/span[1]/a[1]", 'Link=Add Price Field'); |
6a488035 TO |
210 | // Check for expected price set field strings |
211 | $this->assertStringsPresent($validateStrings); | |
212 | } | |
213 | ||
214 | function testContributeOfflineWithPriceSet() { | |
6a488035 TO |
215 | // Log in using webtestLogin() method |
216 | $this->webtestLogin(); | |
217 | ||
218 | //add financial type of account type expense | |
219 | $financialType = $this->_testAddFinancialType(); | |
76e86fd8 | 220 | |
6a488035 | 221 | $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7); |
42daf119 CW |
222 | $usedFor = 'Contribution'; |
223 | $setHelp = 'Select your conference options.'; | |
6a488035 | 224 | $this->_testAddSet($setTitle, $usedFor, $setHelp, $financialType); |
76e86fd8 | 225 | |
6a488035 TO |
226 | // Get the price set id ($sid) by retrieving and parsing the URL of the New Price Field form |
227 | // which is where we are after adding Price Set. | |
a471a3b6 | 228 | $sid = $this->urlArg('sid'); |
6a488035 TO |
229 | $this->assertType('numeric', $sid); |
230 | ||
231 | $validStrings = array(); | |
232 | $fields = array( | |
233 | 'Full Conference' => 'Text', | |
234 | 'Meal Choice' => 'Select', | |
235 | 'Pre-conference Meetup?' => 'Radio', | |
236 | 'Evening Sessions' => 'CheckBox', | |
237 | ); | |
238 | $this->_testAddPriceFields($fields, $validateStrings, $financialType); | |
239 | ||
240 | // load the Price Set Preview and check for expected values | |
241 | $this->_testVerifyPriceSet($validateStrings, $sid); | |
42daf119 | 242 | $this->openCiviPage("contribute/add", "reset=1&action=add&context=standalone", '_qf_Contribution_upload'); |
6a488035 | 243 | |
6a488035 | 244 | // create new contact using dialog |
80f3b91d | 245 | $this->createDialogContact(); |
6a488035 TO |
246 | |
247 | // select financial type | |
248 | $this->select('financial_type_id', "label={$financialType}"); | |
249 | ||
250 | // fill in Received Date | |
251 | $this->webtestFillDate('receive_date'); | |
252 | ||
253 | // source | |
254 | $this->type('source', 'Mailer 1'); | |
255 | ||
256 | // select price set items | |
257 | $this->select('price_set_id', "label=$setTitle"); | |
77a2a633 | 258 | $this->type("xpath=//input[@class='four crm-form-text required']", "1"); |
259 | $this->click("xpath=//input[@class='crm-form-radio']"); | |
260 | $this->click("xpath=//input[@class='crm-form-checkbox']"); | |
6a488035 TO |
261 | // select payment instrument type = Check and enter chk number |
262 | $this->select('payment_instrument_id', 'value=4'); | |
263 | $this->waitForElementPresent('check_number'); | |
264 | $this->type('check_number', 'check #1041'); | |
265 | ||
266 | $this->type('trxn_id', 'P20901X1' . rand(100, 10000)); | |
267 | ||
268 | //Additional Detail section | |
269 | $this->click('AdditionalDetail'); | |
270 | $this->waitForElementPresent('thankyou_date'); | |
271 | ||
272 | $this->type('note', 'This is a test note.'); | |
273 | $this->type('non_deductible_amount', '10'); | |
274 | $this->type('fee_amount', '0'); | |
275 | $this->type('net_amount', '0'); | |
276 | $this->type('invoice_id', time()); | |
277 | $this->webtestFillDate('thankyou_date'); | |
278 | ||
279 | // Clicking save. | |
280 | $this->click('_qf_Contribution_upload'); | |
281 | $this->waitForPageToLoad($this->getTimeoutMsec()); | |
282 | ||
283 | // Is status message correct? | |
284 | $this->assertTrue($this->isTextPresent('The contribution record has been saved.'), "Status message didn't show up after saving!"); | |
285 | ||
77a2a633 | 286 | $this->waitForElementPresent("xpath=//div[@class='view-content']//table[@class='selector row-highlight']//tbody/tr[1]/td[8]/span/a[text()='View']"); |
6a488035 TO |
287 | |
288 | //click through to the Membership view screen | |
77a2a633 | 289 | $this->click("xpath=//div[@class='view-content']//table[@class='selector row-highlight']//tbody/tr[1]/td[8]/span/a[text()='View']"); |
6a488035 TO |
290 | $this->waitForElementPresent('_qf_ContributionView_cancel-bottom'); |
291 | $expected = array( | |
292 | 2 => $financialType, | |
293 | 3 => '590.00', | |
294 | 9 => 'Completed', | |
295 | 10 => 'Check', | |
296 | 11 => 'check #1041', | |
297 | ); | |
298 | foreach ($expected as $label => $value) { | |
299 | $this->verifyText("xpath=id('ContributionView')/div[2]/table[1]/tbody/tr[$label]/td[2]", preg_quote($value)); | |
300 | } | |
301 | ||
302 | $exp = array( | |
303 | 2 => '$ 525.00', | |
304 | 3 => '$ 50.00', | |
305 | 4 => '$ 15.00', | |
306 | ); | |
307 | ||
308 | foreach ($exp as $lab => $val) { | |
309 | $this->verifyText("xpath=id('ContributionView')/div[2]/table[1]/tbody/tr[3]/td[2]/table/tbody/tr[$lab]/td[3]", | |
310 | preg_quote($val) | |
311 | ); | |
312 | } | |
313 | } | |
314 | ||
6a488035 | 315 | function testContributeOnlineWithPriceSet() { |
6a488035 TO |
316 | $this->webtestLogin(); |
317 | ||
318 | //add financial type of account type expense | |
319 | $financialType = $this->_testAddFinancialType(); | |
6d5f1345 | 320 | |
6a488035 | 321 | $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7); |
42daf119 CW |
322 | $usedFor = 'Contribution'; |
323 | $setHelp = 'Select your conference options.'; | |
6a488035 TO |
324 | $this->_testAddSet($setTitle, $usedFor, $setHelp, $financialType); |
325 | ||
326 | // Get the price set id ($sid) by retrieving and parsing the URL of the New Price Field form | |
327 | // which is where we are after adding Price Set. | |
a471a3b6 | 328 | $sid = $this->urlArg('sid'); |
6a488035 TO |
329 | $this->assertType('numeric', $sid); |
330 | ||
331 | $validStrings = array(); | |
332 | $fields = array( | |
333 | 'Full Conference' => 'Text', | |
334 | 'Meal Choice' => 'Select', | |
335 | 'Pre-conference Meetup?' => 'Radio', | |
336 | 'Evening Sessions' => 'CheckBox', | |
337 | ); | |
76e86fd8 | 338 | |
6a488035 | 339 | $this->_testAddPriceFields($fields, $validateStrings, $financialType); |
76e86fd8 | 340 | |
6a488035 TO |
341 | // load the Price Set Preview and check for expected values |
342 | $this->_testVerifyPriceSet($validateStrings, $sid); | |
343 | ||
c3ad8633 CW |
344 | // Use default payment processor |
345 | $processorName = 'Test Processor'; | |
6a488035 TO |
346 | $this->webtestAddPaymentProcessor($processorName); |
347 | ||
071a6d2e | 348 | $this->openCiviPage("admin/contribute/add", "reset=1&action=add"); |
6a488035 TO |
349 | |
350 | $contributionTitle = substr(sha1(rand()), 0, 7); | |
351 | $rand = 2 * rand(2, 50); | |
352 | ||
353 | // fill in step 1 (Title and Settings) | |
354 | $contributionPageTitle = "Title $contributionTitle"; | |
355 | $this->type('title', $contributionPageTitle); | |
356 | $this->fillRichTextField('intro_text', 'This is Test Introductory Message', 'CKEditor'); | |
357 | $this->fillRichTextField('footer_text', 'This is Test Footer Message', 'CKEditor'); | |
358 | ||
359 | $this->select('financial_type_id', "label={$financialType}"); | |
b45c587e CW |
360 | |
361 | // Submit form | |
362 | $this->clickLink('_qf_Settings_next', "_qf_Amount_next-bottom"); | |
363 | ||
364 | // Get contribution page id | |
365 | $pageId = $this->urlArg('id'); | |
6a488035 TO |
366 | |
367 | //this contribution page for online contribution | |
6a488035 TO |
368 | $this->click("xpath=//tr[@class='crm-contribution-contributionpage-amount-form-block-payment_processor']/td/label[text()='$processorName']"); |
369 | $this->select('price_set_id', 'label=' . $setTitle); | |
370 | $this->click('_qf_Amount_next-bottom'); | |
371 | $this->waitForPageToLoad($this->getTimeoutMsec()); | |
372 | ||
6a488035 | 373 | //logout |
42daf119 | 374 | $this->webtestLogout(); |
6a488035 TO |
375 | |
376 | //Open Live Contribution Page | |
b45c587e | 377 | $this->openCiviPage('contribute/transact', "reset=1&id=$pageId", '_qf_Main_upload-bottom'); |
6a488035 TO |
378 | |
379 | $firstName = 'Ma' . substr(sha1(rand()), 0, 4); | |
380 | $lastName = 'An' . substr(sha1(rand()), 0, 7); | |
381 | $this->waitForElementPresent('_qf_Main_upload-bottom'); | |
382 | $this->type('email-5', $firstName . '@example.com'); | |
77a2a633 | 383 | $this->type("xpath=//input[@class='four crm-form-text required']", "1"); |
384 | $this->click("xpath=//input[@class='crm-form-radio']"); | |
385 | $this->click("xpath=//input[@class='crm-form-checkbox']"); | |
6a488035 TO |
386 | |
387 | $streetAddress = '100 Main Street'; | |
388 | $this->type('billing_street_address-5', $streetAddress); | |
389 | $this->type('billing_city-5', 'San Francisco'); | |
390 | $this->type('billing_postal_code-5', '94117'); | |
391 | $this->select('billing_country_id-5', 'value=1228'); | |
392 | $this->select('billing_state_province_id-5', 'value=1001'); | |
393 | ||
394 | //Credit Card Info | |
395 | $this->select('credit_card_type', 'value=Visa'); | |
396 | $this->type('credit_card_number', '4111111111111111'); | |
397 | $this->type('cvv2', '000'); | |
398 | $this->select('credit_card_exp_date[M]', 'value=1'); | |
399 | $this->select('credit_card_exp_date[Y]', 'value=2020'); | |
400 | ||
401 | //Billing Info | |
0054ead7 DG |
402 | $this->type('billing_first_name', $firstName); |
403 | $this->type('billing_last_name', $lastName); | |
6a488035 TO |
404 | $this->type('billing_street_address-5', '15 Main St.'); |
405 | $this->type('billing_city-5', 'San Jose'); | |
406 | $this->select('billing_country_id-5', 'value=1228'); | |
407 | $this->select('billing_state_province_id-5', 'value=1004'); | |
408 | $this->type('billing_postal_code-5', '94129'); | |
225a8648 | 409 | $this->clickLink('_qf_Main_upload-bottom', '_qf_Confirm_next-bottom'); |
6a488035 TO |
410 | |
411 | $this->click('_qf_Confirm_next-bottom'); | |
412 | $this->waitForPageToLoad($this->getTimeoutMsec()); | |
413 | ||
414 | //login to check contribution | |
6a488035 TO |
415 | |
416 | // Log in using webtestLogin() method | |
417 | $this->webtestLogin(); | |
418 | ||
419 | //Find Contribution | |
42daf119 | 420 | $this->openCiviPage("contribute/search", "reset=1", 'contribution_date_low'); |
6a488035 | 421 | |
6080c83e | 422 | $this->type('sort_name', "$lastName $firstName"); |
225a8648 | 423 | $this->clickLink('_qf_Search_refresh', "xpath=//div[@id='contributionSearch']//table//tbody/tr[1]/td[11]/span/a[text()='View']"); |
77a2a633 | 424 | $this->clickLink("xpath=//div[@id='contributionSearch']//table//tbody/tr[1]/td[11]/span/a[text()='View']", "_qf_ContributionView_cancel-bottom", FALSE); |
6a488035 | 425 | |
0054ead7 | 426 | // View Contribution Record and test for expected values |
6a488035 | 427 | $expected = array( |
42daf119 CW |
428 | 'From' => "{$firstName} {$lastName}", |
429 | 'Financial Type' => $financialType, | |
430 | 'Net Amount' => '$ 590.00', | |
0054ead7 | 431 | 'Contribution Status' => 'Completed', |
6a488035 | 432 | ); |
0054ead7 DG |
433 | $this->webtestVerifyTabularData($expected); |
434 | ||
6a488035 TO |
435 | } |
436 | ||
437 | function testContributeWithDateSpecificPriceSet() { | |
6a488035 TO |
438 | $this->webtestLogin(); |
439 | ||
440 | //add financial type of account type expense | |
d1c1ddc7 | 441 | $financialType = $this->_testAddFinancialType(); |
76e86fd8 | 442 | |
6a488035 | 443 | $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7); |
42daf119 CW |
444 | $usedFor = 'Contribution'; |
445 | $setHelp = 'Select your conference options.'; | |
6a488035 TO |
446 | $this->_testAddSet($setTitle, $usedFor, $setHelp, $financialType); |
447 | ||
448 | // Get the price set id ($sid) by retrieving and parsing the URL of the New Price Field form | |
449 | // which is where we are after adding Price Set. | |
a471a3b6 | 450 | $sid = $this->urlArg('sid'); |
6a488035 TO |
451 | $this->assertType('numeric', $sid); |
452 | ||
453 | $validStrings = array(); | |
454 | $fields = array( | |
455 | 'Full Conference' => 'Text', | |
456 | 'Meal Choice' => 'Select', | |
457 | 'Pre-conference Meetup?' => 'Radio', | |
458 | 'Evening Sessions' => 'CheckBox', | |
459 | ); | |
460 | $this->_testAddPriceFields($fields, $validateStrings, $financialType, TRUE); | |
461 | ||
462 | // load the Price Set Preview and check for expected values | |
463 | $this->_testVerifyPriceSet($validateStrings, $sid); | |
464 | ||
c3ad8633 CW |
465 | // Use default payment processor |
466 | $processorName = 'Test Processor'; | |
6a488035 TO |
467 | $this->webtestAddPaymentProcessor($processorName); |
468 | ||
071a6d2e | 469 | $this->openCiviPage("admin/contribute/add", "reset=1&action=add"); |
6a488035 TO |
470 | |
471 | $contributionTitle = substr(sha1(rand()), 0, 7); | |
472 | $rand = 2 * rand(2, 50); | |
473 | ||
474 | // fill in step 1 (Title and Settings) | |
475 | $contributionPageTitle = "Title $contributionTitle"; | |
476 | $this->type('title', $contributionPageTitle); | |
477 | $this->select('financial_type_id', "label={$financialType}"); | |
478 | $this->fillRichTextField('intro_text', 'This is Test Introductory Message', 'CKEditor'); | |
479 | $this->fillRichTextField('footer_text', 'This is Test Footer Message', 'CKEditor'); | |
480 | ||
b45c587e CW |
481 | // Submit form |
482 | $this->clickLink('_qf_Settings_next', "_qf_Amount_next-bottom"); | |
483 | ||
484 | // Get contribution page id | |
485 | $pageId = $this->urlArg('id'); | |
6a488035 TO |
486 | |
487 | //this contribution page for online contribution | |
6a488035 TO |
488 | $this->click("xpath=//tr[@class='crm-contribution-contributionpage-amount-form-block-payment_processor']/td/label[text()='$processorName']"); |
489 | $this->select('price_set_id', 'label=' . $setTitle); | |
b45c587e | 490 | $this->clickLink('_qf_Amount_next-bottom'); |
6a488035 TO |
491 | |
492 | //logout | |
42daf119 | 493 | $this->webtestLogout(); |
6a488035 TO |
494 | |
495 | //Open Live Contribution Page | |
b45c587e | 496 | $this->openCiviPage('contribute/transact', "reset=1&id=$pageId", '_qf_Main_upload-bottom'); |
6a488035 TO |
497 | |
498 | $firstName = 'Ma' . substr(sha1(rand()), 0, 4); | |
499 | $lastName = 'An' . substr(sha1(rand()), 0, 7); | |
500 | $this->waitForElementPresent('_qf_Main_upload-bottom'); | |
501 | $this->type('email-5', $firstName . '@example.com'); | |
77a2a633 | 502 | $this->click("xpath=//input[@class='crm-form-radio']"); |
503 | $this->click("xpath=//input[@class='crm-form-checkbox']"); | |
6a488035 TO |
504 | |
505 | $streetAddress = '100 Main Street'; | |
506 | $this->type('billing_street_address-5', $streetAddress); | |
507 | $this->type('billing_city-5', 'San Francisco'); | |
508 | $this->type('billing_postal_code-5', '94117'); | |
509 | $this->select('billing_country_id-5', 'value=1228'); | |
510 | $this->select('billing_state_province_id-5', 'value=1001'); | |
511 | ||
512 | //Credit Card Info | |
513 | $this->select('credit_card_type', 'value=Visa'); | |
514 | $this->type('credit_card_number', '4111111111111111'); | |
515 | $this->type('cvv2', '000'); | |
516 | $this->select('credit_card_exp_date[M]', 'value=1'); | |
517 | $this->select('credit_card_exp_date[Y]', 'value=2020'); | |
518 | ||
519 | //Billing Info | |
0054ead7 DG |
520 | $this->type('billing_first_name', $firstName); |
521 | $this->type('billing_last_name', $lastName); | |
6a488035 TO |
522 | $this->type('billing_street_address-5', '15 Main St.'); |
523 | $this->type(' billing_city-5', 'San Jose'); | |
524 | $this->select('billing_country_id-5', 'value=1228'); | |
525 | $this->select('billing_state_province_id-5', 'value=1004'); | |
526 | $this->type('billing_postal_code-5', '94129'); | |
225a8648 | 527 | $this->clickLink('_qf_Main_upload-bottom', '_qf_Confirm_next-bottom'); |
6a488035 TO |
528 | |
529 | $this->click('_qf_Confirm_next-bottom'); | |
530 | $this->waitForPageToLoad($this->getTimeoutMsec()); | |
531 | ||
532 | //login to check contribution | |
6a488035 TO |
533 | $this->webtestLogin(); |
534 | ||
535 | //Find Contribution | |
42daf119 | 536 | $this->openCiviPage("contribute/search", "reset=1", 'contribution_date_low'); |
6a488035 | 537 | |
4cbbec00 | 538 | $this->type('sort_name', "$lastName $firstName"); |
77a2a633 | 539 | $this->clickLink('_qf_Search_refresh', "xpath=//div[@id='contributionSearch']//table//tbody/tr[1]/td[11]/span/a[text()='View']", FALSE); |
540 | $this->clickLink("xpath=//div[@id='contributionSearch']//table//tbody/tr[1]/td[11]/span/a[text()='View']", '_qf_ContributionView_cancel-bottom', FALSE); | |
6a488035 | 541 | |
0054ead7 | 542 | // View Contribution Record and test for expected values |
6a488035 | 543 | $expected = array( |
42daf119 CW |
544 | 'From' => "{$firstName} {$lastName}", |
545 | 'Financial Type' => $financialType, | |
546 | 'Net Amount' => '$ 65.00', | |
0054ead7 | 547 | 'Contribution Status' => 'Completed', |
6a488035 | 548 | ); |
0054ead7 | 549 | $this->webtestVerifyTabularData($expected); |
6a488035 TO |
550 | } |
551 | ||
552 | function testContributeOfflineforSoftcreditwithApi() { | |
6a488035 TO |
553 | // Log in using webtestLogin() method |
554 | $this->webtestLogin(); | |
76e86fd8 | 555 | |
6a488035 | 556 | //create a contact and return the contact id |
d1c1ddc7 | 557 | $firstNameSoft = "John_" . substr(sha1(rand()), 0, 5); |
558 | $lastNameSoft = "Doe_" . substr(sha1(rand()), 0, 5); | |
6a488035 TO |
559 | $this->webtestAddContact($firstNameSoft, $lastNameSoft); |
560 | $url = $this->parseURL(); | |
561 | $cid = $url['queryString']['cid']; | |
562 | $this->assertType('numeric', $cid); | |
76e86fd8 | 563 | |
6a488035 | 564 | $setTitle = 'Conference Fees - ' . substr(sha1(rand()), 0, 7); |
42daf119 CW |
565 | $usedFor = 'Contribution'; |
566 | $setHelp = 'Select your conference options.'; | |
6a488035 TO |
567 | $financialType = $this->_testAddFinancialType(); |
568 | $this->_testAddSet($setTitle, $usedFor, $setHelp, $financialType); | |
569 | ||
570 | // Get the price set id ($sid) by retrieving and parsing the URL of the New Price Field form | |
571 | // which is where we are after adding Price Set. | |
a471a3b6 | 572 | $sid = $this->urlArg('sid'); |
6a488035 TO |
573 | $this->assertType('numeric', $sid); |
574 | ||
575 | $validStrings = array(); | |
576 | $fields = array( | |
577 | 'Full Conference' => 'Text', | |
578 | 'Meal Choice' => 'Select', | |
579 | 'Pre-conference Meetup?' => 'Radio', | |
580 | 'Evening Sessions' => 'CheckBox', | |
581 | ); | |
582 | $this->_testAddPriceFields($fields, $validateStrings, $financialType); | |
583 | ||
584 | // load the Price Set Preview and check for expected values | |
585 | $this->_testVerifyPriceSet($validateStrings, $sid); | |
586 | ||
42daf119 | 587 | $this->openCiviPage("contribute/add", "reset=1&action=add&context=standalone", '_qf_Contribution_upload'); |
6a488035 | 588 | |
6a488035 | 589 | // create new contact using dialog |
80f3b91d | 590 | $contact = $this->createDialogContact(); |
6a488035 TO |
591 | |
592 | // select contribution type | |
593 | $this->select('financial_type_id', "label={$financialType}"); | |
594 | ||
595 | // fill in Received Date | |
596 | $this->webtestFillDate('receive_date'); | |
597 | ||
598 | // source | |
599 | $this->type('source', 'Mailer 1'); | |
600 | ||
601 | // select price set items | |
602 | $this->select('price_set_id', "label=$setTitle"); | |
215ed9aa | 603 | $this->type("xpath=//input[@class='four crm-form-text required']", "1"); |
77a2a633 | 604 | $this->click("xpath=//input[@class='crm-form-radio']"); |
605 | $this->click("xpath=//input[@class='crm-form-checkbox']"); | |
6a488035 TO |
606 | // select payment instrument type = Check and enter chk number |
607 | $this->select('payment_instrument_id', 'value=4'); | |
608 | $this->waitForElementPresent('check_number'); | |
0054ead7 | 609 | $this->type('check_number', '1041'); |
6a488035 TO |
610 | |
611 | $this->type('trxn_id', 'P20901X1' . rand(100, 10000)); | |
76e86fd8 | 612 | |
77a2a633 | 613 | $this->webtestFillAutocomplete("{$lastNameSoft}, {$firstNameSoft}", 'soft_credit_contact_id_1'); |
13dff995 | 614 | |
215ed9aa | 615 | $this->type('soft_credit_amount_1', "65"); |
6a488035 TO |
616 | //Additional Detail section |
617 | $this->click('AdditionalDetail'); | |
618 | $this->waitForElementPresent('thankyou_date'); | |
619 | ||
620 | $this->type('note', 'This is a test note.'); | |
6a488035 TO |
621 | $this->type('invoice_id', time()); |
622 | $this->webtestFillDate('thankyou_date'); | |
623 | ||
624 | // Clicking save. | |
77a2a633 | 625 | $this->clickLink('_qf_Contribution_upload', "xpath=//div[@class='view-content']//table[@class='selector row-highlight']//tbody/tr[1]/td[8]/span/a[text()='View']", FALSE); |
0054ead7 | 626 | $this->assertTrue($this->isTextPresent('The contribution record has been saved.'), "Status message didn't show up after saving!"); |
6a488035 | 627 | |
0054ead7 | 628 | //click through to the Contribution view screen |
77a2a633 | 629 | $this->click("xpath=//table[@class='selector row-highlight']/tbody/tr[1]/td[8]/span/a[text()='View']"); |
6a488035 TO |
630 | $this->waitForElementPresent('_qf_ContributionView_cancel-bottom'); |
631 | ||
0054ead7 | 632 | // View Contribution Record and test for expected values |
6a488035 | 633 | $expected = array( |
80f3b91d | 634 | 'From' => $contact['display_name'], |
42daf119 | 635 | 'Financial Type' => $financialType, |
0054ead7 | 636 | 'Contribution Amount' => 'Contribution Total: $ 590.00', |
42daf119 CW |
637 | 'Paid By' => 'Check', |
638 | 'Check Number' => '1041', | |
0054ead7 | 639 | 'Contribution Status' => 'Completed', |
6a488035 | 640 | ); |
0054ead7 | 641 | $this->webtestVerifyTabularData($expected); |
76e86fd8 | 642 | |
6a488035 TO |
643 | $exp = array( |
644 | 2 => '$ 525.00', | |
645 | 3 => '$ 50.00', | |
646 | 4 => '$ 15.00', | |
647 | ); | |
648 | ||
649 | foreach ($exp as $lab => $val) { | |
650 | $this->verifyText("xpath=id('ContributionView')/div[2]/table[1]/tbody/tr[3]/td[2]/table/tbody/tr[$lab]/td[3]", | |
651 | preg_quote($val) | |
652 | ); | |
653 | } | |
0054ead7 | 654 | |
c2768486 | 655 | // verify if soft credit was created successfully |
656 | $softCreditValues = array( | |
657 | 'Soft Credit To' => "{$firstNameSoft} {$lastNameSoft}", | |
658 | 'Amount' => '65.00', | |
659 | ); | |
660 | ||
661 | foreach ($softCreditValues as $value) { | |
662 | $this->verifyText("css=table.crm-soft-credit-listing", preg_quote($value)); | |
663 | } | |
664 | ||
6a488035 TO |
665 | // Check for Soft contact created |
666 | $this->click("css=input#sort_name_navigation"); | |
667 | $this->type("css=input#sort_name_navigation", "$lastNameSoft, $firstNameSoft"); | |
668 | $this->typeKeys("css=input#sort_name_navigation", "$lastNameSoft, $firstNameSoft"); | |
669 | // wait for result list | |
77a2a633 | 670 | $this->waitForElementPresent("css=ul.ui-autocomplete li"); |
76e86fd8 | 671 | |
6a488035 | 672 | // visit contact summary page |
77a2a633 | 673 | $this->click("css=ul.ui-autocomplete li"); |
6a488035 | 674 | $this->waitForPageToLoad($this->getTimeoutMsec()); |
d1c1ddc7 | 675 | $this->click('css=li#tab_contribute a'); |
6a488035 | 676 | $this->waitForElementPresent('link=Record Contribution (Check, Cash, EFT ...)'); |
76e86fd8 | 677 | |
77a2a633 | 678 | $id = explode('id=', $this->getAttribute("xpath=//table[@class='selector row-highlight']/tbody//tr[@id='rowid']/td[8]/a[text()='View']@href")); |
6a488035 | 679 | $id = substr($id[1], 0, strpos($id[1], '&')); |
77a2a633 | 680 | $this->click("xpath=//table[@class='selector row-highlight']/tbody//tr[@id='rowid']/td[8]/a"); |
6a488035 | 681 | $this->waitForElementPresent('_qf_ContributionView_cancel-bottom'); |
76e86fd8 | 682 | |
0054ead7 | 683 | $this->webtestVerifyTabularData($expected); |
76e86fd8 | 684 | |
d1c1ddc7 | 685 | $params = array( |
686 | 'contribution_id' => $id, | |
6a488035 TO |
687 | 'version' => 3, |
688 | ); | |
76e86fd8 | 689 | |
0054ead7 | 690 | // Retrieve contribution from the DB via api and verify DB values against view contribution page |
d1c1ddc7 | 691 | $fields = $this->webtest_civicrm_api('contribution', 'get', $params); |
76e86fd8 | 692 | |
6a488035 | 693 | $params['id'] = $params['contact_id'] = $fields['values'][$fields['id']]['soft_credit_to']; |
0054ead7 DG |
694 | $softCreditContact = CRM_Contact_BAO_Contact::retrieve($params, $defaults, TRUE); |
695 | ||
696 | // View Contribution Record and test for expected values | |
697 | $expected = array( | |
42daf119 CW |
698 | 'From' => $fields['values'][$fields['id']]['display_name'], |
699 | 'Financial Type' => $fields['values'][$fields['id']]['financial_type'], | |
0054ead7 DG |
700 | 'Contribution Amount' => $fields['values'][$fields['id']]['total_amount'], |
701 | 'Contribution Status' => $fields['values'][$fields['id']]['contribution_status'], | |
42daf119 CW |
702 | 'Paid By' => $fields['values'][$fields['id']]['contribution_payment_instrument'], |
703 | 'Check Number' => $fields['values'][$fields['id']]['contribution_check_number'], | |
6a488035 | 704 | ); |
c2768486 | 705 | |
0054ead7 | 706 | $this->webtestVerifyTabularData($expected); |
c2768486 | 707 | |
708 | // verify if soft credit | |
709 | $softCreditValues = array( | |
710 | 'Soft Credit To' => $softCreditContact->display_name, | |
711 | 'Amount' => '65.00', | |
712 | ); | |
713 | ||
714 | foreach ($softCreditValues as $value) { | |
715 | $this->verifyText("css=table.crm-soft-credit-listing", preg_quote($value)); | |
716 | } | |
6a488035 TO |
717 | } |
718 | } | |
719 |