From 3bb2983d0a74f5637d561d2be44d2e0b6d9a9146 Mon Sep 17 00:00:00 2001 From: eileen Date: Mon, 15 Apr 2019 13:05:46 +1000 Subject: [PATCH] Clean up CRM_Contribute_Form_SearchTest This is mostly about switching to a data provider to include flexibility & re-usability of the test --- .../CRM/Contribute/Form/SearchTest.php | 223 +++++++++--------- 1 file changed, 117 insertions(+), 106 deletions(-) diff --git a/tests/phpunit/CRM/Contribute/Form/SearchTest.php b/tests/phpunit/CRM/Contribute/Form/SearchTest.php index eea1fc537c..89d65f22eb 100644 --- a/tests/phpunit/CRM/Contribute/Form/SearchTest.php +++ b/tests/phpunit/CRM/Contribute/Form/SearchTest.php @@ -42,9 +42,13 @@ class CRM_Contribute_Form_SearchTest extends CiviUnitTestCase { public function setUp() { parent::setUp(); $this->_individual = $this->individualCreate(); + $this->ids['Contact']['contactID1'] = $this->individualCreate([], 1); + $this->ids['Contact']['contactID2'] = $this->individualCreate([], 2); } public function tearDown() { + $this->quickCleanUpFinancialEntities(); + parent::tearDown(); } /** @@ -402,116 +406,25 @@ class CRM_Contribute_Form_SearchTest extends CiviUnitTestCase { /** * Test CRM_Contribute_Form_Search Recurring Contribution Status Id filters + * + * @dataProvider getSearchData */ - public function testContributionRecurStatusFilter() { - $this->quickCleanup($this->_tablesToTruncate); - $contactID1 = $this->individualCreate([], 1); - $contactID2 = $this->individualCreate([], 2); - // "In Progress" recurring contribution for contactID1 - $ContributionRecur1 = $this->callAPISuccess('ContributionRecur', 'create', [ - 'sequential' => 1, - 'contact_id' => $contactID1, - 'frequency_interval' => 1, - 'frequency_unit' => "month", - 'amount' => 11, - 'currency' => "CAD", - 'payment_instrument_id' => 1, - 'contribution_status_id' => 5, - 'financial_type_id' => "Donation", - ]); - $Contribution1 = $this->callAPISuccess('Contribution', 'create', [ - 'financial_type_id' => 'Donation', - 'total_amount' => 11, - 'receive_date' => date('Ymd'), - 'receive_date_time' => NULL, - 'payment_instrument_id' => 1, - 'contribution_status_id' => 1, - 'contact_id' => $contactID1, - 'contribution_recur_id' => $ContributionRecur1['id'], - ]); - $params = [ - 'to_financial_account_id' => 1, - 'status_id' => 1, - 'contribution_id' => $Contribution1['id'], - 'payment_instrument_id' => 1, - 'card_type_id' => 1, - 'total_amount' => 11, - ]; - CRM_Core_BAO_FinancialTrxn::create($params); - // "Completed" recurring contribution for contactID2 - $ContributionRecur2 = $this->callAPISuccess('ContributionRecur', 'create', [ - 'sequential' => 1, - 'contact_id' => $contactID2, - 'frequency_interval' => 1, - 'frequency_unit' => "month", - 'amount' => 22, - 'currency' => "CAD", - 'payment_instrument_id' => 1, - 'contribution_status_id' => 1, - 'financial_type_id' => "Donation", - ]); - $Contribution2 = $this->callAPISuccess('Contribution', 'create', [ - 'financial_type_id' => 'Donation', - 'total_amount' => 22, - 'receive_date' => date('Ymd'), - 'receive_date_time' => NULL, - 'payment_instrument' => 1, - 'contribution_status_id' => 1, - 'contact_id' => $contactID2, - 'contribution_recur_id' => $ContributionRecur2['id'], - ]); - $params = [ - 'to_financial_account_id' => 1, - 'status_id' => 1, - 'contribution_id' => $Contribution2['id'], - 'payment_instrument_id' => 1, - 'card_type_id' => 1, - 'total_amount' => 22, - ]; - CRM_Core_BAO_FinancialTrxn::create($params); - - $useCases = [ - // Case 1: Search for ONLY those recurring contributions with status "In Progress" - [ - 'form_value' => ['contribution_recur_contribution_status_id' => 5], - 'expected_count' => 1, - 'expected_contact' => [$contactID1], - 'expected_qill' => "Recurring Contribution Status = 'In Progress'", - ], - // Case 2: Search for ONLY those recurring contributions with status "Completed" - [ - 'form_value' => ['contribution_recur_contribution_status_id' => 1], - 'expected_count' => 1, - 'expected_contact' => [$contactID2], - 'expected_qill' => "Recurring Contribution Status = 'Completed'", - ], - // Case 3: Search for ONLY those recurring contributions with status "Cancelled" - [ - 'form_value' => ['contribution_recur_contribution_status_id' => 3], - 'expected_count' => 0, - 'expected_contact' => [], - 'expected_qill' => "Recurring Contribution Status = 'Cancelled'", - ], - ]; + public function testContributionRecurStatusFilter($formValues, $expectedCount, $expectedContact, $expectedQill) { + $this->setUpRecurringContributions(); - foreach ($useCases as $case) { - $fv = $case['form_value']; - $query = new CRM_Contact_BAO_Query(CRM_Contact_BAO_Query::convertFormValues($fv)); - list($select, $from, $where, $having) = $query->query(); + $query = new CRM_Contact_BAO_Query(CRM_Contact_BAO_Query::convertFormValues($formValues)); + list($select, $from, $where, $having) = $query->query(); - // get and assert contribution count - $contacts = CRM_Core_DAO::executeQuery(sprintf('SELECT DISTINCT contact_a.id %s %s AND contact_a.id IS NOT NULL', $from, $where))->fetchAll(); - foreach ($contacts as $key => $value) { - $contacts[$key] = $value['id']; - } - // assert the contribution count - $this->assertEquals($case['expected_count'], count($contacts)); - // assert the contribution IDs - $this->checkArrayEquals($case['expected_contact'], $contacts); - // get and assert qill string - $qill = trim(implode($query->getOperator(), CRM_Utils_Array::value(0, $query->qill()))); - $this->assertEquals($case['expected_qill'], $qill); + // get and assert contribution count + $contacts = CRM_Core_DAO::executeQuery(sprintf('SELECT DISTINCT contact_a.id, contact_a.display_name %s %s AND contact_a.id IS NOT NULL', $from, $where))->fetchAll(); + foreach ($contacts as $key => $value) { + $this->assertEquals($expectedContact[$key], $value['display_name']); } + // assert the contribution count + $this->assertEquals($expectedCount, count($contacts)); + // get and assert qill string + $qill = trim(implode($query->getOperator(), CRM_Utils_Array::value(0, $query->qill()))); + $this->assertEquals($expectedQill, $qill); } /** @@ -600,4 +513,102 @@ class CRM_Contribute_Form_SearchTest extends CiviUnitTestCase { } } + /** + * Set up recurring contributions for the test. + */ + protected function setUpRecurringContributions() { + // "In Progress" recurring contribution for contactID1 + $ContributionRecur1 = $this->callAPISuccess('ContributionRecur', 'create', [ + 'sequential' => 1, + 'contact_id' => $this->ids['Contact']['contactID1'], + 'frequency_interval' => 1, + 'frequency_unit' => "month", + 'amount' => 11, + 'currency' => "CAD", + 'payment_instrument_id' => 1, + 'contribution_status_id' => 5, + 'financial_type_id' => "Donation", + ]); + $Contribution1 = $this->callAPISuccess('Contribution', 'create', [ + 'financial_type_id' => 'Donation', + 'total_amount' => 11, + 'receive_date' => date('Ymd'), + 'receive_date_time' => NULL, + 'payment_instrument_id' => 1, + 'contribution_status_id' => 1, + 'contact_id' => $this->ids['Contact']['contactID1'], + 'contribution_recur_id' => $ContributionRecur1['id'], + ]); + $params = [ + 'to_financial_account_id' => 1, + 'status_id' => 1, + 'contribution_id' => $Contribution1['id'], + 'payment_instrument_id' => 1, + 'card_type_id' => 1, + 'total_amount' => 11, + ]; + CRM_Core_BAO_FinancialTrxn::create($params); + // "Completed" recurring contribution for contactID2 + $ContributionRecur2 = $this->callAPISuccess('ContributionRecur', 'create', [ + 'sequential' => 1, + 'contact_id' => $this->ids['Contact']['contactID2'], + 'frequency_interval' => 1, + 'frequency_unit' => "month", + 'amount' => 22, + 'currency' => "CAD", + 'payment_instrument_id' => 1, + 'contribution_status_id' => 1, + 'financial_type_id' => "Donation", + ]); + $Contribution2 = $this->callAPISuccess('Contribution', 'create', [ + 'financial_type_id' => 'Donation', + 'total_amount' => 22, + 'receive_date' => date('Ymd'), + 'receive_date_time' => NULL, + 'payment_instrument' => 1, + 'contribution_status_id' => 1, + 'contact_id' => $this->ids['Contact']['contactID2'], + 'contribution_recur_id' => $ContributionRecur2['id'], + ]); + $params = [ + 'to_financial_account_id' => 1, + 'status_id' => 1, + 'contribution_id' => $Contribution2['id'], + 'payment_instrument_id' => 1, + 'card_type_id' => 1, + 'total_amount' => 22, + ]; + CRM_Core_BAO_FinancialTrxn::create($params); + } + + /** + * @return array + */ + public function getSearchData() { + $useCases = [ + // Case 1: Search for ONLY those recurring contributions with status "In Progress" + 'in_progress_search' => [ + 'form_value' => ['contribution_recur_contribution_status_id' => 5], + 'expected_count' => 1, + 'expected_contact' => ['Mr. Joe Miller II'], + 'expected_qill' => "Recurring Contribution Status = 'In Progress'", + ], + // Case 2: Search for ONLY those recurring contributions with status "Completed" + [ + 'form_value' => ['contribution_recur_contribution_status_id' => 1], + 'expected_count' => 1, + 'expected_contact' => ['Mr. Terrence Smith II'], + 'expected_qill' => "Recurring Contribution Status = 'Completed'", + ], + // Case 3: Search for ONLY those recurring contributions with status "Cancelled" + [ + 'form_value' => ['contribution_recur_contribution_status_id' => 3], + 'expected_count' => 0, + 'expected_contact' => [], + 'expected_qill' => "Recurring Contribution Status = 'Cancelled'", + ], + ]; + return $useCases; + } + } -- 2.25.1