getMock('\Cake\Database\Log\QueryLogger', ['_log']); $query = new LoggedQuery; $query->query = 'SELECT a FROM b where a = :p1 AND b = :p2 AND c = :p3'; $query->params = ['p1' => 'string', 'p3' => null, 'p2' => 3]; $logger->expects($this->once())->method('_log')->with($query); $logger->log($query); $expected = "SELECT a FROM b where a = 'string' AND b = 3 AND c = NULL"; $this->assertEquals($expected, (string)$query); } /** * Tests that positional placeholders are replaced when logging a query * * @return void */ public function testStingInterpolation2() { $logger = $this->getMock('\Cake\Database\Log\QueryLogger', ['_log']); $query = new LoggedQuery; $query->query = 'SELECT a FROM b where a = ? AND b = ? AND c = ?'; $query->params = ['string', '3', null]; $logger->expects($this->once())->method('_log')->with($query); $logger->log($query); $expected = "SELECT a FROM b where a = 'string' AND b = '3' AND c = NULL"; $this->assertEquals($expected, (string)$query); } /** * Tests that the logged query object is passed to the built-in logger using * the correct scope * * @return void */ public function testLogFunction() { $logger = new QueryLogger; $query = new LoggedQuery; $query->query = 'SELECT a FROM b where a = ? AND b = ? AND c = ?'; $query->params = ['string', '3', null]; $engine = $this->getMock('\Cake\Log\Engine\BaseLog', ['log'], ['scopes' => ['queriesLog']]); Log::engine('queryLoggerTest', $engine); $engine2 = $this->getMock('\Cake\Log\Engine\BaseLog', ['log'], ['scopes' => ['foo']]); Log::engine('queryLoggerTest2', $engine2); $engine2->expects($this->never())->method('log'); $logger->log($query); } }