PageRenderTime 24ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/test/testsuite/runtime/util/PropelModelPagerTest.php

https://github.com/1989gaurav/Propel
PHP | 241 lines | 202 code | 25 blank | 14 comment | 15 complexity | a62082dabcdb36355ed68559bdde1e50 MD5 | raw file
  1. <?php
  2. /**
  3. * This file is part of the Propel package.
  4. * For the full copyright and license information, please view the LICENSE
  5. * file that was distributed with this source code.
  6. *
  7. * @license MIT License
  8. */
  9. require_once dirname(__FILE__) . '/../../../tools/helpers/bookstore/BookstoreEmptyTestBase.php';
  10. /**
  11. * Test the utility class PropelPager
  12. *
  13. * @author Francois Zaninotto
  14. * @version $Id: PropelModelPagerTest.php
  15. * @package runtime.util
  16. */
  17. class PropelModelPagerTest extends BookstoreEmptyTestBase
  18. {
  19. private $authorId;
  20. private $books;
  21. protected function createBooks($nb = 15, $con = null)
  22. {
  23. BookQuery::create()->deleteAll($con);
  24. $books = new PropelObjectCollection();
  25. $books->setModel('Book');
  26. for ($i=0; $i < $nb; $i++) {
  27. $b = new Book();
  28. $b->setTitle('Book' . $i);
  29. $books[]= $b;
  30. }
  31. $books->save($con);
  32. }
  33. protected function getPager($maxPerPage, $page = 1)
  34. {
  35. $pager = new PropelModelPager(BookQuery::create(), $maxPerPage);
  36. $pager->setPage($page);
  37. $pager->init();
  38. return $pager;
  39. }
  40. public function testHaveToPaginate()
  41. {
  42. BookQuery::create()->deleteAll();
  43. $this->assertEquals(false, $this->getPager(0)->haveToPaginate(), 'haveToPaginate() returns false when there is no result');
  44. $this->createBooks(5);
  45. $this->assertEquals(false, $this->getPager(0)->haveToPaginate(), 'haveToPaginate() returns false when the maxPerPage is null');
  46. $this->assertEquals(true, $this->getPager(2)->haveToPaginate(), 'haveToPaginate() returns true when the maxPerPage is less than the number of results');
  47. $this->assertEquals(false, $this->getPager(6)->haveToPaginate(), 'haveToPaginate() returns false when the maxPerPage is greater than the number of results');
  48. $this->assertEquals(false, $this->getPager(5)->haveToPaginate(), 'haveToPaginate() returns false when the maxPerPage is equal to the number of results');
  49. }
  50. public function testGetNbResults()
  51. {
  52. BookQuery::create()->deleteAll();
  53. $pager = $this->getPager(4, 1);
  54. $this->assertEquals(0, $pager->getNbResults(), 'getNbResults() returns 0 when there are no results');
  55. $this->createBooks(5);
  56. $pager = $this->getPager(4, 1);
  57. $this->assertEquals(5, $pager->getNbResults(), 'getNbResults() returns the total number of results');
  58. $pager = $this->getPager(2, 1);
  59. $this->assertEquals(5, $pager->getNbResults(), 'getNbResults() returns the total number of results');
  60. $pager = $this->getPager(2, 2);
  61. $this->assertEquals(5, $pager->getNbResults(), 'getNbResults() returns the total number of results');
  62. $pager = $this->getPager(7, 6);
  63. $this->assertEquals(5, $pager->getNbResults(), 'getNbResults() returns the total number of results');
  64. $pager = $this->getPager(0, 0);
  65. $this->assertEquals(5, $pager->getNbResults(), 'getNbResults() returns the total number of results');
  66. }
  67. public function testGetResults()
  68. {
  69. $this->createBooks(5);
  70. $pager = $this->getPager(4, 1);
  71. $this->assertTrue($pager->getResults() instanceof PropelObjectCollection, 'getResults() returns a PropelObjectCollection');
  72. $this->assertEquals(4, count($pager->getResults()), 'getResults() returns at most $maxPerPage results');
  73. $pager = $this->getPager(4, 2);
  74. $this->assertEquals(1, count($pager->getResults()), 'getResults() returns the remaining results when in the last page');
  75. $pager = $this->getPager(4, 3);
  76. $this->assertEquals(1, count($pager->getResults()), 'getResults() returns the results of the last page when called on nonexistent pages');
  77. }
  78. public function testGetResultsRespectsFormatter()
  79. {
  80. $this->createBooks(5);
  81. $query = BookQuery::create();
  82. $query->setFormatter(ModelCriteria::FORMAT_ARRAY);
  83. $pager = new PropelModelPager($query, 4);
  84. $pager->setPage(1);
  85. $pager->init();
  86. $this->assertTrue($pager->getResults() instanceof PropelArrayCollection, 'getResults() returns a PropelArrayCollection if the query uses array hydration');
  87. }
  88. public function testGetIterator()
  89. {
  90. $this->createBooks(5);
  91. $pager = $this->getPager(4, 1);
  92. $i = 0;
  93. foreach ($pager as $book) {
  94. $this->assertEquals('Book' . $i, $book->getTitle(), 'getIterator() returns an iterator');
  95. $i++;
  96. }
  97. $this->assertEquals(4, $i, 'getIterator() uses the results collection');
  98. }
  99. public function testIterateTwice()
  100. {
  101. $this->createBooks(5);
  102. $pager = $this->getPager(4, 1);
  103. $i = 0;
  104. foreach ($pager as $book) {
  105. $this->assertEquals('Book' . $i, $book->getTitle(), 'getIterator() returns an iterator');
  106. $i++;
  107. }
  108. $this->assertEquals(4, $i, 'getIterator() uses the results collection');
  109. $i = 0;
  110. foreach ($pager as $book) {
  111. $this->assertEquals('Book' . $i, $book->getTitle());
  112. $i++;
  113. }
  114. $this->assertEquals(4, $i, 'getIterator() can be called several times');
  115. }
  116. public function testSetPage()
  117. {
  118. $this->createBooks(5);
  119. $pager = $this->getPager(2, 2);
  120. $i = 2;
  121. foreach ($pager as $book) {
  122. $this->assertEquals('Book' . $i, $book->getTitle(), 'setPage() sets the list to start on a given page');
  123. $i++;
  124. }
  125. $this->assertEquals(4, $i, 'setPage() doesn\'t change the page count');
  126. }
  127. public function testIsFirstPage()
  128. {
  129. $this->createBooks(5);
  130. $pager = $this->getPager(4, 1);
  131. $this->assertTrue($pager->isFirstPage(), 'isFirstPage() returns true on the first page');
  132. $pager = $this->getPager(4, 2);
  133. $this->assertFalse($pager->isFirstPage(), 'isFirstPage() returns false when not on the first page');
  134. }
  135. public function testIsLastPage()
  136. {
  137. $this->createBooks(5);
  138. $pager = $this->getPager(4, 1);
  139. $this->assertFalse($pager->isLastPage(), 'isLastPage() returns false when not on the last page');
  140. $pager = $this->getPager(4, 2);
  141. $this->assertTrue($pager->isLastPage(), 'isLastPage() returns true on the last page');
  142. }
  143. public function testIsFirstOnFirstPage()
  144. {
  145. $this->createBooks(5);
  146. $pager = $this->getPager(3, 1);
  147. foreach ($pager as $index => $book) {
  148. if ($index == 0) {
  149. $this->assertTrue($pager->isFirst());
  150. } else {
  151. $this->assertFalse($pager->isFirst());
  152. }
  153. }
  154. }
  155. public function testIsFirstOnNonFirstPage()
  156. {
  157. $this->createBooks(5);
  158. $pager = $this->getPager(3, 2);
  159. foreach ($pager as $index => $book) {
  160. if ($index == 0) {
  161. $this->assertTrue($pager->isFirst());
  162. } else {
  163. $this->assertFalse($pager->isFirst());
  164. }
  165. }
  166. }
  167. public function testIsLastOnNonLastPage()
  168. {
  169. $this->createBooks(5);
  170. $pager = $this->getPager(3, 1);
  171. foreach ($pager as $index => $book) {
  172. if ($index == 2) {
  173. $this->assertTrue($pager->isLast());
  174. } else {
  175. $this->assertFalse($pager->isLast());
  176. }
  177. }
  178. }
  179. public function testIsLastOnLastPage()
  180. {
  181. $this->createBooks(5);
  182. $pager = $this->getPager(3, 2);
  183. foreach ($pager as $index => $book) {
  184. if ($index == 1) {
  185. $this->assertTrue($pager->isLast());
  186. } else {
  187. $this->assertFalse($pager->isLast());
  188. }
  189. }
  190. }
  191. public function testIsEmptyIsTrueOnEmptyPagers()
  192. {
  193. $pager = $this->getPager(4, 1);
  194. $this->assertTrue($pager->isEmpty());
  195. }
  196. public function testIsEmptyIsFalseOnNonEmptyPagers()
  197. {
  198. $this->createBooks(1);
  199. $pager = $this->getPager(4, 1);
  200. $this->assertFalse($pager->isEmpty());
  201. }
  202. public function testIsOddAndIsEven()
  203. {
  204. $this->createBooks(5);
  205. $pager = $this->getPager(4, 1);
  206. foreach ($pager as $index => $book) {
  207. if ($index % 2) {
  208. $this->assertTrue($pager->isOdd());
  209. $this->assertFalse($pager->isEven());
  210. } else {
  211. $this->assertFalse($pager->isOdd());
  212. $this->assertTrue($pager->isEven());
  213. }
  214. }
  215. }
  216. }