From 4a612bd792ef6849c892c6ab45c36cbf7e90a61f Mon Sep 17 00:00:00 2001 From: Tano Rojas Date: Fri, 5 Nov 2021 16:05:26 +0700 Subject: [PATCH] Handle activity creation for emails to organization contacts --- CRM/Utils/Mail/Incoming.php | 6 ++ tests/phpunit/CRM/Utils/Mail/IncomingTest.php | 89 +++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 tests/phpunit/CRM/Utils/Mail/IncomingTest.php diff --git a/CRM/Utils/Mail/Incoming.php b/CRM/Utils/Mail/Incoming.php index 1b5b71f1bf..cf2f7978b1 100644 --- a/CRM/Utils/Mail/Incoming.php +++ b/CRM/Utils/Mail/Incoming.php @@ -452,6 +452,12 @@ class CRM_Utils_Mail_Incoming { $contactID = NULL; if ($dao) { $contactID = $dao->contact_id; + } else { + $dao = CRM_Contact_BAO_Contact::matchContactOnEmail($email, 'Organization'); + + if ($dao) { + $contactID = $dao->contact_id; + } } $result = NULL; diff --git a/tests/phpunit/CRM/Utils/Mail/IncomingTest.php b/tests/phpunit/CRM/Utils/Mail/IncomingTest.php new file mode 100644 index 0000000000..96963f8fe9 --- /dev/null +++ b/tests/phpunit/CRM/Utils/Mail/IncomingTest.php @@ -0,0 +1,89 @@ +email = "test{$rand}@example.com"; + $this->name = "Test$rand"; + } + + /** + * Tests that an email to an existent individual contact uses that contact. + */ + public function testEmailUseExistentIndividualContact(): void { + $expectedContactId = $this->individualCreate(['email' => $this->email]); + + $receivedContactId = CRM_Utils_Mail_Incoming::getContactID($this->email, $this->name, TRUE, $mail); + + $this->assertEquals($expectedContactId, $receivedContactId); + } + + /** + * Tests that an email to a non-existent contact creates an individual. + */ + public function testEmailCreateIndividualContact(): void { + $contact = CRM_Contact_BAO_Contact::matchContactOnEmail($this->email, 'Individual'); + $this->assertNull($contact); + + CRM_Utils_Mail_Incoming::getContactID($this->email, $this->name, TRUE, $mail); + + $contact = CRM_Contact_BAO_Contact::matchContactOnEmail($this->email, 'Individual'); + $this->assertNotNull($contact); + } + + /** + * Tests that an email to an existent organization contact uses that contact. + */ + public function testEmailUseExistentOrganizationContact(): void { + $expectedContactId = $this->organizationCreate(['email' => $this->email]); + + $receivedContactId = CRM_Utils_Mail_Incoming::getContactID($this->email, $this->name, TRUE, $mail); + + $this->assertEquals($expectedContactId, $receivedContactId); + } + + /** + * Tests that individual contact has precedence over organization contacts. + */ + public function testEmailPrefersExistentIndividualContact(): void { + $individualContactId = $this->individualCreate(['email' => $this->email]); + $this->organizationCreate(['email' => $this->email]); + + $receivedContactId = CRM_Utils_Mail_Incoming::getContactID($this->email, $this->name, TRUE, $mail); + + $this->assertEquals($individualContactId, $receivedContactId); + } + +} -- 2.25.1