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;
$fetchAt = $this->fetchAt;
$this->iterators[] = new ArgumentIterator($returnRows);
$this->query->expects($this->any())
->method('fetch')
->will($this->returnCallback(
function() use ($iterators, $fetchAt){
$iterator = $iterators[$fetchAt];
$result = $iterator->next();
$iterators = $this->iterators;
$fetchAt = $this->fetchAt;
if($result === false) {
$fetchAt++;
}
$this->query->expects($this->any())
->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;
foreach($arguments as $argument) {
switch (gettype($argument)) {
case 'integer':
$pdoConstant = \PDO::PARAM_INT;
break;
return $result;
}
));
case 'NULL':
$pdoConstant = \PDO::PARAM_NULL;
break;
$index = 1;
foreach($arguments as $argument) {
switch (gettype($argument)) {
case 'integer':
$pdoConstant = \PDO::PARAM_INT;
break;
case 'boolean':
$pdoConstant = \PDO::PARAM_BOOL;
break;
case 'NULL':
$pdoConstant = \PDO::PARAM_NULL;
break;
default:
$pdoConstant = \PDO::PARAM_STR;
break;
}
$this->query->expects($this->at($this->queryAt))
->method('bindValue')
->with($this->equalTo($index),
$this->equalTo($argument),
$this->equalTo($pdoConstant));
$index++;
$this->queryAt++;
}
case 'boolean':
$pdoConstant = \PDO::PARAM_BOOL;
break;
$this->query->expects($this->at($this->queryAt))
->method('execute');
$this->queryAt++;
default:
$pdoConstant = \PDO::PARAM_STR;
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) {
$closing = $this->once();
} else {
$closing = $this->any();
}
$this->query->expects($closing)->method('closeCursor');
$this->queryAt++;
if ($expectClose) {
$closing = $this->at($this->queryAt);
} else {
$closing = $this->any();
}
$this->query->expects($closing)->method('closeCursor');
$this->queryAt++;
$this->prepareAt++;
$this->fetchAt++;
}
$this->prepareAt++;
$this->fetchAt++;
}
}
@ -168,19 +172,19 @@ abstract class MapperTestUtility extends \Test\TestCase {
class ArgumentIterator {
private $arguments;
private $arguments;
public function __construct($arguments){
$this->arguments = $arguments;
}
public function __construct($arguments){
$this->arguments = $arguments;
}
public function next(){
$result = array_shift($this->arguments);
if($result === null){
return false;
} else {
return $result;
}
}
public function next(){
$result = array_shift($this->arguments);
if($result === null){
return false;
} else {
return $result;
}
}
}