Skip to content

Commit ae9cb39

Browse files
committed
to squash
1 parent 57a733c commit ae9cb39

3 files changed

Lines changed: 71 additions & 93 deletions

File tree

src/Metadata/Resource/Factory/DefaultParametersResourceMetadataCollectionFactory.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
/**
2121
* Adds default parameters from the global configuration to all resources and operations.
2222
*
23-
* @author Kévin Dunglas <dunglas@gmail.com>
23+
* @author Maxence Castel <maxence.castel59@gmail.com>
2424
*/
2525
final class DefaultParametersResourceMetadataCollectionFactory implements ResourceMetadataCollectionFactoryInterface
2626
{

src/Metadata/Tests/Resource/Factory/DefaultParametersResourceMetadataCollectionFactoryTest.php

Lines changed: 69 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,24 @@
1111

1212
declare(strict_types=1);
1313

14-
namespace ApiPlatform\Tests\Metadata\Resource\Factory;
14+
namespace ApiPlatform\Metadata\Tests\Resource\Factory;
1515

1616
use ApiPlatform\Metadata\ApiResource;
17-
use ApiPlatform\Metadata\Get;
1817
use ApiPlatform\Metadata\GetCollection;
1918
use ApiPlatform\Metadata\HeaderParameter;
20-
use ApiPlatform\Metadata\Operations;
2119
use ApiPlatform\Metadata\QueryParameter;
20+
use ApiPlatform\Metadata\Resource\Factory\AttributesResourceMetadataCollectionFactory;
2221
use ApiPlatform\Metadata\Resource\Factory\DefaultParametersResourceMetadataCollectionFactory;
23-
use ApiPlatform\Metadata\Resource\ResourceMetadataCollection;
2422
use PHPUnit\Framework\TestCase;
2523

2624
/**
27-
* Tests for DefaultParametersResourceMetadataCollectionFactory.
25+
* Integration tests for DefaultParametersResourceMetadataCollectionFactory with real resources.
2826
*
29-
* @author Kévin Dunglas <dunglas@gmail.com>
27+
* @author Maxence Castel <maxence.castel59@gmail.com>
3028
*/
3129
final class DefaultParametersResourceMetadataCollectionFactoryTest extends TestCase
3230
{
33-
public function testAddDefaultHeaderParameter(): void
31+
public function testDefaultParametersAppliedToRealResource(): void
3432
{
3533
$defaultParameters = [
3634
HeaderParameter::class => [
@@ -40,117 +38,97 @@ public function testAddDefaultHeaderParameter(): void
4038
],
4139
];
4240

43-
$factory = new DefaultParametersResourceMetadataCollectionFactory($defaultParameters);
41+
$attributesFactory = new AttributesResourceMetadataCollectionFactory();
42+
$defaultParametersFactory = new DefaultParametersResourceMetadataCollectionFactory($defaultParameters, $attributesFactory);
4443

45-
$resource = (new ApiResource())
46-
->withClass('DummyResource')
47-
->withOperations(new Operations([
48-
new GetCollection(),
49-
new Get(uriTemplate: '/dummies/{id}'),
50-
]));
44+
$resourceClass = TestProductResource::class;
5145

52-
$collection = new ResourceMetadataCollection('DummyResource', [$resource]);
46+
$collection = $defaultParametersFactory->create($resourceClass);
5347

54-
$result = $factory->create('DummyResource');
48+
$this->assertCount(1, $collection);
5549

56-
$this->assertInstanceOf(ResourceMetadataCollection::class, $result);
57-
}
58-
59-
public function testAddDefaultQueryParameter(): void
60-
{
61-
$defaultParameters = [
62-
QueryParameter::class => [
63-
'key' => 'filter',
64-
'required' => false,
65-
'description' => 'Filter results',
66-
],
67-
];
50+
$resource = $collection[0];
6851

69-
$factory = new DefaultParametersResourceMetadataCollectionFactory($defaultParameters);
52+
$operations = $resource->getOperations();
53+
$this->assertNotNull($operations);
7054

71-
$resource = (new ApiResource())
72-
->withClass('DummyResource')
73-
->withOperations(new Operations([
74-
new GetCollection(),
75-
]));
55+
$collectionOperation = null;
56+
foreach ($operations as $operation) {
57+
if ($operation instanceof GetCollection) {
58+
$collectionOperation = $operation;
59+
break;
60+
}
61+
}
7662

77-
$collection = new ResourceMetadataCollection('DummyResource', [$resource]);
63+
$this->assertNotNull($collectionOperation, 'GetCollection operation not found');
7864

79-
$result = $factory->create('DummyResource');
65+
$parameters = $collectionOperation->getParameters();
66+
$this->assertNotNull($parameters);
67+
$this->assertTrue($parameters->has('X-API-Version', HeaderParameter::class), 'Default header parameter not found');
8068

81-
$this->assertInstanceOf(ResourceMetadataCollection::class, $result);
69+
$headerParam = $parameters->get('X-API-Version', HeaderParameter::class);
70+
$this->assertSame('X-API-Version', $headerParam->getKey());
71+
$this->assertTrue($headerParam->getRequired());
72+
$this->assertSame('API Version', $headerParam->getDescription());
8273
}
8374

84-
public function testMultipleDefaultParameters(): void
75+
public function testDefaultParametersWithOperationOverride(): void
8576
{
8677
$defaultParameters = [
8778
HeaderParameter::class => [
8879
'key' => 'X-API-Version',
8980
'required' => true,
90-
],
91-
QueryParameter::class => [
92-
'key' => 'sort',
93-
'required' => false,
81+
'description' => 'API Version',
9482
],
9583
];
9684

97-
$factory = new DefaultParametersResourceMetadataCollectionFactory($defaultParameters);
85+
$attributesFactory = new AttributesResourceMetadataCollectionFactory();
86+
$defaultParametersFactory = new DefaultParametersResourceMetadataCollectionFactory($defaultParameters, $attributesFactory);
9887

99-
$resource = (new ApiResource())
100-
->withClass('DummyResource')
101-
->withOperations(new Operations([
102-
new GetCollection(),
103-
]));
88+
$resourceClass = TestProductResourceWithParameters::class;
10489

105-
$collection = new ResourceMetadataCollection('DummyResource', [$resource]);
90+
$collection = $defaultParametersFactory->create($resourceClass);
10691

107-
$result = $factory->create('DummyResource');
92+
$this->assertCount(1, $collection);
93+
$resource = $collection[0];
94+
$operations = $resource->getOperations();
10895

109-
$this->assertInstanceOf(ResourceMetadataCollection::class, $result);
110-
}
111-
112-
public function testEmptyDefaultParameters(): void
113-
{
114-
$factory = new DefaultParametersResourceMetadataCollectionFactory([]);
115-
116-
$resource = (new ApiResource())
117-
->withClass('DummyResource')
118-
->withOperations(new Operations([
119-
new GetCollection(),
120-
]));
96+
$collectionOperation = null;
97+
foreach ($operations as $operation) {
98+
if ($operation instanceof GetCollection) {
99+
$collectionOperation = $operation;
100+
break;
101+
}
102+
}
121103

122-
$collection = new ResourceMetadataCollection('DummyResource', [$resource]);
104+
$this->assertNotNull($collectionOperation);
123105

124-
$result = $factory->create('DummyResource');
106+
$parameters = $collectionOperation->getParameters();
107+
$this->assertNotNull($parameters);
125108

126-
$this->assertInstanceOf(ResourceMetadataCollection::class, $result);
109+
$this->assertTrue($parameters->has('X-API-Version', HeaderParameter::class));
110+
$this->assertTrue($parameters->has('filter', QueryParameter::class));
127111
}
112+
}
128113

129-
public function testDefaultParametersWithDecoratedFactory(): void
130-
{
131-
$defaultParameters = [
132-
HeaderParameter::class => [
133-
'key' => 'X-API-Version',
134-
'required' => true,
135-
],
136-
];
137-
138-
$mockDecorated = $this->createMock(\ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface::class);
139-
140-
$resource = (new ApiResource())
141-
->withClass('DummyResource')
142-
->withOperations(new Operations([
143-
new GetCollection(),
144-
]));
145-
146-
$collection = new ResourceMetadataCollection('DummyResource', [$resource]);
147-
148-
$mockDecorated->expects($this->once())->method('create')->with('DummyResource')->willReturn($collection);
149-
150-
$factory = new DefaultParametersResourceMetadataCollectionFactory($defaultParameters, $mockDecorated);
151-
152-
$result = $factory->create('DummyResource');
114+
#[ApiResource(operations: [new GetCollection()])]
115+
class TestProductResource
116+
{
117+
public int $id = 1;
118+
public string $name = 'Test Product';
119+
}
153120

154-
$this->assertInstanceOf(ResourceMetadataCollection::class, $result);
155-
}
121+
#[ApiResource(
122+
operations: [
123+
new GetCollection(
124+
parameters: [
125+
'filter' => new QueryParameter(key: 'filter', description: 'Filter by name'),
126+
]
127+
),
128+
]
129+
)]
130+
class TestProductResourceWithParameters
131+
{
132+
public int $id = 1;
133+
public string $name = 'Test Product';
156134
}

tests/Symfony/Bundle/DependencyInjection/ConfigurationDefaultParametersTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
/**
2121
* Tests the defaults.parameters configuration option.
2222
*
23-
* @author Kévin Dunglas <dunglas@gmail.com>
23+
* @author Maxence Castel <maxence.castel59@gmail.com>
2424
*/
2525
final class ConfigurationDefaultParametersTest extends TestCase
2626
{

0 commit comments

Comments
 (0)