Skip to content

Commit 8ba9038

Browse files
Deuchnordalanpoulain
authored andcommitted
test: OpenApi (#40)
1 parent 32f3524 commit 8ba9038

File tree

2 files changed

+51
-22
lines changed

2 files changed

+51
-22
lines changed

src/JsonApi/Serializer/CollectionNormalizer.php

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
namespace ApiPlatform\JsonApi\Serializer;
1515

1616
use ApiPlatform\Api\ResourceClassResolverInterface;
17-
use ApiPlatform\Core\Metadata\Resource\ResourceMetadata;
17+
use ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface;
1818
use ApiPlatform\Metadata\Resource\ResourceMetadataCollection;
1919
use ApiPlatform\Serializer\AbstractCollectionNormalizer;
2020
use ApiPlatform\Util\IriHelper;
@@ -31,7 +31,7 @@ final class CollectionNormalizer extends AbstractCollectionNormalizer
3131
{
3232
public const FORMAT = 'jsonapi';
3333

34-
public function __construct(ResourceClassResolverInterface $resourceClassResolver, string $pageParameterName, $resourceMetadataFactory)
34+
public function __construct(ResourceClassResolverInterface $resourceClassResolver, string $pageParameterName, ResourceMetadataCollectionFactoryInterface $resourceMetadataFactory)
3535
{
3636
parent::__construct($resourceClassResolver, $pageParameterName, $resourceMetadataFactory);
3737
}
@@ -44,14 +44,10 @@ protected function getPaginationData($object, array $context = []): array
4444
[$paginator, $paginated, $currentPage, $itemsPerPage, $lastPage, $pageTotalItems, $totalItems] = $this->getPaginationConfig($object, $context);
4545
$parsed = IriHelper::parseIri($context['uri'] ?? '/', $this->pageParameterName);
4646

47-
/** @var ResourceMetadata|ResourceMetadataCollection */
47+
/** @var ResourceMetadataCollection */
4848
$metadata = $this->resourceMetadataFactory->create($context['resource_class'] ?? '');
49-
if ($metadata instanceof ResourceMetadataCollection) {
50-
$operation = $metadata->getOperation($context['operation_name'] ?? null);
51-
$urlGenerationStrategy = $operation->getUrlGenerationStrategy();
52-
} else {
53-
$urlGenerationStrategy = $metadata->getAttribute('url_generation_strategy');
54-
}
49+
$operation = $metadata->getOperation($context['operation_name'] ?? null);
50+
$urlGenerationStrategy = $operation->getUrlGenerationStrategy();
5551

5652
$data = [
5753
'links' => [

tests/JsonApi/Serializer/CollectionNormalizerTest.php

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,12 @@
1414
namespace ApiPlatform\Tests\JsonApi\Serializer;
1515

1616
use ApiPlatform\Api\ResourceClassResolverInterface;
17-
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface;
18-
use ApiPlatform\Core\Metadata\Resource\ResourceMetadata;
1917
use ApiPlatform\JsonApi\Serializer\CollectionNormalizer;
18+
use ApiPlatform\Metadata\ApiResource;
19+
use ApiPlatform\Metadata\GetCollection;
20+
use ApiPlatform\Metadata\Operations;
21+
use ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface;
22+
use ApiPlatform\Metadata\Resource\ResourceMetadataCollection;
2023
use ApiPlatform\State\Pagination\PaginatorInterface;
2124
use ApiPlatform\State\Pagination\PartialPaginatorInterface;
2225
use ApiPlatform\Tests\ProphecyTrait;
@@ -35,7 +38,7 @@ class CollectionNormalizerTest extends TestCase
3538
public function testSupportsNormalize()
3639
{
3740
$resourceClassResolverProphecy = $this->prophesize(ResourceClassResolverInterface::class);
38-
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
41+
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataCollectionFactoryInterface::class);
3942

4043
$normalizer = new CollectionNormalizer($resourceClassResolverProphecy->reveal(), 'page', $resourceMetadataFactoryProphecy->reveal());
4144

@@ -63,12 +66,17 @@ public function testNormalizePaginator()
6366
$resourceClassResolverProphecy = $this->prophesize(ResourceClassResolverInterface::class);
6467
$resourceClassResolverProphecy->getResourceClass($paginator, 'Foo')->willReturn('Foo');
6568

66-
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
67-
$resourceMetadataFactoryProphecy->create('Foo')->willReturn(new ResourceMetadata());
69+
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataCollectionFactoryInterface::class);
70+
$resourceMetadataFactoryProphecy->create('Foo')->willReturn(new ResourceMetadataCollection('Foo', [
71+
(new ApiResource())
72+
->withShortName('Foo')
73+
->withOperations(new Operations(['get' => (new GetCollection())]))
74+
]));
6875

6976
$itemNormalizer = $this->prophesize(NormalizerInterface::class);
7077
$itemNormalizer->normalize('foo', CollectionNormalizer::FORMAT, [
7178
'request_uri' => '/foos?page=3',
79+
'operation_name' => 'get',
7280
'uri' => 'http://example.com/foos?page=3',
7381
'api_sub_level' => true,
7482
'resource_class' => 'Foo',
@@ -113,6 +121,7 @@ public function testNormalizePaginator()
113121

114122
$this->assertEquals($expected, $normalizer->normalize($paginator, CollectionNormalizer::FORMAT, [
115123
'request_uri' => '/foos?page=3',
124+
'operation_name' => 'get',
116125
'uri' => 'http://example.com/foos?page=3',
117126
'resource_class' => 'Foo',
118127
]));
@@ -134,12 +143,17 @@ public function testNormalizePartialPaginator()
134143
$resourceClassResolverProphecy = $this->prophesize(ResourceClassResolverInterface::class);
135144
$resourceClassResolverProphecy->getResourceClass($paginator, 'Foo')->willReturn('Foo');
136145

137-
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
138-
$resourceMetadataFactoryProphecy->create('Foo')->willReturn(new ResourceMetadata());
146+
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataCollectionFactoryInterface::class);
147+
$resourceMetadataFactoryProphecy->create('Foo')->willReturn(new ResourceMetadataCollection('Foo', [
148+
(new ApiResource())
149+
->withShortName('Foo')
150+
->withOperations(new Operations(['get' => (new GetCollection())]))
151+
]));
139152

140153
$itemNormalizer = $this->prophesize(NormalizerInterface::class);
141154
$itemNormalizer->normalize('foo', CollectionNormalizer::FORMAT, [
142155
'request_uri' => '/foos?page=3',
156+
'operation_name' => 'get',
143157
'uri' => 'http://example.com/foos?page=3',
144158
'api_sub_level' => true,
145159
'resource_class' => 'Foo',
@@ -181,6 +195,7 @@ public function testNormalizePartialPaginator()
181195

182196
$this->assertEquals($expected, $normalizer->normalize($paginator, CollectionNormalizer::FORMAT, [
183197
'request_uri' => '/foos?page=3',
198+
'operation_name' => 'get',
184199
'uri' => 'http://example.com/foos?page=3',
185200
'resource_class' => 'Foo',
186201
]));
@@ -192,11 +207,16 @@ public function testNormalizeArray()
192207

193208
$resourceClassResolverProphecy = $this->prophesize(ResourceClassResolverInterface::class);
194209
$resourceClassResolverProphecy->getResourceClass($data, 'Foo')->willReturn('Foo');
195-
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
196-
$resourceMetadataFactoryProphecy->create('Foo')->willReturn(new ResourceMetadata());
210+
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataCollectionFactoryInterface::class);
211+
$resourceMetadataFactoryProphecy->create('Foo')->willReturn(new ResourceMetadataCollection('Foo', [
212+
(new ApiResource())
213+
->withShortName('Foo')
214+
->withOperations(new Operations(['get' => (new GetCollection())]))
215+
]));
197216
$itemNormalizer = $this->prophesize(NormalizerInterface::class);
198217
$itemNormalizer->normalize('foo', CollectionNormalizer::FORMAT, [
199218
'request_uri' => '/foos',
219+
'operation_name' => 'get',
200220
'uri' => 'http://example.com/foos',
201221
'api_sub_level' => true,
202222
'resource_class' => 'Foo',
@@ -231,6 +251,7 @@ public function testNormalizeArray()
231251

232252
$this->assertEquals($expected, $normalizer->normalize($data, CollectionNormalizer::FORMAT, [
233253
'request_uri' => '/foos',
254+
'operation_name' => 'get',
234255
'uri' => 'http://example.com/foos',
235256
'resource_class' => 'Foo',
236257
]));
@@ -243,12 +264,17 @@ public function testNormalizeIncludedData()
243264
$resourceClassResolverProphecy = $this->prophesize(ResourceClassResolverInterface::class);
244265
$resourceClassResolverProphecy->getResourceClass($data, 'Foo')->willReturn('Foo');
245266

246-
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
247-
$resourceMetadataFactoryProphecy->create('Foo')->willReturn(new ResourceMetadata());
267+
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataCollectionFactoryInterface::class);
268+
$resourceMetadataFactoryProphecy->create('Foo')->willReturn(new ResourceMetadataCollection('Foo', [
269+
(new ApiResource())
270+
->withShortName('Foo')
271+
->withOperations(new Operations(['get' => (new GetCollection())]))
272+
]));
248273

249274
$itemNormalizer = $this->prophesize(NormalizerInterface::class);
250275
$itemNormalizer->normalize('foo', CollectionNormalizer::FORMAT, [
251276
'request_uri' => '/foos',
277+
'operation_name' => 'get',
252278
'uri' => 'http://example.com/foos',
253279
'api_sub_level' => true,
254280
'resource_class' => 'Foo',
@@ -303,6 +329,7 @@ public function testNormalizeIncludedData()
303329

304330
$this->assertEquals($expected, $normalizer->normalize($data, CollectionNormalizer::FORMAT, [
305331
'request_uri' => '/foos',
332+
'operation_name' => 'get',
306333
'uri' => 'http://example.com/foos',
307334
'resource_class' => 'Foo',
308335
]));
@@ -318,12 +345,17 @@ public function testNormalizeWithoutDataKey()
318345
$resourceClassResolverProphecy = $this->prophesize(ResourceClassResolverInterface::class);
319346
$resourceClassResolverProphecy->getResourceClass($data, 'Foo')->willReturn('Foo');
320347

321-
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
322-
$resourceMetadataFactoryProphecy->create('Foo')->willReturn(new ResourceMetadata());
348+
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataCollectionFactoryInterface::class);
349+
$resourceMetadataFactoryProphecy->create('Foo')->willReturn(new ResourceMetadataCollection('Foo', [
350+
(new ApiResource())
351+
->withShortName('Foo')
352+
->withOperations(new Operations(['get' => (new GetCollection())]))
353+
]));
323354

324355
$itemNormalizer = $this->prophesize(NormalizerInterface::class);
325356
$itemNormalizer->normalize('foo', CollectionNormalizer::FORMAT, [
326357
'request_uri' => '/foos',
358+
'operation_name' => 'get',
327359
'uri' => 'http://example.com/foos',
328360
'api_sub_level' => true,
329361
'resource_class' => 'Foo',
@@ -334,6 +366,7 @@ public function testNormalizeWithoutDataKey()
334366

335367
$normalizer->normalize($data, CollectionNormalizer::FORMAT, [
336368
'request_uri' => '/foos',
369+
'operation_name' => 'get',
337370
'uri' => 'http://example.com/foos',
338371
'resource_class' => 'Foo',
339372
]);

0 commit comments

Comments
 (0)