Skip to content

Commit

Permalink
Clean Pagination and fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
romainkuzniak committed Aug 14, 2014
1 parent 793ebed commit dd297e9
Show file tree
Hide file tree
Showing 21 changed files with 252 additions and 78 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace OpenClassrooms\UseCase\Application\Responder;

use OpenClassrooms\UseCase\BusinessRules\Responders\AbstractPaginatedUseCaseResponseFactory;

/**
* @author Romain Kuzniak <[email protected]>
*/
class PaginatedUseCaseResponseFactoryImpl extends AbstractPaginatedUseCaseResponseFactory
{

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@ abstract class PaginatedCollection
/**
* @var array
*/
protected $items;
protected $items = array();

/**
* @var int
*/
protected $itemsPerPage;
protected $itemsPerPage = 0;

/**
* @var int
*/
protected $page;
protected $page = 1;

/**
* @var integer
Expand Down Expand Up @@ -84,7 +84,11 @@ public function setTotalItems($totalItems)
*/
public function getTotalPages()
{
return (int) ceil($this->totalItems / $this->itemsPerPage);
if (null != $this->itemsPerPage) {
return (int) ceil($this->totalItems / $this->itemsPerPage);
} else {
return 1;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,7 @@ abstract class AbstractPaginatedUseCaseResponse implements PaginatedUseCaseRespo
/**
* @var integer
*/
protected $page;

/**
* @return int
*/
public function getPage()
{
return $this->page;
}

public function setPage($page)
{
$this->page = $page;
}
protected $page = 1;

/**
* @return array
Expand Down Expand Up @@ -66,18 +53,29 @@ public function setItemsPerPage($itemsPerPage)
$this->itemsPerPage = $itemsPerPage;
}

/**
* @return int
*/
public function getPage()
{
return $this->page;
}

public function setPage($page)
{
$this->page = $page;
}

/**
* @return int
*/
public function getTotalPages()
{
if (null !== $this->totalItems && null !== $this->itemsPerPage) {
$totalPages = ceil($this->totalItems / $this->itemsPerPage);
if (null != $this->itemsPerPage) {
return (int) ceil($this->totalItems / $this->itemsPerPage);
} else {
$totalPages = 1;
return 1;
}

return $totalPages;
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

namespace OpenClassrooms\UseCase\BusinessRules\Responders;

use OpenClassrooms\UseCase\BusinessRules\Entities\PaginatedCollection;

/**
* @author Romain Kuzniak <[email protected]>
*/
abstract class AbstractPaginatedUseCaseResponseFactory implements PaginatedUseCaseResponseFactory
{
/**
* @var PaginatedUseCaseResponseBuilder
*/
private $paginatedUseCaseResponseBuilder;

/**
* @return AbstractPaginatedUseCaseResponse
*/
public function createFromPaginatedCollection(PaginatedCollection $paginatedCollection)
{
return $this->paginatedUseCaseResponseBuilder->create()
->withItems($paginatedCollection->getItems())
->withItemsPerPage($paginatedCollection->getItemsPerPage())
->withPage($paginatedCollection->getPage())
->withTotalItems($paginatedCollection->getTotalItems())
->build();
}

public function setPaginatedUseCaseResponseBuilder(PaginatedUseCaseResponseBuilder $paginatedUseCaseResponseBuilder)
{
$this->paginatedUseCaseResponseBuilder = $paginatedUseCaseResponseBuilder;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

namespace OpenClassrooms\UseCase\BusinessRules\Responders;

use OpenClassrooms\UseCase\BusinessRules\Responders\Exceptions\InvalidPaginatedUseCaseResponseException;

/**
* @author Romain Kuzniak <[email protected]>
*/
Expand Down Expand Up @@ -65,14 +63,6 @@ public function withTotalItems($totalItems)
*/
public function build()
{
if (null === $this->paginatedUseCaseResponse->getItems()) {
throw new InvalidPaginatedUseCaseResponseException('Items MUST be defined');
}

if (null === $this->paginatedUseCaseResponse->getTotalItems()) {
throw new InvalidPaginatedUseCaseResponseException('TotalItems MUST be defined');
}

return $this->paginatedUseCaseResponse;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?php

namespace OpenClassrooms\UseCase\BusinessRules\Responders;

use OpenClassrooms\UseCase\BusinessRules\Entities\PaginatedCollection;

/**
* @author Romain Kuzniak <[email protected]>
*/
interface PaginatedUseCaseResponseFactory
{
/**
* @return AbstractPaginatedUseCaseResponse
*/
public function createFromPaginatedCollection(PaginatedCollection $paginatedCollection);
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
OpenClassrooms\UseCase\Application\Services\Proxy\Strategies\Impl\ProxyStrategyRequestFactoryImpl;
use OpenClassrooms\Tests\UseCase\BusinessRules\Exceptions\UseCaseException;
use OpenClassrooms\Tests\UseCase\BusinessRules\Requestors\UseCaseRequestStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\Responders\UseCaseResponseStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\Responders\Doubles\UseCaseResponseStub;

/**
* @author Romain Kuzniak <[email protected]>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

use OpenClassrooms\Tests\UseCase\BusinessRules\Exceptions\UseCaseException;
use OpenClassrooms\Tests\UseCase\BusinessRules\Requestors\UseCaseRequestStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\Responders\UseCaseResponseStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\Responders\Doubles\UseCaseResponseStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\UseCases\Cache\ExceptionCacheUseCaseStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\UseCases\Cache\LifeTimeCacheUseCaseStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\UseCases\Cache\NamespaceCacheUseCaseStub;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
use Doctrine\Common\Annotations\AnnotationReader;
use OpenClassrooms\UseCase\Application\Services\Proxy\UseCases\Impl\UseCaseProxyImpl;
use OpenClassrooms\Tests\UseCase\BusinessRules\Requestors\UseCaseRequestStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\Responders\UseCaseResponseStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\Responders\Doubles\UseCaseResponseStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\UseCases\Cache\OnlyCacheUseCaseStub;
use
OpenClassrooms\Tests\UseCase\BusinessRules\UseCases\Event\OnlyEventNameEventUseCaseStub;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

use OpenClassrooms\Tests\UseCase\BusinessRules\Exceptions\UseCaseException;
use OpenClassrooms\Tests\UseCase\BusinessRules\Requestors\UseCaseRequestStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\Responders\UseCaseResponseStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\Responders\Doubles\UseCaseResponseStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\UseCases\Event\EventUseCaseStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\UseCases\Event\OnExceptionEventUseCaseStub;
use
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
use OpenClassrooms\Tests\UseCase\Application\Services\Security\SecuritySpy;
use OpenClassrooms\Tests\UseCase\Application\Services\Transaction\TransactionSpy;
use OpenClassrooms\Tests\UseCase\BusinessRules\Requestors\UseCaseRequestStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\Responders\UseCaseResponseStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\Responders\Doubles\UseCaseResponseStub;
use
OpenClassrooms\Tests\UseCase\BusinessRules\UseCases\Workflow\AllAnnotationsUseCaseStub;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
OpenClassrooms\Tests\UseCase\Application\Services\Security\Exceptions\AccessDeniedException;
use OpenClassrooms\Tests\UseCase\BusinessRules\Exceptions\UseCaseException;
use OpenClassrooms\Tests\UseCase\BusinessRules\Requestors\UseCaseRequestStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\Responders\UseCaseResponseStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\Responders\Doubles\UseCaseResponseStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\UseCases\UseCaseStub;
use OpenClassrooms\Tests\UseCase\BusinessRules\UseCases\WithoutResponseUseCaseStub;
use
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<?php

namespace OpenClassrooms\Tests\UseCase\BusinessRules\Entities;

use OpenClassrooms\UseCase\Application\Entity\PaginatedCollectionBuilderImpl;
use OpenClassrooms\UseCase\Application\Entity\PaginatedCollectionImpl;
use OpenClassrooms\UseCase\BusinessRules\Entities\PaginatedCollectionBuilder;

/**
* @author Romain Kuzniak <[email protected]>
*/
class PaginatedCollectionBuilderTest extends \PHPUnit_Framework_TestCase
{
/**
* @var PaginatedCollectionBuilder
*/
private $builder;

/**
* @test
*/
public function WithoutTotalItems_ThrowException()
{
$paginatedCollection = $this->builder->create()->build();
$this->assertEquals(new PaginatedCollectionImpl(), $paginatedCollection);
}

/**
* @test
*/
public function ReturnPaginatedCollection()
{
$expectedItems = array('item1', 'item2', 'item3');
$expectedItemsPerPage = 2;
$expectedPage = 2;
$paginatedCollection = $this->builder
->create()
->withItems($expectedItems)
->withItemsPerPage($expectedItemsPerPage)
->withPage($expectedPage)
->withTotalItems(count($expectedItems))
->build();

$this->assertEquals($expectedItems, $paginatedCollection->getItems());
$this->assertEquals($expectedItemsPerPage, $paginatedCollection->getItemsPerPage());
$this->assertEquals($expectedPage, $paginatedCollection->getPage());
$this->assertEquals(count($expectedItems), $paginatedCollection->getTotalItems());
$this->assertEquals(2, $paginatedCollection->getTotalPages());
}

protected function setUp()
{
$this->builder = new PaginatedCollectionBuilderImpl();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace OpenClassrooms\Tests\UseCase\BusinessRules\Entities;

use OpenClassrooms\UseCase\Application\Entity\PaginatedCollectionImpl;

/**
* @author Romain Kuzniak <[email protected]>
*/
class PaginatedCollectionTest extends \PHPUnit_Framework_TestCase
{
/**
* @test
*/
public function NewPaginatedCollection_ReturnPaginatedCollection()
{
$paginatedCollection = new PaginatedCollectionImpl();
$this->assertEmpty($paginatedCollection->getItems());
$this->assertEquals(0, $paginatedCollection->getItemsPerPage());
$this->assertEquals(1, $paginatedCollection->getPage());
$this->assertEquals(0, $paginatedCollection->getTotalItems());
$this->assertEquals(1, $paginatedCollection->getTotalPages());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@
*/
class PaginatedUseCaseResponseStub extends AbstractPaginatedUseCaseResponse
{

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace OpenClassrooms\Tests\UseCase\BusinessRules\Responders;
namespace OpenClassrooms\Tests\UseCase\BusinessRules\Responders\Doubles;

/**
* @author Romain Kuzniak <[email protected]>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace OpenClassrooms\Tests\UseCase\BusinessRules\Responders;
namespace OpenClassrooms\Tests\UseCase\BusinessRules\Responders\Doubles;

use OpenClassrooms\UseCase\BusinessRules\Responders\UseCaseResponse;

Expand Down
Loading

0 comments on commit dd297e9

Please sign in to comment.