TYPO3 API  SVNRelease
QueryResultTest.php
Go to the documentation of this file.
00001 <?php
00002 /***************************************************************
00003 *  Copyright notice
00004 *
00005 *  (c) 2010 Bastian Waidelich <bastian@typo3.org>
00006 *  All rights reserved
00007 *
00008 *  This script is part of the TYPO3 project. The TYPO3 project is
00009 *  free software; you can redistribute it and/or modify
00010 *  it under the terms of the GNU General Public License as published by
00011 *  the Free Software Foundation; either version 2 of the License, or
00012 *  (at your option) any later version.
00013 *
00014 *  The GNU General Public License can be found at
00015 *  http://www.gnu.org/copyleft/gpl.html.
00016 *
00017 *  This script is distributed in the hope that it will be useful,
00018 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00019 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020 *  GNU General Public License for more details.
00021 *
00022 *  This copyright notice MUST APPEAR in all copies of the script!
00023 ***************************************************************/
00024 
00025 class Tx_Extbase_Tests_Unit_Persistence_QueryResultTest extends Tx_Extbase_Tests_Unit_BaseTestCase {
00026 
00027     /**
00028      * @var Tx_Extbase_Persistence_QueryResult
00029      */
00030     protected $queryResult;
00031 
00032     /**
00033      * @var Tx_Extbase_Persistence_QueryInterface
00034      */
00035     protected $mockQuery;
00036 
00037     /**
00038      * @var Tx_Extbase_Persistence_ManagerInterface
00039      */
00040     protected $mockPersistenceManager;
00041 
00042     /**
00043      * @var Tx_Extbase_Persistence_DataMapper
00044      */
00045     protected $mockDataMapper;
00046 
00047     /**
00048      * Sets up this test case
00049      *
00050      * @return void
00051      */
00052     public function setUp() {
00053         $this->mockPersistenceManager = $this->getMock('Tx_Extbase_Persistence_ManagerInterface');
00054         $this->mockPersistenceManager->expects($this->any())->method('getObjectDataByQuery')->will($this->returnValue(array('one', 'two')));
00055         $this->mockPersistenceManager->expects($this->any())->method('getObjectCountByQuery')->will($this->returnValue(2));
00056         $this->mockDataMapper = $this->getMock('Tx_Extbase_Persistence_Mapper_DataMapper');
00057         $this->mockQuery = $this->getMock('Tx_Extbase_Persistence_QueryInterface');
00058         $this->queryResult = new Tx_Extbase_Persistence_QueryResult($this->mockQuery);
00059         $this->queryResult->injectPersistenceManager($this->mockPersistenceManager);
00060         $this->queryResult->injectDataMapper($this->mockDataMapper);
00061         $this->sampleResult = array(array('foo' => 'Foo1', 'bar' => 'Bar1'), array('foo' => 'Foo2', 'bar' => 'Bar2'));
00062         $this->mockDataMapper->expects($this->any())->method('map')->will($this->returnValue($this->sampleResult));
00063     }
00064 
00065     /**
00066      * @test
00067      */
00068     public function getQueryReturnsQueryObject() {
00069         $this->assertType('Tx_Extbase_Persistence_QueryInterface', $this->queryResult->getQuery());
00070     }
00071 
00072     /**
00073      * @test
00074      */
00075     public function getQueryReturnsAClone() {
00076         $this->assertNotSame($this->mockQuery, $this->queryResult->getQuery());
00077     }
00078 
00079     /**
00080      * @test
00081      */
00082     public function offsetExistsWorksAsExpected() {
00083         $this->assertTrue($this->queryResult->offsetExists(0));
00084         $this->assertFalse($this->queryResult->offsetExists(2));
00085         $this->assertFalse($this->queryResult->offsetExists('foo'));
00086     }
00087 
00088     /**
00089      * @test
00090      */
00091     public function offsetGetWorksAsExpected() {
00092         $this->assertEquals(array('foo' => 'Foo1', 'bar' => 'Bar1'), $this->queryResult->offsetGet(0));
00093         $this->assertNull($this->queryResult->offsetGet(2));
00094         $this->assertNull($this->queryResult->offsetGet('foo'));
00095     }
00096 
00097     /**
00098      * @test
00099      */
00100     public function offsetSetWorksAsExpected() {
00101         $this->queryResult->offsetSet(0, array('foo' => 'FooOverridden', 'bar' => 'BarOverridden'));
00102         $this->assertEquals(array('foo' => 'FooOverridden', 'bar' => 'BarOverridden'), $this->queryResult->offsetGet(0));
00103     }
00104 
00105     /**
00106      * @test
00107      */
00108     public function offsetUnsetWorksAsExpected() {
00109         $this->queryResult->offsetUnset(0);
00110         $this->assertFalse($this->queryResult->offsetExists(0));
00111     }
00112 
00113     /**
00114      * @test
00115      */
00116     public function countDoesNotInitializeProxy() {
00117         $queryResult = $this->getMock('Tx_Extbase_Persistence_QueryResult', array('initialize'), array($this->mockQuery));
00118         $queryResult->injectPersistenceManager($this->mockPersistenceManager);
00119         $queryResult->expects($this->never())->method('initialize');
00120         $queryResult->count();
00121     }
00122 
00123     /**
00124      * @test
00125      */
00126     public function countCallsGetObjectCountByQueryOnPersistenceManager() {
00127         $queryResult = $this->getMock('Tx_Extbase_Persistence_QueryResult', array('initialize'), array($this->mockQuery));
00128         $queryResult->injectPersistenceManager($this->mockPersistenceManager);
00129         $this->assertEquals(2, $queryResult->count());
00130     }
00131 
00132     /**
00133      * @test
00134      */
00135     public function iteratorMethodsAreCorrectlyImplemented() {
00136         $array1 = array('foo' => 'Foo1', 'bar' => 'Bar1');
00137         $array2 = array('foo' => 'Foo2', 'bar' => 'Bar2');
00138         $this->assertEquals($array1, $this->queryResult->current());
00139         $this->assertTrue($this->queryResult->valid());
00140         $this->queryResult->next();
00141         $this->assertEquals($array2, $this->queryResult->current());
00142         $this->assertTrue($this->queryResult->valid());
00143         $this->assertEquals(1, $this->queryResult->key());
00144         $this->queryResult->next();
00145         $this->assertFalse($this->queryResult->current());
00146         $this->assertFalse($this->queryResult->valid());
00147         $this->assertNull($this->queryResult->key());
00148         $this->queryResult->rewind();
00149         $this->assertEquals(0, $this->queryResult->key());
00150         $this->assertEquals($array1, $this->queryResult->current());
00151     }
00152 
00153     /**
00154      * @test
00155      */
00156     public function initializeExecutesQueryWithArrayFetchMode() {
00157         $queryResult = $this->getAccessibleMock('Tx_Extbase_Persistence_QueryResult', array('dummy'), array($this->mockQuery));
00158         $queryResult->injectPersistenceManager($this->mockPersistenceManager);
00159         $queryResult->injectDataMapper($this->mockDataMapper);
00160         $this->mockPersistenceManager->expects($this->once())->method('getObjectDataByQuery')->with($this->mockQuery)->will($this->returnValue(array('FAKERESULT')));
00161         $queryResult->_call('initialize');
00162     }
00163 
00164     /**
00165      * @test
00166      */
00167     public function usingCurrentOnTheQueryResultReturnsAWarning() {
00168         $queryResult = new Tx_Extbase_Persistence_QueryResult($this->mockQuery);
00169         $expectedResult = 'You should never see this warning. If you do, you probably used PHP array functions like current() on the Tx_Extbase_Persistence_QueryResult. To retrieve the first result, you can use the getFirst() method.';
00170         $actualResult = current($queryResult);
00171         $this->assertEquals($expectedResult, $actualResult);
00172     }
00173 
00174 }
00175 ?>