Actualización

This commit is contained in:
Xes
2025-04-10 12:24:57 +02:00
parent 8969cc929d
commit 45420b6f0d
39760 changed files with 4303286 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
<?php
use Test\Tool\BaseTestCase;
use Knp\Component\Pager\Paginator;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Test\Mock\PaginationSubscriber as MockPaginationSubscriber;
use Test\Mock\CustomParameterSubscriber;
use Knp\Component\Pager\Event\Subscriber\Paginate\ArraySubscriber;
use Knp\Component\Pager\PaginatorInterface;
class AbstractPaginationTest extends BaseTestCase
{
/**
* @test
*/
function shouldCustomizeParameterNames()
{
$dispatcher = new EventDispatcher;
$dispatcher->addSubscriber(new MockPaginationSubscriber); // pagination view
$dispatcher->addSubscriber(new ArraySubscriber);
$p = new Paginator($dispatcher);
$items = array('first', 'second');
$view = $p->paginate($items, 1, 10);
// test default names first
$this->assertEquals('page', $view->getPaginatorOption(PaginatorInterface::PAGE_PARAMETER_NAME));
$this->assertEquals('sort', $view->getPaginatorOption(PaginatorInterface::SORT_FIELD_PARAMETER_NAME));
$this->assertEquals('direction', $view->getPaginatorOption(PaginatorInterface::SORT_DIRECTION_PARAMETER_NAME));
$this->assertTrue($view->getPaginatorOption(PaginatorInterface::DISTINCT));
$this->assertNull($view->getPaginatorOption(PaginatorInterface::SORT_FIELD_WHITELIST));
// now customize
$options = array(
PaginatorInterface::PAGE_PARAMETER_NAME => 'p',
PaginatorInterface::SORT_FIELD_PARAMETER_NAME => 's',
PaginatorInterface::SORT_DIRECTION_PARAMETER_NAME => 'd',
PaginatorInterface::DISTINCT => false,
PaginatorInterface::SORT_FIELD_WHITELIST => array('a.f', 'a.d')
);
$view = $p->paginate($items, 1, 10, $options);
$this->assertEquals('p', $view->getPaginatorOption(PaginatorInterface::PAGE_PARAMETER_NAME));
$this->assertEquals('s', $view->getPaginatorOption(PaginatorInterface::SORT_FIELD_PARAMETER_NAME));
$this->assertEquals('d', $view->getPaginatorOption(PaginatorInterface::SORT_DIRECTION_PARAMETER_NAME));
$this->assertFalse($view->getPaginatorOption(PaginatorInterface::DISTINCT));
$this->assertEquals(array('a.f', 'a.d'), $view->getPaginatorOption(PaginatorInterface::SORT_FIELD_WHITELIST));
// change default paginator options
$p->setDefaultPaginatorOptions(array(
PaginatorInterface::PAGE_PARAMETER_NAME => 'pg',
PaginatorInterface::SORT_FIELD_PARAMETER_NAME => 'srt',
PaginatorInterface::SORT_DIRECTION_PARAMETER_NAME => 'dir'
));
$view = $p->paginate($items, 1, 10);
$this->assertEquals('pg', $view->getPaginatorOption(PaginatorInterface::PAGE_PARAMETER_NAME));
$this->assertEquals('srt', $view->getPaginatorOption(PaginatorInterface::SORT_FIELD_PARAMETER_NAME));
$this->assertEquals('dir', $view->getPaginatorOption(PaginatorInterface::SORT_DIRECTION_PARAMETER_NAME));
$this->assertTrue($view->getPaginatorOption(PaginatorInterface::DISTINCT));
}
}

View File

@@ -0,0 +1,27 @@
<?php
use Test\Tool\BaseTestCase;
use Knp\Component\Pager\Paginator;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Test\Mock\PaginationSubscriber as MockPaginationSubscriber;
use Test\Mock\CustomParameterSubscriber;
class CustomParameterTest extends BaseTestCase
{
/**
* @test
*/
function shouldGiveCustomParametersToPaginationView()
{
$dispatcher = new EventDispatcher;
$dispatcher->addSubscriber(new CustomParameterSubscriber);
$dispatcher->addSubscriber(new MockPaginationSubscriber); // pagination view
$p = new Paginator($dispatcher);
$items = array('first', 'second');
$view = $p->paginate($items, 1, 10);
$this->assertEquals('val', $view->getCustomParameter('test'));
$this->assertNull($view->getCustomParameter('nonExisting'));
}
}

View File

