Skip to content

Commit 554d2ec

Browse files
committed
Add missing request fields (file & params)
1 parent 8071c7f commit 554d2ec

5 files changed

Lines changed: 101 additions & 61 deletions

File tree

.github/workflows/php.yml

Lines changed: 33 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -12,79 +12,55 @@ jobs:
1212
strategy:
1313
matrix:
1414
include:
15-
- { php-version: "8.1", symfony-version: "6.1", phpunit-version: "9.6" }
16-
- { php-version: "8.1", symfony-version: "6.2", phpunit-version: "9.6" }
17-
- { php-version: "8.1", symfony-version: "6.3", phpunit-version: "9.6" }
15+
# PHPUnit 9.6
1816
- { php-version: "8.1", symfony-version: "6.4", phpunit-version: "9.6" }
1917

20-
- { php-version: "8.2", symfony-version: "6.1", phpunit-version: "9.6" }
21-
- { php-version: "8.2", symfony-version: "6.2", phpunit-version: "9.6" }
22-
- { php-version: "8.2", symfony-version: "6.3", phpunit-version: "9.6" }
2318
- { php-version: "8.2", symfony-version: "6.4", phpunit-version: "9.6" }
24-
- { php-version: "8.2", symfony-version: "7.0", phpunit-version: "9.6" }
25-
- { php-version: "8.2", symfony-version: "7.1", phpunit-version: "9.6" }
26-
- { php-version: "8.2", symfony-version: "7.2", phpunit-version: "9.6" }
19+
- { php-version: "8.2", symfony-version: "7.4", phpunit-version: "9.6" }
2720

28-
- { php-version: "8.1", symfony-version: "6.1", phpunit-version: "10" }
29-
- { php-version: "8.1", symfony-version: "6.2", phpunit-version: "10" }
30-
- { php-version: "8.1", symfony-version: "6.3", phpunit-version: "10" }
31-
- { php-version: "8.1", symfony-version: "6.4", phpunit-version: "10" }
21+
- { php-version: "8.3", symfony-version: "6.4", phpunit-version: "9.6" }
22+
- { php-version: "8.3", symfony-version: "7.4", phpunit-version: "9.6" }
3223

33-
- { php-version: "8.2", symfony-version: "6.1", phpunit-version: "10" }
34-
- { php-version: "8.2", symfony-version: "6.2", phpunit-version: "10" }
35-
- { php-version: "8.2", symfony-version: "6.3", phpunit-version: "10" }
36-
- { php-version: "8.2", symfony-version: "6.4", phpunit-version: "10" }
37-
- { php-version: "8.2", symfony-version: "7.0", phpunit-version: "10" }
38-
- { php-version: "8.2", symfony-version: "7.1", phpunit-version: "10" }
39-
- { php-version: "8.2", symfony-version: "7.2", phpunit-version: "10" }
24+
- { php-version: "8.4", symfony-version: "7.4", phpunit-version: "9.6" }
25+
- { php-version: "8.4", symfony-version: "8.0", phpunit-version: "9.6" }
4026

41-
- { php-version: "8.3", symfony-version: "6.1", phpunit-version: "9.6" }
42-
- { php-version: "8.3", symfony-version: "6.2", phpunit-version: "9.6" }
43-
- { php-version: "8.3", symfony-version: "6.3", phpunit-version: "9.6" }
44-
- { php-version: "8.3", symfony-version: "6.4", phpunit-version: "9.6" }
45-
- { php-version: "8.3", symfony-version: "7.0", phpunit-version: "9.6" }
46-
- { php-version: "8.3", symfony-version: "7.1", phpunit-version: "9.6" }
47-
- { php-version: "8.3", symfony-version: "7.2", phpunit-version: "9.6" }
27+
- { php-version: "8.5", symfony-version: "7.4", phpunit-version: "9.6" }
28+
- { php-version: "8.5", symfony-version: "8.0", phpunit-version: "9.6" }
29+
30+
# PHPUnit 10
31+
- { php-version: "8.1", symfony-version: "6.4", phpunit-version: "10" }
4832

49-
- { php-version: "8.4", symfony-version: "7.0", phpunit-version: "9.6" }
50-
- { php-version: "8.4", symfony-version: "7.1", phpunit-version: "9.6" }
51-
- { php-version: "8.4", symfony-version: "7.2", phpunit-version: "9.6" }
33+
- { php-version: "8.2", symfony-version: "6.4", phpunit-version: "10" }
34+
- { php-version: "8.2", symfony-version: "7.4", phpunit-version: "10" }
5235

