Declare paid event as example data, call from test
authorEileen McNaughton <emcnaughton@wikimedia.org>
Mon, 22 May 2023 00:59:53 +0000 (12:59 +1200)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Mon, 22 May 2023 20:41:24 +0000 (08:41 +1200)
I'm looking to create some set up helper classes in
the Civi\Test space, to also be available to extensions
& to standardise some of the set up routines.

I figured the best place to put the ExampleData
was in the structure created for that.

The ExampleData structure is lightly used by
the WorkflowMessage::render() function for personal
entities (ie Contact,Contribution) but it
is not used (& probably won't be) for
configuration entities. However, the examples
are intended to be multi-purpose so I think it is the right location.

Note the trait that builds on it will have to have
a lot more logic to build price sets etc than the exampleData
space really supports

Civi/Test/ExampleData/Contact/Alex.php
Civi/Test/ExampleData/Contact/Barb.php
Civi/Test/ExampleData/Event/PaidEvent.php [new file with mode: 0644]
tests/phpunit/CRM/Core/Payment/BaseIPNTest.php
tests/phpunit/CRM/Event/Form/Registration/ConfirmTest.php
tests/phpunit/CRM/Utils/TokenConsistencyTest.php
tests/phpunit/CiviTest/CiviUnitTestCase.php
tests/phpunit/api/v3/ContributionTest.php

index 9b4e155db0e61ecf544a6562a7169aad5764225b..cea8f09cd5a74128819dc7ee05cbb1f8859a3734 100644 (file)
@@ -47,31 +47,9 @@ class Alex extends EntityExample {
       'household_name' => NULL,
       'organization_name' => NULL,
       'sic_code' => NULL,
-      'contact_is_deleted' => '0',
-      'current_employer' => NULL,
-      'address_id' => NULL,
-      'street_address' => NULL,
-      'supplemental_address_1' => NULL,
-      'supplemental_address_2' => NULL,
-      'supplemental_address_3' => NULL,
-      'city' => NULL,
-      'postal_code_suffix' => NULL,
-      'postal_code' => NULL,
-      'state_province_id' => NULL,
-      'country_id' => NULL,
-      'phone_id' => '7',
       'phone_type_id' => '1',
-      'phone' => '293-6934',
-      'email_id' => '7',
-      'email' => 'daz.alex67@testing.net',
-      'im_id' => NULL,
-      'provider_id' => NULL,
-      'im' => NULL,
-      'worldregion_id' => NULL,
-      'world_region' => NULL,
-      'state_province_name' => NULL,
-      'state_province' => NULL,
-      'country' => NULL,
+      'phone_primary.phone' => '293-6934',
+      'email_primary.email' => 'daz.alex67@testing.net',
     ];
   }
 
index 3044a098c44d5c3780e78b147e84e8e546cbda3c..902bae423245df370b3d1314ccae7a93601f1aee 100644 (file)
@@ -44,30 +44,10 @@ class Barb extends EntityExample {
       'birth_date' => '1999-05-11',
       'is_deceased' => '0',
       'deceased_date' => NULL,
-      'household_name' => NULL,
       'organization_name' => NULL,
-      'sic_code' => NULL,
-      'contact_is_deleted' => '0',
-      'current_employer' => NULL,
-      'address_id' => NULL,
-      'street_address' => NULL,
-      'supplemental_address_1' => NULL,
-      'supplemental_address_2' => NULL,
-      'supplemental_address_3' => NULL,
-      'city' => NULL,
-      'postal_code_suffix' => NULL,
-      'postal_code' => NULL,
-      'geo_code_1' => NULL,
-      'geo_code_2' => NULL,
-      'state_province_id' => NULL,
-      'country_id' => NULL,
-      'phone_id' => '7',
-      'phone_type_id' => '1',
-      'phone' => '393-7924',
-      'email_id' => '7',
-      'email' => 'barb@testing.net',
-      'worldregion_id' => NULL,
-      'world_region' => NULL,
+      'phone_primary.phone_type_id' => 1,
+      'phone_primary.phone' => '393-7924',
+      'email_primary.email' => 'barb@testing.net',
       'email_greeting_display' => 'Dear Barb',
       'postal_greeting_display' => 'Dear Barb',
     ];
