8d11e295b094392b91e7aa54cf111987eba4bd32
3 namespace api\v
4\Query
;
7 use api\v
4\UnitTestCase
;
10 * Class SelectQueryMultiJoinTest
11 * @package api\v4\Query
14 class SelectQueryMultiJoinTest
extends UnitTestCase
{
16 public function setUpHeadless() {
17 $this->cleanup(['tablesToTruncate' => ['civicrm_contact', 'civicrm_email']]);
18 $this->loadDataSet('MultiContactMultiEmail');
19 return parent
::setUpHeadless();
22 public function testOneToManySelect() {
23 $results = Contact
::get()
24 ->addSelect('emails.email')
29 $firstContactId = $this->getReference('test_contact_1')['id'];
30 $secondContactId = $this->getReference('test_contact_2')['id'];
32 $firstContact = $results[$firstContactId];
33 $secondContact = $results[$secondContactId];
34 $firstContactEmails = array_column($firstContact['emails'], 'email');
35 $secondContactEmails = array_column($secondContact['emails'], 'email');
37 $expectedFirstEmails = [
38 'test_contact_one_home@fakedomain.com',
39 'test_contact_one_work@fakedomain.com',
41 $expectedSecondEmails = [
42 'test_contact_two_home@fakedomain.com',
43 'test_contact_two_work@fakedomain.com',
46 $this->assertEquals($expectedFirstEmails, $firstContactEmails);
47 $this->assertEquals($expectedSecondEmails, $secondContactEmails);
50 public function testManyToOneSelect() {
51 $results = Email
::get()
52 ->addSelect('contact.display_name')
57 $firstEmail = $this->getReference('test_email_1');
58 $secondEmail = $this->getReference('test_email_2');
59 $thirdEmail = $this->getReference('test_email_3');
60 $fourthEmail = $this->getReference('test_email_4');
61 $firstContactEmailIds = [$firstEmail['id'], $secondEmail['id']];
62 $secondContactEmailIds = [$thirdEmail['id'], $fourthEmail['id']];
64 foreach ($results as $id => $email) {
65 $displayName = $email['contact.display_name'];
66 if (in_array($id, $firstContactEmailIds)) {
67 $this->assertEquals('First Contact', $displayName);
69 elseif (in_array($id, $secondContactEmailIds)) {
70 $this->assertEquals('Second Contact', $displayName);