53-
- { php-version: "8.3", symfony-version: "6.1", phpunit-version: "10" }
54-
- { php-version: "8.3", symfony-version: "6.2", phpunit-version: "10" }
55-
- { php-version: "8.3", symfony-version: "6.3", phpunit-version: "10" }
5636
- { php-version: "8.3", symfony-version: "6.4", phpunit-version: "10" }
57-
- { php-version: "8.3", symfony-version: "7.0", phpunit-version: "10" }
58-
- { php-version: "8.3", symfony-version: "7.1", phpunit-version: "10" }
59-
- { php-version: "8.3", symfony-version: "7.2", phpunit-version: "10" }
37+
- { php-version: "8.3", symfony-version: "7.4", phpunit-version: "10" }
38+
39+
- { php-version: "8.4", symfony-version: "7.4", phpunit-version: "10" }
40+
- { php-version: "8.4", symfony-version: "8.0", phpunit-version: "10" }
6041

61-
- { php-version: "8.4", symfony-version: "7.0", phpunit-version: "10" }
62-
- { php-version: "8.4", symfony-version: "7.1", phpunit-version: "10" }
63-
- { php-version: "8.4", symfony-version: "7.2", phpunit-version: "10" }
42+
- { php-version: "8.5", symfony-version: "7.4", phpunit-version: "10" }
43+
- { php-version: "8.5", symfony-version: "8.0", phpunit-version: "10" }
6444

65-
#- { php-version: "8.3", symfony-version: "6.1", phpunit-version: "11" } # Apparently conflicts with nikic/php-parser
66-
#- { php-version: "8.3", symfony-version: "6.2", phpunit-version: "11" } # Apparently conflicts with nikic/php-parser
67-
- { php-version: "8.3", symfony-version: "6.3", phpunit-version: "11" }
45+
# PHPUnit 11
6846
- { php-version: "8.3", symfony-version: "6.4", phpunit-version: "11" }
69-
- { php-version: "8.3", symfony-version: "7.0", phpunit-version: "11" }
70-
- { php-version: "8.3", symfony-version: "7.1", phpunit-version: "11" }
71-
- { php-version: "8.3", symfony-version: "7.2", phpunit-version: "11" }
47+
- { php-version: "8.3", symfony-version: "7.4", phpunit-version: "11" }
7248

73-
- { php-version: "8.4", symfony-version: "7.0", phpunit-version: "11" }
74-
- { php-version: "8.4", symfony-version: "7.1", phpunit-version: "11" }
75-
- { php-version: "8.4", symfony-version: "7.2", phpunit-version: "11" }
49+
- { php-version: "8.4", symfony-version: "7.4", phpunit-version: "11" }
50+
- { php-version: "8.4", symfony-version: "8.0", phpunit-version: "11" }
7651

77-
#- { php-version: "8.3", symfony-version: "6.1", phpunit-version: "12" } # Apparently conflicts with nikic/php-parser
78-
#- { php-version: "8.3", symfony-version: "6.2", phpunit-version: "12" } # Apparently conflicts with nikic/php-parser
79-
- { php-version: "8.3", symfony-version: "6.3", phpunit-version: "12" }
52+
- { php-version: "8.5", symfony-version: "7.4", phpunit-version: "11" }
53+
- { php-version: "8.5", symfony-version: "8.0", phpunit-version: "11" }
54+
55+
# PHPUnit 12
8056
- { php-version: "8.3", symfony-version: "6.4", phpunit-version: "12" }
81-
- { php-version: "8.3", symfony-version: "7.0", phpunit-version: "12" }
82-
- { php-version: "8.3", symfony-version: "7.1", phpunit-version: "12" }
83-
- { php-version: "8.3", symfony-version: "7.2", phpunit-version: "12" }
57+
- { php-version: "8.3", symfony-version: "7.4", phpunit-version: "12" }
58+
59+
- { php-version: "8.4", symfony-version: "7.4", phpunit-version: "12" }
60+
- { php-version: "8.4", symfony-version: "8.0", phpunit-version: "12" }
8461

85-
- { php-version: "8.4", symfony-version: "7.0", phpunit-version: "12" }
86-
- { php-version: "8.4", symfony-version: "7.1", phpunit-version: "12" }
87-
- { php-version: "8.4", symfony-version: "7.2", phpunit-version: "12" }
62+
- { php-version: "8.5", symfony-version: "7.4", phpunit-version: "12" }
63+
- { php-version: "8.5", symfony-version: "8.0", phpunit-version: "12" }
8864

