Commit | Line | Data |
---|---|---|
df60621b | 1 | <?php |
0eea664b | 2 | |
df60621b | 3 | /** |
4 | * Include dataProvider for tests | |
acb109b7 | 5 | * @group headless |
df60621b | 6 | */ |
7 | class CRM_Member_BAO_QueryTest extends CiviUnitTestCase { | |
8 | ||
9 | /** | |
10 | * Set up function. | |
11 | * | |
12 | * Ensure CiviCase is enabled. | |
13 | */ | |
14 | public function setUp() { | |
15 | parent::setUp(); | |
16 | CRM_Core_BAO_ConfigSetting::enableComponent('CiviCase'); | |
17 | } | |
18 | ||
19 | /** | |
20 | * Check that membership type is handled. | |
21 | * | |
22 | * We want to see the following syntaxes for membership_type_id field handled: | |
23 | * 1) membership_type_id => 1 | |
24 | */ | |
25 | public function testConvertEntityFieldSingleValue() { | |
9099cab3 CW |
26 | $formValues = ['membership_type_id' => 2]; |
27 | $params = CRM_Contact_BAO_Query::convertFormValues($formValues, 0, FALSE, NULL, ['membership_type_id']); | |
28 | $this->assertEquals(['membership_type_id', '=', 2, 0, 0], $params[0]); | |
df60621b | 29 | $obj = new CRM_Contact_BAO_Query($params); |
9099cab3 | 30 | $this->assertEquals(['civicrm_membership.membership_type_id = 2'], $obj->_where[0]); |
df60621b | 31 | } |
32 | ||
33 | /** | |
34 | * Check that membership type is handled. | |
35 | * | |
36 | * We want to see the following syntaxes for membership_type_id field handled: | |
37 | * 2) membership_type_id => 5,6 | |
38 | * | |
39 | * The last of these is the format used prior to converting membership_type_id to an entity reference field. | |
40 | */ | |
41 | public function testConvertEntityFieldMultipleValueEntityRef() { | |
9099cab3 CW |
42 | $formValues = ['membership_type_id' => '1,2']; |
43 | $params = CRM_Contact_BAO_Query::convertFormValues($formValues, 0, FALSE, NULL, ['membership_type_id']); | |
44 | $this->assertEquals(['membership_type_id', 'IN', [1, 2], 0, 0], $params[0]); | |
df60621b | 45 | $obj = new CRM_Contact_BAO_Query($params); |
9099cab3 | 46 | $this->assertEquals(['civicrm_membership.membership_type_id IN ("1", "2")'], $obj->_where[0]); |
df60621b | 47 | } |
48 | ||
49 | /** | |
50 | * Check that membership type is handled. | |
51 | * | |
52 | * We want to see the following syntaxes for membership_type_id field handled: | |
53 | * 3) membership_type_id => array(5,6) | |
54 | * | |
55 | * The last of these is the format used prior to converting membership_type_id to an entity reference field. It will | |
56 | * be used by pre-existing smart groups. | |
57 | */ | |
58 | public function testConvertEntityFieldMultipleValueLegacy() { | |
9099cab3 CW |
59 | $formValues = ['membership_type_id' => [1, 2]]; |
60 | $params = CRM_Contact_BAO_Query::convertFormValues($formValues, 0, FALSE, NULL, ['membership_type_id']); | |
61 | $this->assertEquals(['membership_type_id', 'IN', [1, 2], 0, 0], $params[0]); | |
df60621b | 62 | $obj = new CRM_Contact_BAO_Query($params); |
9099cab3 | 63 | $this->assertEquals(['civicrm_membership.membership_type_id IN ("1", "2")'], $obj->_where[0]); |
df60621b | 64 | } |
65 | ||
66 | /** | |
67 | * Check that running convertFormValues more than one doesn't mangle the array. | |
68 | * | |
69 | * Unfortunately the convertFormValues & indeed much of the query code is run in pre-process AND post-process. | |
70 | * | |
71 | * The convertFormValues function should cope with this until such time as we can rationalise that. | |
72 | */ | |
73 | public function testConvertEntityFieldMultipleValueEntityRefDoubleRun() { | |
9099cab3 CW |
74 | $formValues = ['membership_type_id' => '1,2']; |
75 | $params = CRM_Contact_BAO_Query::convertFormValues($formValues, 0, FALSE, NULL, ['membership_type_id']); | |
76 | $this->assertEquals(['membership_type_id', 'IN', [1, 2], 0, 0], $params[0]); | |
77 | $params = CRM_Contact_BAO_Query::convertFormValues($params, 0, FALSE, NULL, ['membership_type_id']); | |
78 | $this->assertEquals(['membership_type_id', 'IN', [1, 2], 0, 0], $params[0]); | |
df60621b | 79 | $obj = new CRM_Contact_BAO_Query($params); |
9099cab3 | 80 | $this->assertEquals(['civicrm_membership.membership_type_id IN ("1", "2")'], $obj->_where[0]); |
df60621b | 81 | } |
82 | ||
c12606e5 SL |
83 | /** |
84 | * Membership Date fields | |
85 | * @return array | |
86 | */ | |
87 | public function membershipDateFields() { | |
88 | $fields = []; | |
89 | $fields[] = ['membership_join_date']; | |
90 | $fields[] = ['membership_start_date']; | |
91 | $fields[] = ['membership_end_date']; | |
92 | return $fields; | |
93 | } | |
94 | ||
95 | /** | |
96 | * Test generating a correct where clause for date fields as generated by search builder | |
97 | * @dataProvider membershipDateFields | |
98 | */ | |
99 | public function testMembershipDateWhereSearchBuilder($dateField) { | |
100 | $dbDateField = str_replace('membership_', '', $dateField); | |
101 | $formValues = [ | |
102 | 'mapper' => [ | |
103 | 1 => [['Membership', $dateField], [''], [''], [''], ['']], | |
104 | 2 => [[''], [''], [''], [''], ['']], | |
105 | 3 => [[''], [''], [''], [''], ['']], | |
106 | ], | |
107 | 'operator' => [ | |
108 | 1 => ['<=', '', '', '', ''], | |
109 | 2 => ['', '', '', '', ''], | |
110 | 3 => ['', '', '', '', ''], | |
111 | ], | |
112 | 'value' => [ | |
113 | 1 => ['20200201', '', '', '', ''], | |
114 | 2 => ['', '', '', '', '', ''], | |
115 | 3 => ['', '', '', '', '', ''], | |
116 | ], | |
117 | 'radio_ts' => '', | |
118 | ]; | |
119 | $searchBuilderForm = new CRM_Contact_Form_Search_Builder(); | |
120 | $params = [[$dateField, "<=", "20200201", 1, 0]]; | |
121 | $this->assertEquals($params, $searchBuilderForm->convertFormValues($formValues)); | |
122 | $obj = new CRM_Contact_BAO_Query($params); | |
123 | $this->assertEquals(['civicrm_membership.' . $dbDateField . ' <= \'20200201000000\''], $obj->_where[1]); | |
124 | } | |
125 | ||
df60621b | 126 | } |