fix mappertestutility

This commit is contained in:
Bernhard Posselt 2015-02-24 17:03:56 +01:00 committed by Thomas Müller
parent 7b2fdbfb0b
commit aaf753bc9a
1 changed files with 105 additions and 101 deletions

View File

@ -57,110 +57,114 @@ abstract class MapperTestUtility extends \Test\TestCase {
} }
/**
* Create mocks and set expected results for database queries
* @param string $sql the sql query that you expect to receive
* @param array $arguments the expected arguments for the prepare query
* method
* @param array $returnRows the rows that should be returned for the result
* of the database query. If not provided, it wont be assumed that fetch
* will be called on the result
*/
protected function setMapperResult($sql, $arguments=array(), $returnRows=array(),
$limit=null, $offset=null, $expectClose=false){
if($limit === null && $offset === null) {
$this->db->expects($this->at($this->prepareAt))
->method('prepare')
->with($this->equalTo($sql))
->will(($this->returnValue($this->query)));
} elseif($limit !== null && $offset === null) {
$this->db->expects($this->at($this->prepareAt))
->method('prepare')
->with($this->equalTo($sql), $this->equalTo($limit))
->will(($this->returnValue($this->query)));
} elseif($limit === null && $offset !== null) {
$this->db->expects($this->at($this->prepareAt))
->method('prepare')
->with($this->equalTo($sql),
$this->equalTo(null),
$this->equalTo($offset))
->will(($this->returnValue($this->query)));
} else {
$this->db->expects($this->at($this->prepareAt))
->method('prepare')
->with($this->equalTo($sql),
$this->equalTo($limit),
$this->equalTo($offset))
->will(($this->returnValue($this->query)));
}
$this->iterators[] = new ArgumentIterator($returnRows); /**
* Create mocks and set expected results for database queries
* @param string $sql the sql query that you expect to receive
* @param array $arguments the expected arguments for the prepare query
* method
* @param array $returnRows the rows that should be returned for the result
* of the database query. If not provided, it wont be assumed that fetch
* will be called on the result
*/
protected function setMapperResult($sql, $arguments=array(), $returnRows=array(),
$limit=null, $offset=null, $expectClose=false){
if($limit === null && $offset === null) {
$this->db->expects($this->at($this->prepareAt))
->method('prepare')
->with($this->equalTo($sql))
->will(($this->returnValue($this->query)));
} elseif($limit !== null && $offset === null) {
$this->db->expects($this->at($this->prepareAt))
->method('prepare')
->with($this->equalTo($sql), $this->equalTo($limit))
->will(($this->returnValue($this->query)));
} elseif($limit === null && $offset !== null) {
$this->db->expects($this->at($this->prepareAt))
->method('prepare')
->with($this->equalTo($sql),
$this->equalTo(null),
$this->equalTo($offset))
->will(($this->returnValue($this->query)));
} else {
$this->db->expects($this->at($this->prepareAt))
->method('prepare')
->with($this->equalTo($sql),
$this->equalTo($limit),
$this->equalTo($offset))
->will(($this->returnValue($this->query)));
}
$iterators = $this->iterators; $this->iterators[] = new ArgumentIterator($returnRows);
$fetchAt = $this->fetchAt;
$this->query->expects($this->any()) $iterators = $this->iterators;
->method('fetch') $fetchAt = $this->fetchAt;
->will($this->returnCallback(
function() use ($iterators, $fetchAt){
$iterator = $iterators[$fetchAt];
$result = $iterator->next();
if($result === false) { $this->query->expects($this->any())
$fetchAt++; ->method('fetch')
} ->will($this->returnCallback(
function() use ($iterators, $fetchAt){
$iterator = $iterators[$fetchAt];
$result = $iterator->next();
$this->queryAt++; if($result === false) {
$fetchAt++;
}
return $result; $this->queryAt++;
}
));
$index = 1; return $result;
foreach($arguments as $argument) { }
switch (gettype($argument)) { ));
case 'integer':
$pdoConstant = \PDO::PARAM_INT;
break;
case 'NULL': $index = 1;
$pdoConstant = \PDO::PARAM_NULL; foreach($arguments as $argument) {
break; switch (gettype($argument)) {
case 'integer':
$pdoConstant = \PDO::PARAM_INT;
break;
case 'boolean': case 'NULL':
$pdoConstant = \PDO::PARAM_BOOL; $pdoConstant = \PDO::PARAM_NULL;
break; break;
default: case 'boolean':
$pdoConstant = \PDO::PARAM_STR; $pdoConstant = \PDO::PARAM_BOOL;
break; break;
}
$this->query->expects($this->at($this->queryAt))
->method('bindValue')
->with($this->equalTo($index),
$this->equalTo($argument),
$this->equalTo($pdoConstant));
$index++;
$this->queryAt++;
}
$this->query->expects($this->at($this->queryAt)) default:
->method('execute'); $pdoConstant = \PDO::PARAM_STR;
$this->queryAt++; break;
}
$this->query->expects($this->at($this->queryAt))
->method('bindValue')
->with($this->equalTo($index),
$this->equalTo($argument),
$this->equalTo($pdoConstant));
$index++;
$this->queryAt++;
}
$this->query->expects($this->at($this->queryAt))
->method('execute')
->will($this->returnCallback(function($sql, $p=null, $o=null, $s=null) {
}));
$this->queryAt++;
if ($expectClose) { if ($expectClose) {
$closing = $this->once(); $closing = $this->at($this->queryAt);
} else { } else {
$closing = $this->any(); $closing = $this->any();
} }
$this->query->expects($closing)->method('closeCursor'); $this->query->expects($closing)->method('closeCursor');
$this->queryAt++; $this->queryAt++;
$this->prepareAt++; $this->prepareAt++;
$this->fetchAt++; $this->fetchAt++;
} }
} }
@ -168,19 +172,19 @@ abstract class MapperTestUtility extends \Test\TestCase {
class ArgumentIterator { class ArgumentIterator {
private $arguments; private $arguments;
public function __construct($arguments){ public function __construct($arguments){
$this->arguments = $arguments; $this->arguments = $arguments;
} }
public function next(){ public function next(){
$result = array_shift($this->arguments); $result = array_shift($this->arguments);
if($result === null){ if($result === null){
return false; return false;
} else { } else {
return $result; return $result;
} }
} }
} }