8965
name: PHP ${{ matrix.php-version }}, Symfony ${{ matrix.symfony-version }}, PHPUnit ${{ matrix.phpunit-version }}
9066
steps:

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## v1.2.2
2+
3+
* Add `FunctionalTestData->withFile()`
4+
* Add `FunctionalTestData->withRequestParameter()`
5+
16
## v1.2.1
27

38
* Ensure compatibility with PHPUnit 12.

docs/RequestData.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,29 @@ $testData = FunctionalTestData::withUrl('/')
6767
->withServerParameters('APP_ENV', 'test');
6868
```
6969

70-
Note: this part is experimental, and env vars processing differs depending on how you set them up in your project.
70+
## Request parameters
71+
72+
Will send these as Request parameters to the Symfony Client.
73+
74+
Symfony adds them to `$request->request` when using HttpFoundation (which is the default).
75+
76+
```php
77+
$testData = FunctionalTestData::withUrl('/')
78+
->withRequestParameter('some_data', 'value');
79+
```
80+
81+
## Files
82+
83+
Will send these as Files to the Symfony Client.
84+
85+
Remember that you muse an instance of the `Symfony\Component\HttpFoundation\File\File` class for this when using the default test client with Symfony.
86+
87+
Symfony adds them to `$request->files` when using HttpFoundation (which is the default).
88+
89+
```php
90+
$testData = FunctionalTestData::withUrl('/')
91+
->withFile('file_name', new UploadedFile('/tmp/filename.png', 'original_filename.png'));
92+
```
7193

7294
## Execute an action before making the actual HTTP request
7395

src/FunctionalSmokeTester.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ public function runFunctionalTest(FunctionalTestData $testData): void {
6161
$crawler = $client->request(
6262
$testData->getHttpMethod(),
6363
$testData->getUrl(),
64-
[],
65-
[],
64+
$testData->getRequestParameters(),
65+
$testData->getRequestFiles(),
6666
$serverParameters,
6767
$testData->getRequestPayload(),
6868
);

src/FunctionalTestData.php

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Pierstoval\SmokeTesting;
44

5+
use Symfony\Component\HttpFoundation\File\File;
56
use function count;
67

78
final class FunctionalTestData {
@@ -13,6 +14,10 @@ final class FunctionalTestData {
1314
private array $withHttpHeaders = [];
1415
private array $withServerParameters = [];
1516
private ?string $withPayload = null;
17+
private array $withRequestParameters = [];
18+
/** @var array<File> */
19+
private array $withFiles = [];
20+
1621
/** @var null|\Closure */
1722
private ?\Closure $callbackBeforeRequest = null;
1823

@@ -105,13 +110,35 @@ public function withServerParameters(string $name, string $value): self
105110
{
106111
$new = clone $this;
107112
if (isset($new->withServerParameters[$name])) {
108-
throw new \RuntimeException(sprintf('Request header "%s" is already defined in test data. Have you added it twice?', $name));
113+
throw new \RuntimeException(sprintf('Request header "%s" is already defined in test data. Have you mistakenly added it twice?', $name));
109114
}
110115
$new->withServerParameters[$name] = $value;
111116

112117
return $new;
113118
}
114119

120+
public function withRequestParameter(string $name, string $value): self
121+
{
122+
$new = clone $this;
123+
if (isset($new->withRequestParameters[$name])) {
124+
throw new \RuntimeException(sprintf('Request parameter "%s" is already defined in test data. Have you mistakenly added it twice?', $name));
125+
}
126+
$new->withRequestParameters[$name] = $value;
127+
128+
return $new;
129+
}
130+
131+
public function withFile(string $name, File $file): self
132+
{
133+
$new = clone $this;
134+
if (isset($new->withFiles[$name])) {
135+
throw new \RuntimeException(sprintf('Request file "%s" is already defined in test data. Have you mistakenly added it twice?', $name));
136+
}
137+
$new->withFiles[$name] = $file;
138+
139+
return $new;
140+
}
141+
115142
public function expectRouteName(string $routeName): self
116143
{
117144
$new = clone $this;
@@ -229,6 +256,16 @@ public function getRequestPayload(): ?string
229256
return $this->withPayload;
230257
}
231258

259+
public function getRequestParameters(): array
260+
{
261+
return $this->withRequestParameters;
262+
}
263+
264+
public function getRequestFiles(): array
265+
{
266+
return $this->withFiles;
267+
}
268+
232269
public function getCallbackBeforeRequest(): ?\Closure
233270
{
234271
return $this->callbackBeforeRequest;

0 commit comments

Comments
 (0)