Commit | Line | Data |
---|---|---|
6a488035 TO |
1 | <?php |
2 | require_once 'CiviTest/CiviUnitTestCase.php'; | |
3 | require_once 'CiviTest/Contact.php'; | |
4 | ||
5 | /** | |
6 | * Include dataProvider for tests | |
7 | */ | |
8 | class CRM_Contact_BAO_QueryTest extends CiviUnitTestCase { | |
6a488035 | 9 | |
e9479dcf EM |
10 | /** |
11 | * @return CRM_Contact_BAO_QueryTestDataProvider | |
12 | */ | |
6a488035 | 13 | public function dataProvider() { |
acb1052e | 14 | return new CRM_Contact_BAO_QueryTestDataProvider(); |
6a488035 TO |
15 | } |
16 | ||
00be9182 | 17 | public function setUp() { |
6a488035 TO |
18 | parent::setUp(); |
19 | } | |
20 | ||
00be9182 | 21 | public function tearDown() { |
6a488035 TO |
22 | $tablesToTruncate = array( |
23 | 'civicrm_group_contact', | |
24 | 'civicrm_group', | |
25 | 'civicrm_saved_search', | |
26 | 'civicrm_entity_tag', | |
27 | 'civicrm_tag', | |
28 | 'civicrm_contact', | |
29 | ); | |
30 | $this->quickCleanup($tablesToTruncate); | |
31 | } | |
32 | ||
33 | /** | |
34 | * Test CRM_Contact_BAO_Query::searchQuery() | |
6c6e6187 | 35 | * @dataProvider dataProvider |
1e1fdcf6 EM |
36 | * @param $fv |
37 | * @param $count | |
38 | * @param $ids | |
39 | * @param $full | |
6a488035 | 40 | */ |
00be9182 | 41 | public function testSearch($fv, $count, $ids, $full) { |
6a488035 TO |
42 | $op = new PHPUnit_Extensions_Database_Operation_Insert(); |
43 | $op->execute($this->_dbconn, | |
bbfd46a5 | 44 | $this->createFlatXMLDataSet( |
6a488035 TO |
45 | dirname(__FILE__) . '/queryDataset.xml' |
46 | ) | |
47 | ); | |
48 | ||
49 | $params = CRM_Contact_BAO_Query::convertFormValues($fv); | |
92915c55 | 50 | $obj = new CRM_Contact_BAO_Query($params); |
b81f44dd | 51 | |
52 | // let's set useGroupBy=true since we are listing contacts here who might belong to | |
53 | // more than one group / tag / notes etc. | |
54 | $obj->_useGroupBy = TRUE; | |
55 | ||
92915c55 | 56 | $dao = $obj->searchQuery(); |
6a488035 TO |
57 | |
58 | $contacts = array(); | |
59 | while ($dao->fetch()) { | |
60 | $contacts[] = $dao->contact_id; | |
61 | } | |
62 | ||
63 | sort($contacts, SORT_NUMERIC); | |
64 | ||
65 | $this->assertEquals($ids, $contacts, 'In line ' . __LINE__); | |
66 | } | |
e5fccefb EM |
67 | |
68 | /** | |
eceb18cc | 69 | * Check that we get a successful result querying for home address. |
e5fccefb EM |
70 | * CRM-14263 search builder failure with search profile & address in criteria |
71 | */ | |
00be9182 | 72 | public function testSearchProfileHomeCityCRM14263() { |
e5fccefb EM |
73 | $contactID = $this->individualCreate(); |
74 | CRM_Core_Config::singleton()->defaultSearchProfileID = 1; | |
92915c55 TO |
75 | $this->callAPISuccess('address', 'create', array( |
76 | 'contact_id' => $contactID, | |
77 | 'city' => 'Cool City', | |
acb1052e | 78 | 'location_type_id' => 1, |
92915c55 | 79 | )); |
e5fccefb EM |
80 | $params = array( |
81 | 0 => array( | |
82 | 0 => 'city-1', | |
83 | 1 => '=', | |
84 | 2 => 'Cool City', | |
85 | 3 => 1, | |
86 | 4 => 0, | |
21dfd5f5 | 87 | ), |
e5fccefb EM |
88 | ); |
89 | $returnProperties = array( | |
90 | 'contact_type' => 1, | |
91 | 'contact_sub_type' => 1, | |
92 | 'sort_name' => 1, | |
93 | ); | |
94 | ||
95 | $queryObj = new CRM_Contact_BAO_Query($params, $returnProperties); | |
96 | try { | |
55eb4e22 | 97 | $resultDAO = $queryObj->searchQuery(0, 0, NULL, |
e5fccefb EM |
98 | FALSE, FALSE, |
99 | FALSE, FALSE, | |
100 | FALSE); | |
55eb4e22 | 101 | $this->assertTrue($resultDAO->fetch()); |
e5fccefb | 102 | } |
55eb4e22 EM |
103 | catch (PEAR_Exception $e) { |
104 | $err = $e->getCause(); | |
105 | $this->fail('invalid SQL created' . $e->getMessage() . " " . $err->userinfo); | |
e5fccefb | 106 | |
55eb4e22 | 107 | } |
e5fccefb EM |
108 | } |
109 | ||
55eb4e22 | 110 | /** |
eceb18cc | 111 | * Check that we get a successful result querying for home address. |
55eb4e22 EM |
112 | * CRM-14263 search builder failure with search profile & address in criteria |
113 | */ | |
00be9182 | 114 | public function testSearchProfileHomeCityNoResultsCRM14263() { |
55eb4e22 EM |
115 | $contactID = $this->individualCreate(); |
116 | CRM_Core_Config::singleton()->defaultSearchProfileID = 1; | |
92915c55 TO |
117 | $this->callAPISuccess('address', 'create', array( |
118 | 'contact_id' => $contactID, | |
119 | 'city' => 'Cool City', | |
acb1052e | 120 | 'location_type_id' => 1, |
92915c55 | 121 | )); |
55eb4e22 EM |
122 | $params = array( |
123 | 0 => array( | |
124 | 0 => 'city-1', | |
125 | 1 => '=', | |
126 | 2 => 'Dumb City', | |
127 | 3 => 1, | |
128 | 4 => 0, | |
21dfd5f5 | 129 | ), |
55eb4e22 EM |
130 | ); |
131 | $returnProperties = array( | |
132 | 'contact_type' => 1, | |
133 | 'contact_sub_type' => 1, | |
134 | 'sort_name' => 1, | |
135 | ); | |
136 | ||
137 | $queryObj = new CRM_Contact_BAO_Query($params, $returnProperties); | |
138 | try { | |
139 | $resultDAO = $queryObj->searchQuery(0, 0, NULL, | |
140 | FALSE, FALSE, | |
141 | FALSE, FALSE, | |
142 | FALSE); | |
143 | $this->assertFalse($resultDAO->fetch()); | |
144 | } | |
145 | catch (PEAR_Exception $e) { | |
146 | $err = $e->getCause(); | |
147 | $this->fail('invalid SQL created' . $e->getMessage() . " " . $err->userinfo); | |
148 | ||
149 | } | |
150 | } | |
92915c55 | 151 | |
6c6e6187 TO |
152 | /** |
153 | * CRM-14263 search builder failure with search profile & address in criteria | |
154 | * We are retrieving primary here - checking the actual sql seems super prescriptive - but since the massive query object has | |
155 | * so few tests detecting any change seems good here :-) | |
156 | */ | |
6ea503d4 | 157 | public function testSearchProfilePrimaryCityCRM14263() { |
6c6e6187 TO |
158 | $contactID = $this->individualCreate(); |
159 | CRM_Core_Config::singleton()->defaultSearchProfileID = 1; | |
92915c55 TO |
160 | $this->callAPISuccess('address', 'create', array( |
161 | 'contact_id' => $contactID, | |
162 | 'city' => 'Cool City', | |
acb1052e | 163 | 'location_type_id' => 1, |
92915c55 | 164 | )); |
6c6e6187 | 165 | $params = array( |
92915c55 TO |
166 | 0 => array( |
167 | 0 => 'city', | |
168 | 1 => '=', | |
169 | 2 => 'Cool City', | |
170 | 3 => 1, | |
171 | 4 => 0, | |
172 | ), | |
173 | ); | |
6c6e6187 | 174 | $returnProperties = array( |
92915c55 TO |
175 | 'contact_type' => 1, |
176 | 'contact_sub_type' => 1, | |
177 | 'sort_name' => 1, | |
178 | ); | |
6c6e6187 TO |
179 | $expectedSQL = "SELECT contact_a.id as contact_id, contact_a.contact_type as `contact_type`, contact_a.contact_sub_type as `contact_sub_type`, contact_a.sort_name as `sort_name`, civicrm_address.id as address_id, civicrm_address.city as `city` FROM civicrm_contact contact_a LEFT JOIN civicrm_address ON ( contact_a.id = civicrm_address.contact_id AND civicrm_address.is_primary = 1 ) WHERE ( ( LOWER(civicrm_address.city) = 'cool city' ) ) AND (contact_a.is_deleted = 0) ORDER BY contact_a.sort_name asc, contact_a.id "; |
180 | $queryObj = new CRM_Contact_BAO_Query($params, $returnProperties); | |
181 | try { | |
182 | $this->assertEquals($expectedSQL, $queryObj->searchQuery(0, 0, NULL, | |
92915c55 TO |
183 | FALSE, FALSE, |
184 | FALSE, FALSE, | |
185 | TRUE)); | |
6c6e6187 TO |
186 | } |
187 | catch (PEAR_Exception $e) { | |
188 | $err = $e->getCause(); | |
189 | $this->fail('invalid SQL created' . $e->getMessage() . " " . $err->userinfo); | |
55eb4e22 | 190 | |
55eb4e22 | 191 | } |
6c6e6187 | 192 | } |
96025800 | 193 | |
6a488035 | 194 | } |