Example #1
0
 /**
  * Perform a succesful fetch all query
  * 
  * @covers ::fetchAll
  * @covers ::getQueryLog
  * @test
  */
 public function fetchAll()
 {
     // Mock mysqli instance
     $mysqliMock = $this->getMockBuilder('\\mysqli')->disableOriginalConstructor()->setMethods(array('query'))->getMock();
     // Mock mysqli result instance which will be returned by
     // mysqli mock
     $mysqliResultMock = $this->getMockBuilder('\\mysqli_result')->disableOriginalConstructor()->setMethods(array('fetch_assoc', 'free'))->getMock();
     // Fetch resulting rows mocked
     $mysqliResultMock->expects($this->atLeastOnce())->method('fetch_assoc')->will($this->onConsecutiveCalls(array('name' => 'Gaffer'), false));
     // Resource should be freed when done
     $mysqliResultMock->expects($this->once())->method('free');
     // The following select query is expected to be executed
     $mysqliMock->expects($this->once())->method('query')->with('SELECT `name` FROM `users` WHERE `userId` = 1')->will($this->returnValue($mysqliResultMock));
     // Get client instance with the mysql mock injected
     $client = new Client($mysqliMock);
     // Execute query to get a user name
     $userData = $client->fetchAll('SELECT `name` FROM `users` WHERE `userId` = :userId', array('userId' => 1));
     // Get a log of the executed queries
     $queryLog = $client->getQueryLog();
     // Query should be "executed" like this
     $this->assertSame(array('SELECT `name` FROM `users` WHERE `userId` = 1'), $queryLog);
     // The result should be
     $this->assertSame(array(array('name' => 'Gaffer')), $userData);
 }