Merge pull request #18725 from civicrm/5.31
[civicrm-core.git] / tests / phpunit / CRM / Event / Form / ManageEvent / LocationTest.php
index 1767a26c815eaf78c7757756454749513a24544f..58bcb441f42630c743c70f1a8a4634302a64eb3b 100644 (file)
@@ -20,22 +20,166 @@ class CRM_Event_Form_ManageEvent_LocationTest extends CiviUnitTestCase {
    */
   public function testSubmit() {
     $eventID = (int) $this->eventCreate()['id'];
-    $form = $this->getFormObject('CRM_Event_Form_ManageEvent_Location', $this->getFormValues());
-    $form->set('id', $eventID);
-    $form->preProcess();
-    $form->buildQuickForm();
-    $form->postProcess();
+    $this->submitForm([], $eventID);
     $this->assertCorrectEmails($eventID);
 
     // Now do it again to see if it gets messed with.
-    $form = $this->getFormObject('CRM_Event_Form_ManageEvent_Location', array_merge($this->getFormValues(), ['loc_event_id' => $this->ids['LocBlock'][0]]));
-    $form->set('id', $eventID);
-    $form->preProcess();
-    $form->buildQuickForm();
-    $form->postProcess();
+    $this->submitForm(['loc_event_id' => $this->ids['LocBlock'][0]], $eventID);
     $this->assertCorrectEmails($eventID);
   }
 
+  /**
+   * Create() method
+   * create various elements of location block
+   * with civicrm_loc_block
+   */
+  public function testCreateWithLocBlock() {
+    $eventID = (int) $this->eventCreate()['id'];
+    $this->submitForm([
+      'address' => [
+        '1' => [
+          'street_address' => 'Saint Helier St',
+          'supplemental_address_1' => 'Hallmark Ct',
+          'supplemental_address_2' => 'Jersey Village',
+          'supplemental_address_3' => 'My Town',
+          'city' => 'Newark',
+          'postal_code' => '01903',
+          'country_id' => 1228,
+          'state_province_id' => 1029,
+          'geo_code_1' => '18.219023',
+          'geo_code_2' => '-105.00973',
+          'is_primary' => 1,
+          'location_type_id' => 1,
+        ],
+      ],
+      'email' => [
+        '1' => [
+          'email' => 'john.smith@example.org',
+          'is_primary' => 1,
+          'location_type_id' => 1,
+        ],
+      ],
+      'phone' => [
+        '1' => [
+          'phone_type_id' => 1,
+          'phone' => '303443689',
+          'is_primary' => 1,
+          'location_type_id' => 1,
+        ],
+        '2' => [
+          'phone_type_id' => 2,
+          'phone' => '9833910234',
+          'location_type_id' => 1,
+        ],
+      ],
+    ], $eventID);
+
+    //Now check DB for location block
+
+    $locationBlock = Event::get()
+      ->addWhere('id', '=', $eventID)
+      ->setSelect(['loc_block.*', 'loc_block_id'])
+      ->execute()->first();
+
+    $address = $this->callAPISuccessGetSingle('Address', ['id' => $locationBlock['loc_block.address_id']]);
+
+    $this->assertEquals([
+      'id' => $address['id'],
+      'location_type_id' => '1',
+      'is_primary' => '1',
+      'is_billing' => '0',
+      'street_address' => 'Saint Helier St',
+      'supplemental_address_1' => 'Hallmark Ct',
+      'supplemental_address_2' => 'Jersey Village',
+      'supplemental_address_3' => 'My Town',
+      'city' => 'Newark',
+      'postal_code' => '01903',
+      'country_id' => 1228,
+      'state_province_id' => 1029,
+      'geo_code_1' => '18.219023',
+      'geo_code_2' => '-105.00973',
+      'manual_geo_code' => '0',
+    ], $address);
+
+    $this->callAPISuccessGetSingle('Email', ['id' => $locationBlock['loc_block.email_id'], 'email' => 'john.smith@example.org']);
+    $this->callAPISuccessGetSingle('Phone', ['id' => $locationBlock['loc_block.phone_id'], 'phone' => '303443689']);
+    $this->callAPISuccessGetSingle('Phone', ['id' => $locationBlock['loc_block.phone_2_id'], 'phone' => '9833910234']);
+
+    // Cleanup.
+    CRM_Core_BAO_Location::deleteLocBlock($locationBlock['loc_block_id']);
+    $this->eventDelete($eventID);
+  }
+
+  /**
+   * Test updating a location block.
+   *
+   * @throws \API_Exception
+   * @throws \CRM_Core_Exception
+   * @throws \Civi\API\Exception\UnauthorizedException
+   */
+  public function testUpdateLocationBlock() {
+    $eventID = (int) $this->eventCreate()['id'];
+    $this->submitForm([
+      'address' => [
+        '1' => [
+          'street_address' => 'Old address',
+          'supplemental_address_1' => 'Hallmark Ct',
+          'supplemental_address_2' => 'Jersey Village',
+          'supplemental_address_3' => 'My Town',
+          'city' => 'Newark',
+          'postal_code' => '01903',
+          'country_id' => 1228,
+          'state_province_id' => 1029,
+          'geo_code_1' => '18.219023',
+          'geo_code_2' => '-105.00973',
+          'is_primary' => 1,
+          'location_type_id' => 1,
+        ],
+      ],
+    ], $eventID);
+
+    $this->submitForm([
+      'location_option' => 1,
+      'loc_event_id' => Event::get()->addWhere('id', '=', $eventID)->addSelect('loc_block_id')->execute()->first()['loc_block_id'],
+      'address' => [
+        '1' => [
+          'street_address' => 'New address',
+          'supplemental_address_1' => 'Hallmark Ct',
+          'supplemental_address_2' => 'Jersey Village',
+          'supplemental_address_3' => 'My Town',
+          'city' => 'Newark',
+          'postal_code' => '01903',
+          'country_id' => 1228,
+          'state_province_id' => 1029,
+          'geo_code_1' => '18.219023',
+          'geo_code_2' => '-105.00973',
+        ],
+      ],
+      'email' => [
+        '1' => [
+          'email' => '',
+        ],
+        '2' => [
+          'email' => '',
+        ],
+      ],
+      'phone' => [
+        '1' => [
+          'phone_type_id' => 1,
+          'phone' => '',
+          'phone_ext' => '',
+        ],
+        '2' => [
+          'phone_type_id' => 1,
+          'phone' => '',
+          'phone_ext' => '',
+        ],
+      ],
+    ], $eventID);
+    // Cleanup.
+    $this->eventDelete($eventID);
+  }
+
   /**
    * Get the values to submit for the form.
    *
@@ -120,4 +264,18 @@ class CRM_Event_Form_ManageEvent_LocationTest extends CiviUnitTestCase {
     return $emails;
   }
 
+  /**
+   * @param array $formValues
+   * @param int $eventID
+   *
+   * @throws \CRM_Core_Exception
+   */
+  protected function submitForm(array $formValues, int $eventID): void {
+    $form = $this->getFormObject('CRM_Event_Form_ManageEvent_Location', array_merge($this->getFormValues(), $formValues));
+    $form->set('id', $eventID);
+    $form->preProcess();
+    $form->buildQuickForm();
+    $form->postProcess();
+  }
+
 }