$this->assertEquals("O'Connor", $result['last_name'], 'in line' . __LINE__);
}
+ /**
+ * Test retrieval by addressee id.
+ */
+ public function testGetByAddresseeID() {
+ $individual1ID = $this->individualCreate([
+ 'skip_greeting_processing' => 1,
+ 'addressee_id' => 'null',
+ 'email_greeting_id' => 'null',
+ 'postal_greeting_id' => 'null'
+ ]);
+ $individual2ID = $this->individualCreate();
+
+ $this->assertEquals($individual1ID,
+ $this->callAPISuccessGetValue('Contact', ['contact_type' => 'Individual', 'addressee_id' => ['IS NULL' => 1], 'return' => 'id'])
+ );
+ $this->assertEquals($individual1ID,
+ $this->callAPISuccessGetValue('Contact', ['contact_type' => 'Individual', 'email_greeting_id' => ['IS NULL' => 1], 'return' => 'id'])
+ );
+ $this->assertEquals($individual1ID,
+ $this->callAPISuccessGetValue('Contact', ['contact_type' => 'Individual', 'postal_greeting_id' => ['IS NULL' => 1], 'return' => 'id'])
+ );
+
+ $this->assertEquals($individual2ID,
+ $this->callAPISuccessGetValue('Contact', ['contact_type' => 'Individual', 'addressee_id' => ['NOT NULL' => 1], 'return' => 'id'])
+ );
+ }
+
/**
* Check with complete array + custom field.
*
$expected->matches($actual);
}
+ /**
+ * Test merging 2 organizations.
+ *
+ * CRM-20421: This test make sure that inherited memberships are deleted upon merging organization.
+ */
+ public function testMergeOrganizations() {
+ $organizationID1 = $this->organizationCreate(array(), 0);
+ $organizationID2 = $this->organizationCreate(array(), 1);
+ $contact = $this->callAPISuccess('contact', 'create', array_merge($this->_params, array(
+ 'employer_id' => $organizationID1,
+ )
+ ));
+ $contact = $contact["values"][$contact["id"]];
+
+ $membershipType = $this->createEmployerOfMembership();
+ $membershipParams = array(
+ 'membership_type_id' => $membershipType["id"],
+ 'contact_id' => $organizationID1,
+ 'start_date' => "01/01/2015",
+ 'join_date' => "01/01/2010",
+ 'end_date' => "12/31/2015",
+ );
+ $ownermembershipid = $this->contactMembershipCreate($membershipParams);
+
+ $contactmembership = $this->callAPISuccess("membership", "getsingle", array(
+ "contact_id" => $contact["id"],
+ ));
+
+ $this->assertEquals($ownermembershipid, $contactmembership["owner_membership_id"], "Contact membership must be inherited from Organization");
+
+ CRM_Dedupe_Merger::moveAllBelongings($organizationID2, $organizationID1, array(
+ "move_rel_table_memberships" => "0",
+ "move_rel_table_relationships" => "1",
+ "main_details" => array(
+ "contact_id" => $organizationID2,
+ "contact_type" => "Organization",
+ ),
+ "other_details" => array(
+ "contact_id" => $organizationID1,
+ "contact_type" => "Organization",
+ ),
+ ));
+
+ $contactmembership = $this->callAPISuccess("membership", "get", array(
+ "contact_id" => $contact["id"],
+ ));
+
+ $this->assertEquals(0, $contactmembership["count"], "Contact membership must be deleted after merging organization without memberships.");
+ }
+
+ private function createEmployerOfMembership() {
+ $params = array(
+ 'domain_id' => CRM_Core_Config::domainID(),
+ 'name' => 'Organization Membership',
+ 'description' => NULL,
+ 'member_of_contact_id' => 1,
+ 'financial_type_id' => 1,
+ 'minimum_fee' => 10,
+ 'duration_unit' => 'year',
+ 'duration_interval' => 1,
+ 'period_type' => 'rolling',
+ 'relationship_type_id' => 5,
+ 'relationship_direction' => 'b_a',
+ 'visibility' => 'Public',
+ 'is_active' => 1,
+ );
+ $membershipType = $this->callAPISuccess('membership_type', 'create', $params);
+ return $membershipType["values"][$membershipType["id"]];
+ }
+
/**
* Verify successful update of household contact.
*/
$this->callAPISuccess('contact', 'delete', array('id' => $created_contact_id, 'skip_undelete' => TRUE));
}
+ /**
+ * Test the prox_distance functionality works.
+ *
+ * This is primarily testing functionality in the BAO_Query object that 'happens to be'
+ * accessible via the api.
+ */
+ public function testContactGetProximity() {
+ CRM_Core_Config::singleton()->geocodeMethod = 'CRM_Utils_MockGeocoder';
+ $this->individualCreate();
+ $contactID = $this->individualCreate();
+ $this->callAPISuccess('Address', 'create', [
+ 'contact_id' => $contactID,
+ 'is_primary' => 1,
+ 'city' => 'Whangarei',
+ 'street_address' => 'Dent St',
+ 'geo_code_1' => '-35.8743325',
+ 'geo_code_2' => '174.4567136',
+ 'location_type_id' => 'Home',
+ ]);
+ $contact = $this->callAPISuccess('Contact', 'get', [
+ 'prox_distance' => 100,
+ 'prox_geo_code_1' => '-35.72192',
+ 'prox_geo_code_2' => '174.32034',
+ ]);
+ $this->assertEquals(1, $contact['count']);
+ $this->assertEquals($contactID, $contact['id']);
+ }
+
public function testLoggedInUserAPISupportToken() {
$description = "Get contact id of the current logged in user";
$subFile = "ContactIDOfLoggedInUserContactAPI";
$this->assertEquals($communicationStyle['value'], $result['communication_style_id']);
}
+ /**
+ * Test that creating a contact with various contact greetings works.
+ */
+ public function testContactGreetingsCreate() {
+ $contact = $this->callAPISuccess('Contact', 'create', array('first_name' => 'Alan', 'last_name' => 'MouseMouse', 'contact_type' => 'Individual'));
+ $contact = $this->callAPISuccessGetSingle('Contact', array('id' => $contact['id'], 'return' => 'postal_greeting'));
+ $this->assertEquals('Dear Alan', $contact['postal_greeting_display']);
+
+ $contact = $this->callAPISuccess('Contact', 'create', array('id' => $contact['id'], 'postal_greeting_id' => 2));
+ $contact = $this->callAPISuccessGetSingle('Contact', array('id' => $contact['id'], 'return' => 'postal_greeting'));
+ $this->assertEquals('Dear Alan MouseMouse', $contact['postal_greeting_display']);
+
+ $contact = $this->callAPISuccess('Contact', 'create', array('organization_name' => 'Alan\'s Show', 'contact_type' => 'Organization'));
+ $contact = $this->callAPISuccessGetSingle('Contact', array('id' => $contact['id'], 'return' => 'postal_greeting, addressee, email_greeting'));
+ $this->assertEquals('', $contact['postal_greeting_display']);
+ $this->assertEquals('', $contact['email_greeting_display']);
+ $this->assertEquals('Alan\'s Show', $contact['addressee_display']);
+ }
+
+ /**
+ * Test that creating a contact with various contact greetings works.
+ */
+ public function testContactGreetingsCreateWithCustomField() {
+ $ids = $this->entityCustomGroupWithSingleFieldCreate(__FUNCTION__, __FILE__);
+ $contact = $this->callAPISuccess('Contact', 'create', array('first_name' => 'Alan', 'contact_type' => 'Individual', 'custom_' . $ids['custom_field_id'] => 'Mice'));
+
+ // Change postal greeting to involve a custom field.
+ $postalOption = $this->callAPISuccessGetSingle('OptionValue', array('option_group_id' => 'postal_greeting', 'filter' => 1, 'is_default' => 1));
+ $this->callAPISuccess('OptionValue', 'create', array(
+ 'id' => $postalOption['id'],
+ 'name' => 'Dear {contact.first_name} {contact.custom_' . $ids['custom_field_id'] . '}',
+ 'label' => 'Dear {contact.first_name} {contact.custom_' . $ids['custom_field_id'] . '}',
+ ));
+
+ // Update contact & see if postal greeting now reflects the new string.
+ $this->callAPISuccess('Contact', 'create', array('id' => $contact['id'], 'last_name' => 'MouseyMousey'));
+ $contact = $this->callAPISuccessGetSingle('Contact', array('id' => $contact['id'], 'return' => 'postal_greeting'));
+ $this->assertEquals('Dear Alan Mice', $contact['postal_greeting_display']);
+
+ // Set contact to have no postal greeting & check it is correct.
+ $this->callAPISuccess('Contact', 'create', array('id' => $contact['id'], 'postal_greeting_id' => 'null'));
+ $contact = $this->callAPISuccessGetSingle('Contact', array('id' => $contact['id'], 'return' => 'postal_greeting'));
+ $this->assertEquals('', $contact['postal_greeting_display']);
+
+ //Cleanup
+ $this->callAPISuccess('OptionValue', 'create', array('id' => $postalOption['id'], 'name' => 'Dear {contact.first_name}'));
+ $this->customFieldDelete($ids['custom_field_id']);
+ $this->customGroupDelete($ids['custom_group_id']);
+ }
+
}