AbstractPaginationTest.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. use Test\Tool\BaseTestCase;
  3. use Knp\Component\Pager\Paginator;
  4. use Symfony\Component\EventDispatcher\EventDispatcher;
  5. use Test\Mock\PaginationSubscriber as MockPaginationSubscriber;
  6. use Test\Mock\CustomParameterSubscriber;
  7. use Knp\Component\Pager\Event\Subscriber\Paginate\ArraySubscriber;
  8. use Knp\Component\Pager\PaginatorInterface;
  9. class AbstractPaginationTest extends BaseTestCase
  10. {
  11. /**
  12. * @test
  13. */
  14. function shouldCustomizeParameterNames()
  15. {
  16. $dispatcher = new EventDispatcher;
  17. $dispatcher->addSubscriber(new MockPaginationSubscriber); // pagination view
  18. $dispatcher->addSubscriber(new ArraySubscriber);
  19. $p = new Paginator($dispatcher);
  20. $items = array('first', 'second');
  21. $view = $p->paginate($items, 1, 10);
  22. // test default names first
  23. $this->assertEquals('page', $view->getPaginatorOption(PaginatorInterface::PAGE_PARAMETER_NAME));
  24. $this->assertEquals('sort', $view->getPaginatorOption(PaginatorInterface::SORT_FIELD_PARAMETER_NAME));
  25. $this->assertEquals('direction', $view->getPaginatorOption(PaginatorInterface::SORT_DIRECTION_PARAMETER_NAME));
  26. $this->assertTrue($view->getPaginatorOption(PaginatorInterface::DISTINCT));
  27. $this->assertNull($view->getPaginatorOption(PaginatorInterface::SORT_FIELD_WHITELIST));
  28. // now customize
  29. $options = array(
  30. PaginatorInterface::PAGE_PARAMETER_NAME => 'p',
  31. PaginatorInterface::SORT_FIELD_PARAMETER_NAME => 's',
  32. PaginatorInterface::SORT_DIRECTION_PARAMETER_NAME => 'd',
  33. PaginatorInterface::DISTINCT => false,
  34. PaginatorInterface::SORT_FIELD_WHITELIST => array('a.f', 'a.d')
  35. );
  36. $view = $p->paginate($items, 1, 10, $options);
  37. $this->assertEquals('p', $view->getPaginatorOption(PaginatorInterface::PAGE_PARAMETER_NAME));
  38. $this->assertEquals('s', $view->getPaginatorOption(PaginatorInterface::SORT_FIELD_PARAMETER_NAME));
  39. $this->assertEquals('d', $view->getPaginatorOption(PaginatorInterface::SORT_DIRECTION_PARAMETER_NAME));
  40. $this->assertFalse($view->getPaginatorOption(PaginatorInterface::DISTINCT));
  41. $this->assertEquals(array('a.f', 'a.d'), $view->getPaginatorOption(PaginatorInterface::SORT_FIELD_WHITELIST));
  42. // change default paginator options
  43. $p->setDefaultPaginatorOptions(array(
  44. PaginatorInterface::PAGE_PARAMETER_NAME => 'pg',
  45. PaginatorInterface::SORT_FIELD_PARAMETER_NAME => 'srt',
  46. PaginatorInterface::SORT_DIRECTION_PARAMETER_NAME => 'dir'
  47. ));
  48. $view = $p->paginate($items, 1, 10);
  49. $this->assertEquals('pg', $view->getPaginatorOption(PaginatorInterface::PAGE_PARAMETER_NAME));
  50. $this->assertEquals('srt', $view->getPaginatorOption(PaginatorInterface::SORT_FIELD_PARAMETER_NAME));
  51. $this->assertEquals('dir', $view->getPaginatorOption(PaginatorInterface::SORT_DIRECTION_PARAMETER_NAME));
  52. $this->assertTrue($view->getPaginatorOption(PaginatorInterface::DISTINCT));
  53. }
  54. }