|
TYPO3 API
SVNRelease
|
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 ?>
1.8.0