Skip to content

Commit 51de741

Browse files
authored
Make collection code check for PaginatedResultSet (#150)
1 parent af946bb commit 51de741

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

plugins/json-ld-view/src/JsonSerializer.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
use Cake\Core\Configure;
77
use Cake\Datasource\EntityInterface;
8+
use Cake\Datasource\Paging\PaginatedResultSet;
89
use Cake\Datasource\ResultSetInterface;
910
use Cake\Http\ServerRequest;
1011
use Cake\ORM\Entity;
@@ -63,7 +64,7 @@ public function __construct(mixed $serialize, ?ServerRequest $request = null, ?P
6364
$this->hydra = 'hydra:';
6465
}
6566

66-
if ($jsonLd instanceof ResultSetInterface) {
67+
if ($jsonLd instanceof ResultSetInterface || $jsonLd instanceof PaginatedResultSet) {
6768
$this->data = $this->collection($jsonLd);
6869
} elseif (is_subclass_of($jsonLd, Entity::class)) {
6970
$this->data = $this->item($jsonLd);
@@ -109,7 +110,7 @@ public function getData(): ?array
109110
*/
110111
private function recursion(mixed &$mixed): mixed
111112
{
112-
if ($mixed instanceof ResultSetInterface || is_array($mixed)) {
113+
if ($mixed instanceof ResultSetInterface || $mixed instanceof PaginatedResultSet || is_array($mixed)) {
113114
foreach ($mixed as $item) {
114115
$this->recursion($item);
115116
}

plugins/json-ld-view/tests/TestCase/JsonSerializerTest.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ public function setUp(): void
6262
}
6363

6464
/**
65-
* Test collection serialization and deserialization
65+
* @dataProvider dataProviderForCollectionTypes
6666
*/
67-
public function test_collection(): void
67+
public function test_collection(string $resultType): void
6868
{
6969
/** @var Table $actor */
7070
$actor = FactoryLocator::get('Table')->get('Actors');
@@ -86,14 +86,26 @@ public function test_collection(): void
8686
new View($request, null, null, ['viewVars' => ['actors' => $resultSet]])
8787
);
8888

89-
$jsonSerializer = new JsonSerializer($result, $this->request, $paginator);
89+
if ($resultType === 'PaginatedResultSet') {
90+
$jsonSerializer = new JsonSerializer($resultSet, $this->request, $paginator);
91+
} else {
92+
$jsonSerializer = new JsonSerializer($result, $this->request, $paginator);
93+
}
9094

9195
$json = $jsonSerializer->asJson(JSON_PRETTY_PRINT);
9296

9397
$this->assertIsString($json);
9498
$this->assertIsObject(json_decode($json));
9599
}
96100

101+
public static function dataProviderForCollectionTypes(): array
102+
{
103+
return [
104+
['PaginatedResultSet'],
105+
['ResultSet'],
106+
];
107+
}
108+
97109
/**
98110
* Test item serialization and deserialization
99111
*/

0 commit comments

Comments
 (0)