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']);
+ }
+}