use api\v4\UnitTestCase;
use Civi\Api4\Contact;
+use Civi\Api4\Email;
/**
* @group headless
catch (\API_Exception $e) {
$msg = $e->getMessage();
}
- $this->assertContains('alias', $msg);
+ $this->assertStringContainsString('alias', $msg);
try {
Contact::get()
->addSelect('55 AS sort_name')
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']);
+ }
+
}