/** * Slightly hackish to use reflection, but asserting different parameters * to consecutive calls of DatabaseBase::select in phpunit is error prone * * @dataProvider provider_readerSelectConditions */ public function testReaderSelectConditionsMultiplePrimaryKeys($message, $expectedSecondIteration, $primaryKeys, $batchSize = 3) { $results = $this->genSelectResult($batchSize, $batchSize * 3, function () { static $i = 0, $j = 100, $k = 1000; return array('id_field' => ++$i, 'foo' => ++$j, 'bar' => ++$k); }); $db = $this->mockDbConsecutiveSelect($results); $conditions = array('bar' => 42, 'baz' => 'hai'); $reader = new BatchRowIterator($db, 'some_table', $primaryKeys, $batchSize); $reader->addConditions($conditions); $buildConditions = new ReflectionMethod($reader, 'buildConditions'); $buildConditions->setAccessible(true); // On first iteration only the passed conditions must be used $this->assertEquals($conditions, $buildConditions->invoke($reader), 'First iteration must return only the conditions passed in addConditions'); $reader->rewind(); // Second iteration must use the maximum primary key of last set $this->assertEquals($conditions + $expectedSecondIteration, $buildConditions->invoke($reader), $message); }