From 67dd58e4152f6f04e458872cf1fb20f19832098c Mon Sep 17 00:00:00 2001 From: KarinG Date: Sun, 30 Aug 2020 19:01:41 -0600 Subject: [PATCH] extend_testSubmitContributionPageWithPriceSetQuantity --- tests/phpunit/api/v3/ContributionPageTest.php | 41 ++++++++++++++++--- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/tests/phpunit/api/v3/ContributionPageTest.php b/tests/phpunit/api/v3/ContributionPageTest.php index 25eb05e65f..689694a72a 100644 --- a/tests/phpunit/api/v3/ContributionPageTest.php +++ b/tests/phpunit/api/v3/ContributionPageTest.php @@ -1957,6 +1957,7 @@ class api_v3_ContributionPageTest extends CiviUnitTestCase { 'label' => 'Printing Rights', 'html_type' => 'Text', ]); + $this->callAPISuccess('price_field_value', 'create', [ 'price_set_id' => $priceSetID, 'price_field_id' => $priceField['id'], @@ -1969,10 +1970,28 @@ class api_v3_ContributionPageTest extends CiviUnitTestCase { // Set quantity for our test $submitParams['price_' . $priceFieldId] = 180; + $priceField = $this->callAPISuccess('price_field', 'create', [ + 'price_set_id' => $priceSetID, + 'label' => 'Another Line Item', + 'html_type' => 'Text', + ]); + + $this->callAPISuccess('price_field_value', 'create', [ + 'price_set_id' => $priceSetID, + 'price_field_id' => $priceField['id'], + 'label' => 'Another Line Item', + 'financial_type_id' => $financialTypeId, + 'amount' => '2.95', + ]); + $priceFieldId = $priceField['id']; + + // Set quantity for our test + $submitParams['price_' . $priceFieldId] = 110; + // contribution_page submit requires amount and tax_amount - and that's ok we're not testing that - we're testing at the LineItem level - $submitParams['amount'] = $this->formatMoneyInput(180 * 16.95); + $submitParams['amount'] = $this->formatMoneyInput(180 * 16.95 + 110 * 2.95); // This is the correct Tax Amount - use it later to compare to what the CiviCRM Core came up with at the LineItem level - $submitParams['tax_amount'] = $this->formatMoneyInput(180 * 16.95 * 0.10); + $submitParams['tax_amount'] = (180 * 16.95 * 0.10 + 110 * 2.95 * 0.10); $this->callAPISuccess('contribution_page', 'submit', $submitParams); $contribution = $this->callAPISuccessGetSingle('contribution', [ @@ -1980,15 +1999,25 @@ class api_v3_ContributionPageTest extends CiviUnitTestCase { ]); // Retrieve the lineItem that belongs to the Printing Rights and check the tax_amount CiviCRM Core calculated for it - $lineItem = $this->callAPISuccessGetSingle('LineItem', [ + $lineItem1 = $this->callAPISuccessGetSingle('LineItem', [ 'contribution_id' => $contribution['id'], 'label' => 'Printing Rights', ]); - $lineItem_TaxAmount = round($lineItem['tax_amount'], 2); + // Retrieve the lineItem that belongs to the Another Line Item and check the tax_amount CiviCRM Core calculated for it + $lineItem2 = $this->callAPISuccessGetSingle('LineItem', [ + 'contribution_id' => $contribution['id'], + 'label' => 'Another Line Item', + ]); + + $finalContribution = $this->callAPISuccess('Contribution', 'getsingle', ['id' => $contribution['id'], 'return' => ['tax_amount', 'total_amount']]); + + $this->assertEquals($lineItem1['line_total'] + $lineItem2['line_total'], round(180 * 16.95 + 110 * 2.95, 2), 'Line Item Total is incorrect.'); + $this->assertEquals($lineItem1['line_total'] + $lineItem2['line_total'], $finalContribution['total_amount'], 'Contribution total should match line item totals'); + + $this->assertEquals(round($lineItem1['tax_amount'] + $lineItem2['tax_amount'], 2), round(180 * 16.95 * 0.10 + 110 * 2.95 * 0.10, 2), 'Wrong Sales Tax Amount is calculated and stored.'); + $this->assertEquals(round($lineItem1['tax_amount'] + $lineItem2['tax_amount'], 2), $finalContribution['tax_amount'], 'Sales Tax Amount on Contribution does not match sum of Sales Tax Amount across the Line Items.'); - $this->assertEquals($lineItem['line_total'], $contribution['total_amount'], 'Contribution total should match line total'); - $this->assertEquals($lineItem_TaxAmount, round(180 * 16.95 * 0.10, 2), 'Wrong Sales Tax Amount is calculated and stored.'); } /** -- 2.25.1