/** * Tests that the expression is correctly traversed * * @return void */ public function testTraverse() { $count = 0; $visitor = function () use(&$count) { $count++; }; $expr = new QueryExpression(); $expr->eq('test', 'true'); $expr2 = new QueryExpression(); $expr2->eq('test', 'false'); $caseExpression = new CaseExpression([$expr, $expr2]); $caseExpression->traverse($visitor); $this->assertSame(4, $count); }
/** * Test cloning * * @return void */ public function testClone() { $expr = new QueryExpression(); $expr->eq('test', 'true'); $expr2 = new QueryExpression(); $expr2->eq('test2', 'false'); $caseExpression = new CaseExpression([$expr, $expr2], 'foobar'); $dupe = clone $caseExpression; $dupe->elseValue('nope'); $this->assertNotEquals($caseExpression, $dupe); $this->assertNotSame($caseExpression, $dupe); }
/** * Tests that it is possible to bind arguments to a query and it will return the right * results * * @return void */ public function testCustomBindings() { $table = TableRegistry::get('Articles'); $query = $table->find()->where(['id >' => 1]); $query->where(function ($exp) { $e = new QueryExpression(); return $exp->add($e->eq(new IdentifierExpression('author_id'), new IdentifierExpression(':author'))); }); $query->bind(':author', 1, 'integer'); $this->assertEquals(1, $query->count()); $this->assertEquals(3, $query->first()->id); }