@@ -0,0 +1,106 @@
<?php
use Test\Tool\BaseTestCase;
use Knp\Component\Pager\Paginator;
use Knp\Component\Pager\Pagination\SlidingPagination;
use Knp\Component\Pager\Pagination\PaginationInterface;
use Knp\Component\Pager\Event\Subscriber\Paginate\PaginationSubscriber;
class SlidingTest extends BaseTestCase
{
/**
* @test
*/
function shouldBeAbleToProducePagination()
{
$p = new Paginator;
$items = range(1, 23);
$view = $p->paginate($items, 1, 10);
$view->renderer = function($data) {
return 'custom';
};
$this->assertEquals('custom', (string)$view);
$pagination = $view->getPaginationData();
$this->assertEquals(3, $pagination['last']);
$this->assertEquals(1, $pagination['first']);
$this->assertEquals(1, $pagination['current']);
$this->assertEquals(10, $pagination['numItemsPerPage']);
$this->assertEquals(3, $pagination['pageCount']);
$this->assertEquals(23, $pagination['totalCount']);
$this->assertEquals(2, $pagination['next']);
$this->assertEquals(array(1, 2, 3), $pagination['pagesInRange']);
$this->assertEquals(1, $pagination['firstPageInRange']);
$this->assertEquals(3, $pagination['lastPageInRange']);
$this->assertEquals(10, $pagination['currentItemCount']);
$this->assertEquals(1, $pagination['firstItemNumber']);
$this->assertEquals(10, $pagination['lastItemNumber']);
}
/**
* @test
*/
function shouldBeAbleToProduceWiderPagination()
{
$p = new Paginator;
$items = range(1, 43);
$view = $p->paginate($items, 4, 5);
$pagination = $view->getPaginationData();
$this->assertEquals(9, $pagination['last']);
$this->assertEquals(1, $pagination['first']);
$this->assertEquals(4, $pagination['current']);
$this->assertEquals(5, $pagination['numItemsPerPage']);
$this->assertEquals(9, $pagination['pageCount']);
$this->assertEquals(43, $pagination['totalCount']);
$this->assertEquals(5, $pagination['next']);
$this->assertEquals(3, $pagination['previous']);
$this->assertEquals(array(2, 3, 4, 5, 6), $pagination['pagesInRange']);
$this->assertEquals(2, $pagination['firstPageInRange']);
$this->assertEquals(6, $pagination['lastPageInRange']);
$this->assertEquals(5, $pagination['currentItemCount']);
$this->assertEquals(16, $pagination['firstItemNumber']);
$this->assertEquals(20, $pagination['lastItemNumber']);
}
/**
* @test
*/
function shouldHandleOddAndEvenRange()
{
$p = new Paginator;
$items = range(1, 43);
$view = $p->paginate($items, 4, 5);
$view->setPageRange(4);
$pagination = $view->getPaginationData();
$this->assertEquals(3, $pagination['previous']);
$this->assertEquals(array(3, 4, 5, 6), $pagination['pagesInRange']);
$this->assertEquals(3, $pagination['firstPageInRange']);
$this->assertEquals(6, $pagination['lastPageInRange']);
$view->setPageRange(3);
$pagination = $view->getPaginationData();
$this->assertEquals(3, $pagination['previous']);
$this->assertEquals(array(3, 4, 5), $pagination['pagesInRange']);
$this->assertEquals(3, $pagination['firstPageInRange']);
$this->assertEquals(5, $pagination['lastPageInRange']);
}
/**
* @test
*/
function shouldNotFallbackToPageInCaseIfExceedsItemLimit()
{
$p = new Paginator;
$view = $p->paginate(range(1, 9), 2, 10);
$items = $view->getItems();
$this->assertTrue(empty($items));
}
}

View File

@@ -0,0 +1,33 @@
<?php
use Test\Tool\BaseTestCase;
use Knp\Component\Pager\Paginator;
use Knp\Component\Pager\Pagination\SlidingPagination;
use Knp\Component\Pager\Pagination\PaginationInterface;
use Knp\Component\Pager\Event\Subscriber\Paginate\PaginationSubscriber;
class TraversableItemsTest extends BaseTestCase
{
/**
* @test
*/
function shouldBeAbleToUseTraversableItems()
{
$p = new Paginator;
$items = new \ArrayObject(range(1, 23));
$view = $p->paginate($items, 3, 10);
$view->renderer = function($data) {
return 'custom';
};
$this->assertEquals('custom', (string)$view);
$items = $view->getItems();
$this->assertTrue($items instanceof \ArrayObject);
$i = 21;
foreach ($view as $item) {
$this->assertEquals($i++, $item);
}
}
}