1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
<?php
namespace Civi\Test\Api4\Entity;
use Civi\Api4\Contact;
use Civi\Api4\OptionValue;
use Civi\Test\Api4\UnitTestCase;
/**
* @group headless
*/
class ContactJoinTest extends UnitTestCase {
public function setUpHeadless() {
$relatedTables = [
'civicrm_address',
'civicrm_email',
'civicrm_phone',
'civicrm_openid',
'civicrm_im',
'civicrm_website',
'civicrm_activity',
'civicrm_activity_contact',
];
$this->cleanup(['tablesToTruncate' => $relatedTables]);
$this->loadDataSet('SingleContact');
return parent::setUpHeadless();
}
public function testContactJoin() {
$contact = $this->getReference('test_contact_1');
$entitiesToTest = ['Address', 'OpenID', 'IM', 'Website', 'Email', 'Phone'];
foreach ($entitiesToTest as $entity) {
$results = civicrm_api4($entity, 'get', [
'where' => [['contact_id', '=', $contact['id']]],
'select' => ['contact.display_name', 'contact.id'],
]);
foreach ($results as $result) {
$this->assertEquals($contact['id'], $result['contact']['id']);
$this->assertEquals($contact['display_name'], $result['contact']['display_name']);
}
}
}
public function testJoinToPCMWillReturnArray() {
$contact = Contact::create()->setValues([
'preferred_communication_method' => [1, 2, 3],
'contact_type' => 'Individual',
'first_name' => 'Test',
'last_name' => 'PCM',
])->execute()->first();
$fetchedContact = Contact::get()
->addWhere('id', '=', $contact['id'])
->addSelect('preferred_communication_method')
->execute()
->first();
$this->assertCount(3, $fetchedContact["preferred_communication_method"]);
}
public function testJoinToPCMOptionValueWillShowLabel() {
$options = OptionValue::get()
->addWhere('option_group.name', '=', 'preferred_communication_method')
->execute()
->getArrayCopy();
$optionValues = array_column($options, 'value');
$labels = array_column($options, 'label');
$contact = Contact::create()->setValues([
'preferred_communication_method' => $optionValues,
'contact_type' => 'Individual',
'first_name' => 'Test',
'last_name' => 'PCM',
])->execute()->first();
$contact2 = Contact::create()->setValues([
'preferred_communication_method' => $optionValues,
'contact_type' => 'Individual',
'first_name' => 'Test',
'last_name' => 'PCM2',
])->execute()->first();
$contactIds = array_column([$contact, $contact2], 'id');
$fetchedContact = Contact::get()
->addWhere('id', 'IN', $contactIds)
->addSelect('preferred_communication_method.label')
->execute()
->first();
$preferredMethod = $fetchedContact['preferred_communication_method'];
$returnedLabels = array_column($preferredMethod, 'label');
$this->assertEquals($labels, $returnedLabels);
}
}
|