[REF] Add in Test for importing a deliberartly bad campaign id
authorSeamus Lee <seamuslee001@gmail.com>
Thu, 27 Oct 2022 22:26:30 +0000 (09:26 +1100)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Mon, 3 Apr 2023 00:54:39 +0000 (12:54 +1200)
tests/phpunit/CRM/Contribute/Import/Parser/ContributionTest.php
tests/phpunit/CRM/Contribute/Import/Parser/data/contributions_bad_campaign.csv [new file with mode: 0644]

index 6aa3f97f3908d91dd30ad8a40920c12d42b45acc..4616bdf06cc27da9b454e0e77227caae38293afe 100644 (file)
@@ -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 (file)
index 0000000..b79ea93
--- /dev/null
@@ -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