From: Seamus Lee <seamuslee001@gmail.com> Date: Thu, 27 Oct 2022 22:26:30 +0000 (+1100) Subject: [REF] Add in Test for importing a deliberartly bad campaign id X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=f5555477c6f7b6890e2216acfb2f5383099c08b2;p=civicrm-core.git [REF] Add in Test for importing a deliberartly bad campaign id --- diff --git a/tests/phpunit/CRM/Contribute/Import/Parser/ContributionTest.php b/tests/phpunit/CRM/Contribute/Import/Parser/ContributionTest.php index 6aa3f97f39..4616bdf06c 100644 --- a/tests/phpunit/CRM/Contribute/Import/Parser/ContributionTest.php +++ b/tests/phpunit/CRM/Contribute/Import/Parser/ContributionTest.php @@ -646,6 +646,62 @@ class CRM_Contribute_Import_Parser_ContributionTest extends CiviUnitTestCase { $this->assertEquals('Call him back', $contribution['source']); } + /** + * Test that campaign_id is properly validated. + * + * @throws \CRM_Core_Exception + */ + public function testImportFieldsValidateCampaignID(): void { + $this->individualCreate(['email' => 'mum@example.com']); + $this->campaignCreate(); + $this->callAPISuccess('System', 'flush', []); + $fieldMappings = [ + ['name' => 'first_name'], + ['name' => ''], + ['name' => 'receive_date'], + ['name' => 'financial_type_id'], + ['name' => 'email_primary.email'], + ['name' => ''], + ['name' => ''], + ['name' => 'trxn_id'], + ['name' => 'contribution_campaign_id'], + ]; + // First we try to create without total_amount mapped. + // It will fail in create mode as total_amount is required for create. + $this->submitDataSourceForm('contributions_bad_campaign.csv', $fieldMappings); + $form = $this->getMapFieldForm([ + 'onDuplicate' => CRM_Import_Parser::DUPLICATE_SKIP, + 'mapper' => $this->getMapperFromFieldMappings($fieldMappings), + 'contactType' => 'Individual', + ]); + $form->setUserJobID($this->userJobID); + $form->buildForm(); + $this->assertFalse($form->validate()); + + // Now we add in total amount - it works in create mode. + $fieldMappings[1]['name'] = 'total_amount'; + $submittedValues = [ + 'skipColumnHeader' => TRUE, + 'fieldSeparator' => ',', + 'contactType' => 'Individual', + 'mapper' => $this->getMapperFromFieldMappings($fieldMappings), + 'dataSource' => 'CRM_Import_DataSource_CSV', + 'file' => ['name' => 'contributions_bad_campaign.csv'], + 'dateFormats' => CRM_Core_Form_Date::DATE_yyyy_mm_dd, + 'onDuplicate' => CRM_Import_Parser::DUPLICATE_UPDATE, + 'groups' => [], + ]; + $this->submitDataSourceForm('contributions_bad_campaign.csv', $submittedValues); + $form = $this->getMapFieldForm($submittedValues); + $form->setUserJobID($this->userJobID); + $form->buildForm(); + $this->assertTrue($form->validate()); + $form->postProcess(); + $row = $this->getDataSource()->getRows()[0]; + $this->assertEquals('ERROR', $row[10]); + $this->assertEquals('Invalid value for field(s) : Campaign', $row[11]); + } + /** * @throws \CRM_Core_Exception */ diff --git a/tests/phpunit/CRM/Contribute/Import/Parser/data/contributions_bad_campaign.csv b/tests/phpunit/CRM/Contribute/Import/Parser/data/contributions_bad_campaign.csv new file mode 100644 index 0000000000..b79ea9360c --- /dev/null +++ b/tests/phpunit/CRM/Contribute/Import/Parser/data/contributions_bad_campaign.csv @@ -0,0 +1,2 @@ +External Identifier,Total Amount,Receive Date,Financial Type,Soft Credit to,Source,Note,Transaction ID,Campaign ID +bob,65,2008-09-20,Donation,mum@example.com,Word of mouth,Call him back,999,999