/** * Tests the guessContactIdsByNameAndEmail method with deleted contacts in the * mix. * */ public function testGuessContactIdsByNameAndEmailIgnoresDeletedContacts() { // // Test 1: Primary case: only one contact matches on name+email but it's // deleted. Should not match. // CRM_Mailchimp_Sync::createTemporaryTableForMailchimp(); CRM_Core_DAO::executeQuery("INSERT INTO tmp_mailchimp_push_m (email, first_name, last_name)\n VALUES (%1, %2, %3);", [1 => [static::$civicrm_contact_1['email'], 'String'], 2 => [static::$civicrm_contact_1['first_name'], 'String'], 3 => [static::$civicrm_contact_1['last_name'], 'String']]); // Delete (trash) the contact. civicrm_api3('Contact', 'delete', ['contact_id' => static::$civicrm_contact_1['contact_id']]); $result = CRM_Mailchimp_Sync::guessContactIdsByNameAndEmail(); $this->assertEquals(0, $result); // // Test 2: Check if contact 2 shares the email address and name // // Contact 2 should be matched. // change contact2's name. civicrm_api3('Contact', 'create', ['contact_id' => static::$civicrm_contact_2['contact_id'], 'first_name' => static::$civicrm_contact_1['first_name'], 'last_name' => static::$civicrm_contact_1['last_name']]); // and email. civicrm_api3('Email', 'create', ['contact_id' => static::$civicrm_contact_2['contact_id'], 'email' => static::$civicrm_contact_1['email'], 'is_billing' => 1]); CRM_Mailchimp_Sync::dropTemporaryTables(); CRM_Mailchimp_Sync::createTemporaryTableForMailchimp(); CRM_Core_DAO::executeQuery("INSERT INTO tmp_mailchimp_push_m (email, first_name, last_name)\n VALUES (%1, %2, %3);", [1 => [static::$civicrm_contact_1['email'], 'String'], 2 => [static::$civicrm_contact_1['first_name'], 'String'], 3 => [static::$civicrm_contact_1['last_name'], 'String']]); $result = CRM_Mailchimp_Sync::guessContactIdsByNameAndEmail(); $this->assertEquals(1, $result); // Check the matched record did match contact 2. $result = CRM_Core_DAO::singleValueQuery('SELECT COUNT(*) c FROM tmp_mailchimp_push_m WHERE email = %1 AND cid_guess = ' . static::$civicrm_contact_2['contact_id'], [1 => [static::$civicrm_contact_1['email'], 'String']]); $this->assertEquals(1, $result); // Test 3: a third contact matches name and email - no longer unique, should // not match. $contact3 = civicrm_api3('Contact', 'create', ['contact_type' => 'Individual', 'first_name' => static::C_CONTACT_1_FIRST_NAME, 'last_name' => static::C_CONTACT_1_LAST_NAME, 'email' => static::$civicrm_contact_1['email']]); CRM_Mailchimp_Sync::dropTemporaryTables(); CRM_Mailchimp_Sync::createTemporaryTableForMailchimp(); CRM_Core_DAO::executeQuery("INSERT INTO tmp_mailchimp_push_m (email, first_name, last_name)\n VALUES (%1, %2, %3);", [1 => [static::$civicrm_contact_1['email'], 'String'], 2 => [static::$civicrm_contact_1['first_name'], 'String'], 3 => [static::$civicrm_contact_1['last_name'], 'String']]); $result = CRM_Mailchimp_Sync::guessContactIdsByNameAndEmail(); // Remove 3rd contact. civicrm_api3('Contact', 'delete', ['contact_id' => $contact3['id'], 'skip_undelete' => 1]); // check it did not match. $this->assertEquals(0, $result); }