+ public function testPseudoconstantMatch() {
+ MockBasicEntity::delete()->addWhere('id', '>', 0)->execute();
+
+ $records = [
+ ['group:label' => 'First', 'shape' => 'round', 'fruit:name' => 'banana'],
+ ['group:name' => 'Second', 'shape' => 'square', 'fruit:label' => 'Pear'],
+ ];
+ MockBasicEntity::save()->setRecords($records)->execute();
+
+ $results = MockBasicEntity::get()
+ ->addSelect('*', 'group:label', 'group:name', 'fruit:name', 'fruit:color', 'fruit:label')
+ ->addOrderBy('fruit:color', "DESC")
+ ->execute();
+
+ $this->assertEquals('round', $results[0]['shape']);
+ $this->assertEquals('one', $results[0]['group']);
+ $this->assertEquals('First', $results[0]['group:label']);
+ $this->assertEquals('First', $results[0]['group:name']);
+ $this->assertEquals(3, $results[0]['fruit']);
+ $this->assertEquals('Banana', $results[0]['fruit:label']);
+ $this->assertEquals('banana', $results[0]['fruit:name']);
+ $this->assertEquals('yellow', $results[0]['fruit:color']);
+
+ // Reverse order
+ $results = MockBasicEntity::get()
+ ->addOrderBy('fruit:color')
+ ->execute();
+ $this->assertEquals('two', $results[0]['group']);
+
+ // Cannot match to a non-unique option property like :color on create
+ try {
+ MockBasicEntity::create()->addValue('fruit:color', 'yellow')->execute();
+ }
+ catch (\API_Exception $createError) {
+ }
+ $this->assertContains('Illegal expression', $createError->getMessage());
+ }
+