X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fapi%2Fv4%2FAction%2FSqlExpressionTest.php;h=402bb53ab3c89488d216f8e616b025a2507dd703;hb=a2086e29bf45b92cc1d7be91bc8ecbb2adb1507e;hp=f99242e03e470c19a794e18b0852bcf84a21a389;hpb=979c39930bfbf0e3e8ef985961a80c5e859c9695;p=civicrm-core.git diff --git a/tests/phpunit/api/v4/Action/SqlExpressionTest.php b/tests/phpunit/api/v4/Action/SqlExpressionTest.php index f99242e03e..402bb53ab3 100644 --- a/tests/phpunit/api/v4/Action/SqlExpressionTest.php +++ b/tests/phpunit/api/v4/Action/SqlExpressionTest.php @@ -14,7 +14,6 @@ * * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing - * */ @@ -22,6 +21,7 @@ namespace api\v4\Action; use api\v4\UnitTestCase; use Civi\Api4\Contact; +use Civi\Api4\Email; /** * @group headless @@ -81,7 +81,7 @@ class SqlExpressionTest extends UnitTestCase { catch (\API_Exception $e) { $msg = $e->getMessage(); } - $this->assertContains('alias', $msg); + $this->assertStringContainsString('alias', $msg); try { Contact::get() ->addSelect('55 AS sort_name') @@ -90,10 +90,41 @@ class SqlExpressionTest extends UnitTestCase { catch (\API_Exception $e) { $msg = $e->getMessage(); } - $this->assertContains('existing field name', $msg); + $this->assertStringContainsString('existing field name', $msg); Contact::get() ->addSelect('55 AS ok_alias') ->execute(); } + public function testSelectEquations() { + $contact = Contact::create(FALSE)->addValue('first_name', 'bob') + ->addChain('email', Email::create()->setValues(['email' => 'hello@example.com', 'contact_id' => '$id'])) + ->execute()->first(); + $result = Email::get(FALSE) + ->setSelect([ + 'IF((contact_id.first_name = "bob"), "Yes", "No") AS is_bob', + 'IF((contact_id.first_name != "fred"), "No", "Yes") AS is_fred', + '(5 * 11)', + '(5 > 11) AS five_greater_eleven', + '(5 <= 11) AS five_less_eleven', + '(1 BETWEEN 0 AND contact_id) AS is_between', + // These fields don't exist + '(illegal * stuff) AS illegal_stuff', + // This field will be null + '(hold_date + 5) AS null_plus_five', + ]) + ->addWhere('contact_id', '=', $contact['id']) + ->setLimit(1) + ->execute() + ->first(); + $this->assertEquals('Yes', $result['is_bob']); + $this->assertEquals('No', $result['is_fred']); + $this->assertEquals('55', $result['5_11']); + $this->assertFalse($result['five_greater_eleven']); + $this->assertTrue($result['five_less_eleven']); + $this->assertTrue($result['is_between']); + $this->assertArrayNotHasKey('illegal_stuff', $result); + $this->assertEquals('5', $result['null_plus_five']); + } + }