14
14
use Nyholm \Psr7 \Factory \Psr17Factory ;
15
15
use PHPUnit \Framework \TestCase ;
16
16
use Symfony \Bridge \PsrHttpMessage \Factory \PsrHttpFactory ;
17
- use Symfony \Bridge \PsrHttpMessage \HttpMessageFactoryInterface ;
18
17
use Symfony \Component \HttpFoundation \BinaryFileResponse ;
19
18
use Symfony \Component \HttpFoundation \Cookie ;
20
19
use Symfony \Component \HttpFoundation \File \UploadedFile ;
29
28
*/
30
29
class PsrHttpFactoryTest extends TestCase
31
30
{
32
- private HttpMessageFactoryInterface $ factory ;
33
31
private string $ tmpDir ;
34
32
35
- protected function buildHttpMessageFactory (): HttpMessageFactoryInterface
36
- {
37
- $ factory = new Psr17Factory ();
38
-
39
- return new PsrHttpFactory ($ factory , $ factory , $ factory , $ factory );
40
- }
41
-
42
33
protected function setUp (): void
43
34
{
44
- $ this ->factory = $ this ->buildHttpMessageFactory ();
45
35
$ this ->tmpDir = sys_get_temp_dir ();
46
36
}
47
37
48
- public function testCreateRequest ()
38
+ /**
39
+ * @dataProvider provideFactories
40
+ */
41
+ public function testCreateRequest (PsrHttpFactory $ factory )
49
42
{
50
43
$ stdClass = new \stdClass ();
51
44
$ request = new Request (
@@ -83,7 +76,7 @@ public function testCreateRequest()
83
76
);
84
77
$ request ->headers ->set (' X-Broken ' , 'abc ' );
85
78
86
- $ psrRequest = $ this -> factory ->createRequest ($ request );
79
+ $ psrRequest = $ factory ->createRequest ($ request );
87
80
88
81
$ this ->assertSame ('Content ' , $ psrRequest ->getBody ()->__toString ());
89
82
@@ -130,7 +123,7 @@ public function testGetContentCanBeCalledAfterRequestCreation()
130
123
$ header = ['HTTP_HOST ' => 'dunglas.fr ' ];
131
124
$ request = new Request ([], [], [], [], [], $ header , 'Content ' );
132
125
133
- $ psrRequest = $ this -> factory ->createRequest ($ request );
126
+ $ psrRequest = self :: buildHttpMessageFactory () ->createRequest ($ request );
134
127
135
128
$ this ->assertSame ('Content ' , $ psrRequest ->getBody ()->__toString ());
136
129
$ this ->assertSame ('Content ' , $ request ->getContent ());
@@ -144,7 +137,10 @@ private function createUploadedFile(string $content, string $originalName, strin
144
137
return new UploadedFile ($ path , $ originalName , $ mimeType , $ error , true );
145
138
}
146
139
147
- public function testCreateResponse ()
140
+ /**
141
+ * @dataProvider provideFactories
142
+ */
143
+ public function testCreateResponse (PsrHttpFactory $ factory )
148
144
{
149
145
$ response = new Response (
150
146
'Response content. ' ,
@@ -156,7 +152,7 @@ public function testCreateResponse()
156
152
);
157
153
$ response ->headers ->setCookie (new Cookie ('city ' , 'Lille ' , new \DateTime ('Wed, 13 Jan 2021 22:23:01 GMT ' ), '/ ' , null , false , true , false , 'lax ' ));
158
154
159
- $ psrResponse = $ this -> factory ->createResponse ($ response );
155
+ $ psrResponse = $ factory ->createResponse ($ response );
160
156
$ this ->assertSame ('Response content. ' , $ psrResponse ->getBody ()->__toString ());
161
157
$ this ->assertSame (202 , $ psrResponse ->getStatusCode ());
162
158
$ this ->assertSame (['3.4 ' ], $ psrResponse ->getHeader ('x-symfony ' ));
@@ -179,7 +175,7 @@ public function testCreateResponseFromStreamed()
179
175
flush ();
180
176
});
181
177
182
- $ psrResponse = $ this -> factory ->createResponse ($ response );
178
+ $ psrResponse = self :: buildHttpMessageFactory () ->createResponse ($ response );
183
179
184
180
$ this ->assertSame ("Line 1 \nLine 2 \n" , $ psrResponse ->getBody ()->__toString ());
185
181
}
@@ -191,7 +187,7 @@ public function testCreateResponseFromBinaryFile()
191
187
192
188
$ response = new BinaryFileResponse ($ path );
193
189
194
- $ psrResponse = $ this -> factory ->createResponse ($ response );
190
+ $ psrResponse = self :: buildHttpMessageFactory () ->createResponse ($ response );
195
191
196
192
$ this ->assertSame ('Binary ' , $ psrResponse ->getBody ()->__toString ());
197
193
}
@@ -207,7 +203,7 @@ public function testCreateResponseFromBinaryFileWithRange()
207
203
$ response = new BinaryFileResponse ($ path , 200 , ['Content-Type ' => 'plain/text ' ]);
208
204
$ response ->prepare ($ request );
209
205
210
- $ psrResponse = $ this -> factory ->createResponse ($ response );
206
+ $ psrResponse = self :: buildHttpMessageFactory () ->createResponse ($ response );
211
207
212
208
$ this ->assertSame ('inar ' , $ psrResponse ->getBody ()->__toString ());
213
209
$ this ->assertSame ('bytes 1-4/6 ' , $ psrResponse ->getHeaderLine ('Content-Range ' ));
@@ -237,7 +233,7 @@ public function testUploadErrNoFile()
237
233
'Content '
238
234
);
239
235
240
- $ psrRequest = $ this -> factory ->createRequest ($ request );
236
+ $ psrRequest = self :: buildHttpMessageFactory () ->createRequest ($ request );
241
237
242
238
$ uploadedFiles = $ psrRequest ->getUploadedFiles ();
243
239
@@ -256,7 +252,7 @@ public function testJsonContent()
256
252
'CONTENT_TYPE ' => 'application/json ' ,
257
253
];
258
254
$ request = new Request ([], [], [], [], [], $ headers , '{"city":"Paris","country":"France"} ' );
259
- $ psrRequest = $ this -> factory ->createRequest ($ request );
255
+ $ psrRequest = self :: buildHttpMessageFactory () ->createRequest ($ request );
260
256
261
257
$ this ->assertSame (['city ' => 'Paris ' , 'country ' => 'France ' ], $ psrRequest ->getParsedBody ());
262
258
}
@@ -272,7 +268,7 @@ public function testEmptyJsonContent()
272
268
'CONTENT_TYPE ' => 'application/json ' ,
273
269
];
274
270
$ request = new Request ([], [], [], [], [], $ headers , '{} ' );
275
- $ psrRequest = $ this -> factory ->createRequest ($ request );
271
+ $ psrRequest = self :: buildHttpMessageFactory () ->createRequest ($ request );
276
272
277
273
$ this ->assertSame ([], $ psrRequest ->getParsedBody ());
278
274
}
@@ -288,8 +284,22 @@ public function testWrongJsonContent()
288
284
'CONTENT_TYPE ' => 'application/json ' ,
289
285
];
290
286
$ request = new Request ([], [], [], [], [], $ headers , '{"city":"Paris" ' );
291
- $ psrRequest = $ this -> factory ->createRequest ($ request );
287
+ $ psrRequest = self :: buildHttpMessageFactory () ->createRequest ($ request );
292
288
293
289
$ this ->assertNull ($ psrRequest ->getParsedBody ());
294
290
}
291
+
292
+ public static function provideFactories (): \Generator
293
+ {
294
+ yield 'Discovery ' => [new PsrHttpFactory ()];
295
+ yield 'incomplete dependencies ' => [new PsrHttpFactory (responseFactory: new Psr17Factory ())];
296
+ yield 'Nyholm ' => [self ::buildHttpMessageFactory ()];
297
+ }
298
+
299
+ private static function buildHttpMessageFactory (): PsrHttpFactory
300
+ {
301
+ $ factory = new Psr17Factory ();
302
+
303
+ return new PsrHttpFactory ($ factory , $ factory , $ factory , $ factory );
304
+ }
295
305
}
0 commit comments