diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 8790b9d..1da926d 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -3,7 +3,6 @@ ./test/tests - ./test/tests/TestCase.php diff --git a/src/Enums/PaginationType.php b/src/Enums/PaginationType.php new file mode 100644 index 0000000..3a6e868 --- /dev/null +++ b/src/Enums/PaginationType.php @@ -0,0 +1,26 @@ +paginationType === PaginationType::SIMPLE) { + return $query->simplePaginate($perPage); + } else { + return $query->paginate($perPage); + } + } + /** * Figure out which transformer to use * diff --git a/src/Http/Controllers/RestfulController.php b/src/Http/Controllers/RestfulController.php index 3d16991..051d4d5 100644 --- a/src/Http/Controllers/RestfulController.php +++ b/src/Http/Controllers/RestfulController.php @@ -58,9 +58,10 @@ public function getAll() $perPage = intval(request()->input('per_page')); } - $paginator = $query->paginate($perPage); - - return $this->response->paginator($paginator, $this->getTransformer()); + return $this->response->paginator( + $this->getPaginator($query, $perPage), + $this->getTransformer() + ); } else { $resources = $query->get(); diff --git a/test/app/Http/Controllers/ForumController.php b/test/app/Http/Controllers/ForumController.php index 25cdf6b..58322ec 100644 --- a/test/app/Http/Controllers/ForumController.php +++ b/test/app/Http/Controllers/ForumController.php @@ -4,6 +4,7 @@ use Illuminate\Http\Request; use App\Models\Forum; +use Specialtactics\L5Api\Enums\PaginationType; class ForumController extends Controller { @@ -16,4 +17,6 @@ class ForumController extends Controller * @var null|BaseTransformer The transformer this controller should use, if overriding the model & default */ public static $transformer = null; + + public PaginationType $paginationType = PaginationType::LENGTH_AWARE; } diff --git a/test/routes/api-routes.php b/test/routes/api-routes.php index 2f994a2..381b428 100644 --- a/test/routes/api-routes.php +++ b/test/routes/api-routes.php @@ -43,7 +43,6 @@ * Test */ $api->group(['prefix' => 'posts'], function ($api) { - $api->get('/', 'App\Http\Controllers\PostController@getAll'); $api->post('/', 'App\Http\Controllers\PostController@post'); }); diff --git a/test/tests/Unit/PaginationTest.php b/test/tests/Unit/PaginationTest.php new file mode 100644 index 0000000..39773ce --- /dev/null +++ b/test/tests/Unit/PaginationTest.php @@ -0,0 +1,38 @@ +actingAsAdmin() + ->json('GET', '/forums'); + + $jsonResponse->assertStatus(200); + $response = $jsonResponse->decodeResponseJson(); + + $this->assertEquals(1, $response['meta']['pagination']['total']); + $this->assertEquals(1, $response['meta']['pagination']['totalPages']); + } + + public function testSimplePagination() + { + $mockForumController = $this->partialMock(ForumController::class); + $mockForumController->paginationType = PaginationType::SIMPLE; + + $jsonResponse = $this->actingAsAdmin() + ->json('GET', '/forums'); + + $jsonResponse->assertStatus(200); + $response = $jsonResponse->decodeResponseJson(); + + // League's Serealiser contract needs to return something, so at the moment it's zero for simple pagination + $this->assertEquals(0, $response['meta']['pagination']['total']); + $this->assertEquals(0, $response['meta']['pagination']['totalPages']); + } +}