1111
1212declare (strict_types=1 );
1313
14- namespace ApiPlatform \Tests \ Metadata \Resource \Factory ;
14+ namespace ApiPlatform \Metadata \ Tests \Resource \Factory ;
1515
1616use ApiPlatform \Metadata \ApiResource ;
17- use ApiPlatform \Metadata \Get ;
1817use ApiPlatform \Metadata \GetCollection ;
1918use ApiPlatform \Metadata \HeaderParameter ;
20- use ApiPlatform \Metadata \Operations ;
2119use ApiPlatform \Metadata \QueryParameter ;
20+ use ApiPlatform \Metadata \Resource \Factory \AttributesResourceMetadataCollectionFactory ;
2221use ApiPlatform \Metadata \Resource \Factory \DefaultParametersResourceMetadataCollectionFactory ;
23- use ApiPlatform \Metadata \Resource \ResourceMetadataCollection ;
2422use 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 */
3129final 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}
0 commit comments