public function testGetPersonsAndAccountsByEmailAddress()
 {
     //Create user, contact, lead and accout
     $user = UserTestHelper::createBasicUser('newUser');
     $account = AccountTestHelper::createAccountByNameForOwner('newAccount', $user);
     $lead = LeadTestHelper::createLeadbyNameForOwner('newLead', $user);
     $contact = ContactTestHelper::createContactWithAccountByNameForOwner('newContact', $user, $account);
     $lead->primaryEmail->emailAddress = '*****@*****.**';
     $lead->secondaryEmail->emailAddress = '*****@*****.**';
     $account->primaryEmail->emailAddress = '*****@*****.**';
     $account->secondaryEmail->emailAddress = '*****@*****.**';
     $contact->primaryEmail->emailAddress = '*****@*****.**';
     $contact->secondaryEmail->emailAddress = '*****@*****.**';
     $this->assertTrue($user->save());
     $this->assertTrue($lead->save());
     $this->assertTrue($account->save());
     $this->assertTrue($contact->save());
     //Test with defaults
     $emailAddress = '*****@*****.**';
     $personsOrAccounts = EmailArchivingUtil::getPersonsAndAccountsByEmailAddress($emailAddress);
     $this->assertEmpty($personsOrAccounts);
     $emailAddress = '*****@*****.**';
     $personsOrAccounts = EmailArchivingUtil::getPersonsAndAccountsByEmailAddress($emailAddress);
     $this->assertEmpty($personsOrAccounts);
     $emailAddress = '*****@*****.**';
     $personsOrAccounts = EmailArchivingUtil::getPersonsAndAccountsByEmailAddress($emailAddress);
     $this->assertEmpty($personsOrAccounts);
     $emailAddress = '*****@*****.**';
     $personsOrAccounts = EmailArchivingUtil::getPersonsAndAccountsByEmailAddress($emailAddress);
     $this->assertEmpty($personsOrAccounts);
     //Test user can access contacts
     $emailAddress = '*****@*****.**';
     $personsOrAccounts = EmailArchivingUtil::getPersonsAndAccountsByEmailAddress($emailAddress, true);
     $this->assertNotEmpty($personsOrAccounts);
     $this->assertEquals($personsOrAccounts[0], $contact);
     //Test user can access leads
     $emailAddress = '*****@*****.**';
     $personsOrAccounts = EmailArchivingUtil::getPersonsAndAccountsByEmailAddress($emailAddress, false, true);
     $this->assertNotEmpty($personsOrAccounts);
     $this->assertEquals($personsOrAccounts[0], $lead);
     //Test user can access accounts
     $emailAddress = '*****@*****.**';
     $personsOrAccounts = EmailArchivingUtil::getPersonsAndAccountsByEmailAddress($emailAddress, false, false, true);
     $this->assertNotEmpty($personsOrAccounts);
     $this->assertEquals($personsOrAccounts[0], $account);
     //Test user can access users
     $user->primaryEmail->emailAddress = '*****@*****.**';
     $this->assertTrue($user->save());
     $emailAddress = '*****@*****.**';
     $personsOrAccounts = EmailArchivingUtil::getPersonsAndAccountsByEmailAddress($emailAddress, false, false, false);
     $this->assertNotEmpty($personsOrAccounts);
     $this->assertEquals($personsOrAccounts[0], $user);
 }
 /**
  * Create EmailMessageRecipient
  * @param array $recipientInfo
  * @param boolean $userCanAccessContacts
  * @param boolean $userCanAccessLeads
  * @param boolean $userCanAccessAccounts
  * @return EmailMessageRecipient
  */
 public static function createEmailMessageRecipient($recipientInfo, $userCanAccessContacts, $userCanAccessLeads, $userCanAccessAccounts)
 {
     $recipient = new EmailMessageRecipient();
     $recipient->toAddress = $recipientInfo['email'];
     if (isset($recipientInfo['name'])) {
         $recipient->toName = $recipientInfo['name'];
     }
     $recipient->type = $recipientInfo['type'];
     $personsOrAccounts = EmailArchivingUtil::getPersonsAndAccountsByEmailAddress($recipientInfo['email'], $userCanAccessContacts, $userCanAccessLeads, $userCanAccessAccounts);
     if (!empty($personsOrAccounts)) {
         foreach ($personsOrAccounts as $personOrAccount) {
             $recipient->personsOrAccounts->add($personOrAccount);
         }
     }
     return $recipient;
 }