CRM-21733: Adding the ability to override membership temporarily until specific date
[civicrm-core.git] / tests / phpunit / CRM / Member / BAO / QueryTest.php
1 <?php
2
3 /**
4 * Include dataProvider for tests
5 * @group headless
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() {
26 $formValues = array('membership_type_id' => 2);
27 $params = CRM_Contact_BAO_Query::convertFormValues($formValues, 0, FALSE, NULL, array('membership_type_id'));
28 $this->assertEquals(array('membership_type_id', '=', 2, 0, 0), $params[0]);
29 $obj = new CRM_Contact_BAO_Query($params);
30 $this->assertEquals(array('civicrm_membership.membership_type_id = 2'), $obj->_where[0]);
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() {
42 $formValues = array('membership_type_id' => '1,2');
43 $params = CRM_Contact_BAO_Query::convertFormValues($formValues, 0, FALSE, NULL, array('membership_type_id'));
44 $this->assertEquals(array('membership_type_id', 'IN', array(1, 2), 0, 0), $params[0]);
45 $obj = new CRM_Contact_BAO_Query($params);
46 $this->assertEquals(array('civicrm_membership.membership_type_id IN ("1", "2")'), $obj->_where[0]);
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() {
59 $formValues = array('membership_type_id' => array(1, 2));
60 $params = CRM_Contact_BAO_Query::convertFormValues($formValues, 0, FALSE, NULL, array('membership_type_id'));
61 $this->assertEquals(array('membership_type_id', 'IN', array(1, 2), 0, 0), $params[0]);
62 $obj = new CRM_Contact_BAO_Query($params);
63 $this->assertEquals(array('civicrm_membership.membership_type_id IN ("1", "2")'), $obj->_where[0]);
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() {
74 $formValues = array('membership_type_id' => '1,2');
75 $params = CRM_Contact_BAO_Query::convertFormValues($formValues, 0, FALSE, NULL, array('membership_type_id'));
76 $this->assertEquals(array('membership_type_id', 'IN', array(1, 2), 0, 0), $params[0]);
77 $params = CRM_Contact_BAO_Query::convertFormValues($params, 0, FALSE, NULL, array('membership_type_id'));
78 $this->assertEquals(array('membership_type_id', 'IN', array(1, 2), 0, 0), $params[0]);
79 $obj = new CRM_Contact_BAO_Query($params);
80 $this->assertEquals(array('civicrm_membership.membership_type_id IN ("1", "2")'), $obj->_where[0]);
81 }
82
83 }