public function ContributionDummyTest::testSubmitContribution in Webform CiviCRM Integration 8.5
File
- tests/
src/ FunctionalJavascript/ ContributionDummyTest.php, line 93
Class
- ContributionDummyTest
- Tests submitting a Webform with CiviCRM: Contribution with Line Items and Sales Tax
Namespace
Drupal\Tests\webform_civicrm\FunctionalJavascriptCode
public function testSubmitContribution() {
$payment_processor = $this
->createPaymentProcessor();
$this
->setupSalesTax(2, $accountParams = []);
$this->cid2 = $this
->createIndividual([
'first_name' => 'Mark',
'last_name' => 'Cooper',
]);
$this
->drupalLogin($this->adminUser);
$this
->drupalGet(Url::fromRoute('entity.webform.civicrm', [
'webform' => $this->webform
->id(),
]));
$this
->enableCivicrmOnWebform();
$this
->getSession()
->getPage()
->selectFieldOption('number_of_contacts', 2);
$this
->assertSession()
->assertWaitOnAjaxRequest();
$this
->htmlOutput();
$this
->getSession()
->getPage()
->clickLink('2. Contact 2');
$this
->getSession()
->getPage()
->checkField("civicrm_2_contact_1_contact_existing");
$this
->configureContributionTab(FALSE, $payment_processor['id']);
$this
->getSession()
->getPage()
->checkField("Contribution Amount");
$this
->assertSession()
->checkboxChecked("Contribution Amount");
$el = $this
->getSession()
->getPage()
->findField('Payment Processor');
$opts = $el
->findAll('css', 'option');
$this
->assertCount(3, $opts, 'Payment processor values: ' . implode(', ', array_map(static function (NodeElement $el) {
return $el
->getValue();
}, $opts)));
$this
->enableBillingSection();
$this
->getSession()
->getPage()
->selectFieldOption('lineitem_1_number_of_lineitem', 2);
$this
->assertSession()
->assertWaitOnAjaxRequest();
$this
->htmlOutput();
$this
->getSession()
->getPage()
->checkField("civicrm_1_lineitem_1_contribution_line_total");
$this
->assertSession()
->checkboxChecked("civicrm_1_lineitem_1_contribution_line_total");
$this
->getSession()
->getPage()
->checkField("civicrm_1_lineitem_2_contribution_line_total");
$this
->assertSession()
->checkboxChecked("civicrm_1_lineitem_2_contribution_line_total");
// Set the Financial Type for the second line item to Member Dues (which has Sales Tax on it).
$this
->getSession()
->getPage()
->selectFieldOption('civicrm_1_lineitem_2_contribution_financial_type_id', 2);
$this
->saveCiviCRMSettings();
$this
->drupalGet($this->webform
->toUrl('canonical', [
'query' => [
'cid2' => $this->cid2['id'],
],
]));
$this
->assertPageNoErrorMessages();
$this
->getSession()
->getPage()
->fillField('First Name', 'Frederick');
$this
->getSession()
->getPage()
->fillField('Last Name', 'Pabst');
$this
->getSession()
->getPage()
->fillField('Email', 'fred@example.com');
$this
->getSession()
->getPage()
->fillField('Line Item Amount', '20.00');
$this
->getSession()
->getPage()
->fillField('Line Item Amount 2', '29.50');
$this
->assertFieldValue('edit-civicrm-2-contact-1-contact-first-name', 'Mark');
$this
->assertFieldValue('edit-civicrm-2-contact-1-contact-last-name', 'Cooper');
$this
->addFieldValue('civicrm_2_contact_1_contact_first_name', 'MarkUpdated');
$this
->addFieldValue('civicrm_2_contact_1_contact_last_name', 'CooperUpdated');
$this
->getSession()
->getPage()
->pressButton('Next >');
$this
->assertSession()
->waitForField('edit-wizard-prev');
$this
->getSession()
->getPage()
->pressButton('edit-wizard-prev');
$this
->assertSession()
->waitForField('edit-civicrm-2-contact-1-contact-first-name');
$this
->assertFieldValue('edit-civicrm-2-contact-1-contact-first-name', 'MarkUpdated');
$this
->assertFieldValue('edit-civicrm-2-contact-1-contact-last-name', 'CooperUpdated');
$this
->getSession()
->getPage()
->pressButton('Next >');
$this
->getSession()
->getPage()
->fillField('Contribution Amount', '10.00');
$this
->assertSession()
->elementExists('css', '#wf-crm-billing-items');
$this
->htmlOutput();
$this
->assertSession()
->elementTextContains('css', '#wf-crm-billing-total', '60.98');
$this
->fillCardAndSubmit();
$api_result = $this->utils
->wf_civicrm_api('contribution', 'get', [
'sequential' => 1,
]);
$this
->assertEquals(1, $api_result['count']);
$contribution = reset($api_result['values']);
$this
->assertNotEmpty($contribution['trxn_id']);
$this
->assertEquals($this->webform
->label(), $contribution['contribution_source']);
$this
->assertEquals('Donation', $contribution['financial_type']);
$this
->assertEquals('60.98', $contribution['total_amount']);
$contribution_total_amount = $contribution['total_amount'];
$this
->assertEquals('Completed', $contribution['contribution_status']);
$this
->assertEquals('USD', $contribution['currency']);
// Also retrieve tax_amount (have to ask for it to be returned):
$api_result = $this->utils
->wf_civicrm_api('contribution', 'get', [
'sequential' => 1,
'return' => 'tax_amount',
]);
$contribution = reset($api_result['values']);
$this
->assertEquals('1.48', $contribution['tax_amount']);
$tax_total_amount = $contribution['tax_amount'];
$api_result = $this->utils
->wf_civicrm_api('line_item', 'get', [
'sequential' => 1,
]);
$this
->assertEquals('10.00', $api_result['values'][0]['line_total']);
$this
->assertEquals('1', $api_result['values'][0]['financial_type_id']);
$this
->assertEquals('20.00', $api_result['values'][1]['line_total']);
$this
->assertEquals('1', $api_result['values'][1]['financial_type_id']);
$this
->assertEquals('29.50', $api_result['values'][2]['line_total']);
$this
->assertEquals('1.48', $api_result['values'][2]['tax_amount']);
$this
->assertEquals('2', $api_result['values'][2]['financial_type_id']);
// throw new \Exception(var_export($api_result, TRUE));
$sum_line_total = $api_result['values'][0]['line_total'] + $api_result['values'][1]['line_total'] + $api_result['values'][2]['line_total'];
$sum_tax_amount = $api_result['values'][2]['tax_amount'];
$this
->assertEquals($tax_total_amount, $sum_tax_amount);
$this
->assertEquals($contribution_total_amount, $sum_line_total + $sum_tax_amount);
}