diff --git a/tests/phpunit/CRM/Contact/BAO/QueryTest.php b/tests/phpunit/CRM/Contact/BAO/QueryTest.php index 7ffcd046c25f..62e426be9e58 100644 --- a/tests/phpunit/CRM/Contact/BAO/QueryTest.php +++ b/tests/phpunit/CRM/Contact/BAO/QueryTest.php @@ -531,4 +531,42 @@ public function testGetSummaryQueryWithFinancialACLEnabled() { $this->disableFinancialACLs(); } + /** + * When we have a relative date in search criteria, check that convertFormValues() sets _low & _high date fields and returns other criteria. + * CRM-21816 fix relative dates in search bug + */ + public function testConvertFormValuesCRM21816() { + $fv = array( + "member_end_date_relative" => "starting_2.month", // next 60 days + "member_end_date_low" => "20180101000000", + "member_end_date_high" => "20180331235959", + "membership_is_current_member" => "1", + "member_is_primary" => "1", + ); + $fv_orig = $fv; // $fv is modified by convertFormValues() + $params = CRM_Contact_BAO_Query::convertFormValues($fv); + + // restructure for easier testing + $modparams = array(); + foreach ($params as $p) { + $modparams[$p[0]] = $p; + } + + // Check member_end_date_low is in params + $this->assertTrue(is_array($modparams['member_end_date_low'])); + // ... fv and params should match + $this->assertEquals($modparams['member_end_date_low'][2], $fv['member_end_date_low']); + // ... fv & fv_orig should be different + $this->assertNotEquals($fv['member_end_date_low'], $fv_orig['member_end_date_low']); + + // same for member_end_date_high + $this->assertTrue(is_array($modparams['member_end_date_high'])); + $this->assertEquals($modparams['member_end_date_high'][2], $fv['member_end_date_high']); + $this->assertNotEquals($fv['member_end_date_high'], $fv_orig['member_end_date_high']); + + // Check other fv values are in params + $this->assertEquals($modparams['membership_is_current_member'][2], $fv_orig['membership_is_current_member']); + $this->assertEquals($modparams['member_is_primary'][2], $fv_orig['member_is_primary']); + } + }