diff --git a/Civi/Test/ExampleData/Event/PaidEvent.php b/Civi/Test/ExampleData/Event/PaidEvent.php
new file mode 100644 (file)
index 0000000..d6c2a71
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+
+namespace Civi\Test\ExampleData\Event;
+
+use Civi\Test\EntityExample;
+
+class PaidEvent extends EntityExample {
+
+  public function getExamples(): iterable {
+    yield [
+      'name' => 'entity/' . $this->entityName . '/' . $this->getExampleName(),
+    ];
+  }
+
+  public function build(array &$example): void {
+    $example['data'] = [
+      'id' => 0,
+      'title' => 'Annual CiviCRM meet',
+      'summary' => 'If you have any CiviCRM related issues or want to track where CiviCRM is heading, Sign up now',
+      'description' => 'This event is intended to give brief idea about progress of CiviCRM and giving solutions to common user issues',
+      'event_type_id' => 1,
+      'is_public' => TRUE,
+      'start_date' => 20081021,
+      'end_date' => '+ 1 month',
+      'is_online_registration' => TRUE,
+      'registration_start_date' => 20080601,
+      'registration_end_date' => '+ 1 month',
+      'max_participants' => 100,
+      'event_full_text' => 'Sorry! We are already full',
+      'is_monetary' => TRUE,
+      'financial_type_id' => 3,
+      'is_active' => 1,
+      'default_role_id' => 1,
+      'is_show_location' => TRUE,
+      'is_email_confirm' => 1,
+      'is_pay_later' => TRUE,
+      'pay_later_text' => 'Transfer funds',
+      'pay_later_receipt' => 'Please transfer funds to our bank account.',
+      'fee_label' => 'Event fees',
+    ];
+  }
+
+}
index 5fdc3ed032edf659e0042818fd18525aa6ada5da..5668141ef6912ec30b11c12eb97eac9a82278a72 100644 (file)
@@ -370,7 +370,7 @@ class CRM_Core_Payment_BaseIPNTest extends CiviUnitTestCase {
    *
    */
   public function _setUpParticipantObjects(string $participantStatus = 'Attended'): void {
-    $event = $this->eventCreate(['is_email_confirm' => 1]);
+    $event = $this->eventCreate(['is_email_confirm' => 1, 'email_confirm_text' => '']);
     $this->setupContribution();
 
     $this->_eventId = $event['id'];
index a9e3d49905434a73fb9004df13a27360ba5dff3e..2b635db9fee729aabdf7f9c4daa0c6af446d5337 100644 (file)
@@ -538,7 +538,7 @@ class CRM_Event_Form_Registration_ConfirmTest extends CiviUnitTestCase {
    */
   private function creatEventWithProfile($event): array {
     if (empty($event)) {
-      $event = $this->eventCreate();
+      $event = $this->eventCreate(['is_monetary' => FALSE]);
       $this->createJoinedProfile(['entity_table' => 'civicrm_event', 'entity_id' => $event['id']]);
       $this->addUFField($this->ids['UFGroup']['our profile'], 'note', 'Contact', 'Comment');
     }
@@ -622,7 +622,7 @@ class CRM_Event_Form_Registration_ConfirmTest extends CiviUnitTestCase {
    * event#64.
    */
   public function testSubmitNonPrimaryEmail(): void {
-    $event = $this->eventCreate();
+    $event = $this->eventCreate(['is_monetary' => FALSE]);
     $mut = new CiviMailUtils($this, TRUE);
     $this->submitForm($event['id'], [
       [
@@ -704,7 +704,7 @@ class CRM_Event_Form_Registration_ConfirmTest extends CiviUnitTestCase {
    */
   protected function submitPaidEvent(array $submitValues = []): void {
     $this->dummyProcessorCreate();
-    $event = $this->eventCreatePaid(['payment_processor' => [$this->ids['PaymentProcessor']['dummy_live']]]);
+    $event = $this->eventCreatePaid(['payment_processor' => [$this->ids['PaymentProcessor']['dummy_live']], 'confirm_email_text' => '', 'is_pay_later' => FALSE]);
     $this->submitForm($event['id'], array_merge([
       'email-Primary' => 'demo@example.com',
       'credit_card_number' => '4111111111111111',
index 30aaa7d0b6c0c51edac35f92e82148756e5036d3..645a9d6678d242ea0361d7e2e1fbef0e23780a88 100644 (file)
@@ -673,7 +673,7 @@ Emerald City, Maine 90210
 
 event.info_url :' . CRM_Utils_System::url('civicrm/event/info', NULL, TRUE) . '&reset=1&id=1
 event.registration_url :' . CRM_Utils_System::url('civicrm/event/register', NULL, TRUE) . '&reset=1&id=1
-event.pay_later_receipt :
+event.pay_later_receipt :Please transfer funds to our bank account.
 event.custom_1 :my field
 event.confirm_email_text :
 ';
index 8f327ee4ea44dd57ec88cf86e607c4fad17cd8ee..8c013c6b1372023d2dd2a5c1422d5dda25b7235c 100644 (file)
@@ -31,6 +31,7 @@ use Civi\Api4\Contribution;
 use Civi\Api4\CustomField;
 use Civi\Api4\CustomGroup;
 use Civi\Api4\Event;
+use Civi\Api4\ExampleData;
 use Civi\Api4\FinancialAccount;
 use Civi\Api4\FinancialType;
 use Civi\Api4\LineItem;
@@ -1015,26 +1016,8 @@ class CiviUnitTestCase extends PHPUnit\Framework\TestCase {
       ]);
     }
 
-    // set defaults for missing params
-    $params = array_merge([
-      'title' => 'Annual CiviCRM meet',
-      'summary' => 'If you have any CiviCRM related issues or want to track where CiviCRM is heading, Sign up now',
-      'description' => 'This event is intended to give brief idea about progress of CiviCRM and giving solutions to common user issues',
-      'event_type_id' => 1,
-      'is_public' => 1,
-      'start_date' => 20081021,
-      'end_date' => '+ 1 month',
-      'is_online_registration' => 1,
-      'registration_start_date' => 20080601,
-      'registration_end_date' => '+ 1 month',
-      'max_participants' => 100,
-      'event_full_text' => 'Sorry! We are already full',
-      'is_monetary' => 0,
-      'is_active' => 1,
-      'default_role_id' => 1,
-      'is_show_location' => 0,
-      'is_email_confirm' => 1,
-    ], $params);
+    $params = array_merge($this->getExampleData('Event', 'PaidEvent'), $params);
+
     if (!empty($params['payment_processor_id'])) {
       $params['payment_processor'] = is_array($params['payment_processor_id']) ? $params['payment_processor_id'] : [$params['payment_processor_id']];
     }
@@ -3912,4 +3895,22 @@ WHERE table_schema = DATABASE()");
     }
   }
 
+  /**
+   * Get example data.
+   *
+   * @param string $entity
+   * @param string $name
+   *
+   * @return array
+   * @throws \CRM_Core_Exception
+   */
+  protected function getExampleData(string $entity, string $name): array {
+    $data = ExampleData::get(FALSE)
+      ->addSelect('data')
+      ->addWhere('name', '=', 'entity/' . $entity . '/' . $name)
+      ->execute()->first()['data'];
+    unset($data['id']);
+    return $data;
+  }
+
 }
index 456c6e686d84d6cc7633257be3cbbf1de47f247e..d1dc613bcd2fd4f69160deba2c0ecf89321a4ba5 100644 (file)
@@ -3974,7 +3974,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase {
    * @throws \CRM_Core_Exception
    */
   public function createPendingParticipantContribution() {
-    $this->_ids['event']['test'] = $this->eventCreate(['is_email_confirm' => 1, 'confirm_from_email' => 'test@civicrm.org'])['id'];
+    $this->_ids['event']['test'] = $this->eventCreate(['is_email_confirm' => 1, 'confirm_from_email' => 'test@civicrm.org', 'confirm_email_text' => ''])['id'];
     $participantID = $this->participantCreate(['event_id' => $this->_ids['event']['test'], 'status_id' => 6, 'contact_id' => $this->individualID]);
     $this->_ids['participant'] = $participantID;
     $params = array_merge($this->_params, ['contact_id' => $this->individualID, 'contribution_status_id' => 2, 'financial_type_id' => 'Event Fee']);