Skip to content

Commit f597bbe

Browse files
committed
♻️ FileInjector
1 parent 5fa0379 commit f597bbe

File tree

3 files changed

+68
-31
lines changed

3 files changed

+68
-31
lines changed

docs/index.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ services:
135135
In forms with more than a field of the same type, use `self::getImageFile('1')`, `self::getImageFile('2')`, etc.
136136
You can also use `self::getFile('0', $data, 'png', 'image/png')` and pass directly your file data.
137137

138+
💡 ** Bonus** The above methods are shortcuts for the `Beelab\TestBundle\File\FileInjector` class, so you
139+
can use them in your fixtures, too. Import the class and use `FileInjector::getFile()` etc.
140+
138141
* Form values shortcut
139142

140143
If you need to retrieve the value of a form field, you can use `self::getFormValue('form_field')`.

src/File/FileInjector.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
namespace Beelab\TestBundle\File;
4+
5+
use Symfony\Component\HttpFoundation\File\UploadedFile;
6+
7+
final class FileInjector
8+
{
9+
public static function getFile(string $file, string $data, string $ext, string $mime): UploadedFile
10+
{
11+
$name = 'file_'.$file.'.'.$ext;
12+
$path = \tempnam(\sys_get_temp_dir(), 'sf_test_').$name;
13+
\file_put_contents($path, \str_starts_with($mime, 'text') ? $data : \base64_decode($data));
14+
15+
return new UploadedFile($path, $name, $mime);
16+
}
17+
18+
public static function getImageFile(string $file = '0'): UploadedFile
19+
{
20+
$data = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVQI12P4//8/AAX+Av7czFnnAAAAAElFTkSuQmCC';
21+
22+
return self::getFile($file, $data, 'png', 'image/png');
23+
}
24+
25+
public static function getPdfFile(string $file = '0'): UploadedFile
26+
{
27+
$data = <<<'EOF'
28+
JVBERi0xLjEKJcKlwrHDqwoKMSAwIG9iagogIDw8IC9UeXBlIC9DYXRhbG9nCiAgICAgL1BhZ2VzIDIgMCBSCiAgPj4KZW5kb2JqCgoyIDAgb2JqCiAgP
29+
DwgL1R5cGUgL1BhZ2VzCiAgICAgL0tpZHMgWzMgMCBSXQogICAgIC9Db3VudCAxCiAgICAgL01lZGlhQm94IFswIDAgMzAwIDE0NF0KICA+PgplbmRvYm
30+
oKCjMgMCBvYmoKICA8PCAgL1R5cGUgL1BhZ2UKICAgICAgL1BhcmVudCAyIDAgUgogICAgICAvUmVzb3VyY2VzCiAgICAgICA8PCAvRm9udAogICAgICA
31+
gICAgIDw8IC9GMQogICAgICAgICAgICAgICA8PCAvVHlwZSAvRm9udAogICAgICAgICAgICAgICAgICAvU3VidHlwZSAvVHlwZTEKICAgICAgICAgICAg
32+
ICAgICAgL0Jhc2VGb250IC9UaW1lcy1Sb21hbgogICAgICAgICAgICAgICA+PgogICAgICAgICAgID4+CiAgICAgICA+PgogICAgICAvQ29udGVudHMgN
33+
CAwIFIKICA+PgplbmRvYmoKCjQgMCBvYmoKICA8PCAvTGVuZ3RoIDU1ID4+CnN0cmVhbQogIEJUCiAgICAvRjEgMTggVGYKICAgIDAgMCBUZAogICAgKE
34+
hlbGxvIFdvcmxkKSBUagogIEVUCmVuZHN0cmVhbQplbmRvYmoKCnhyZWYKMCA1CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxOCAwMDAwMCBuIAo
35+
wMDAwMDAwMDc3IDAwMDAwIG4gCjAwMDAwMDAxNzggMDAwMDAgbiAKMDAwMDAwMDQ1NyAwMDAwMCBuIAp0cmFpbGVyCiAgPDwgIC9Sb290IDEgMCBSCiAg
36+
ICAgIC9TaXplIDUKICA+PgpzdGFydHhyZWYKNTY1CiUlRU9GCg==
37+
EOF;
38+
39+
return self::getFile($file, $data, 'pdf', 'application/pdf');
40+
}
41+
42+
public static function getTxtFile(string $file = '0'): UploadedFile
43+
{
44+
$data = 'Lorem ipsum dolor sit amet';
45+
46+
return self::getFile($file, $data, 'txt', 'text/plain');
47+
}
48+
49+
public static function getZipFile(string $file = '0'): UploadedFile
50+
{
51+
$data = <<<'EOF'
52+
UEsDBAoAAgAAAM5RjEVOGigMAgAAAAIAAAAFABwAaC50eHRVVAkAA/OxilTzsYpUdXgLAAEE6AMAAARkAAAAaApQSwECHgMKAAIAAADOUYxF
53+
ThooDAIAAAACAAAABQAYAAAAAAABAAAApIEAAAAAaC50eHRVVAUAA/OxilR1eAsAAQToAwAABGQAAABQSwUGAAAAAAEAAQBLAAAAQQAAAAAA
54+
EOF;
55+
56+
return self::getFile($file, $data, 'zip', 'application/zip');
57+
}
58+
}

src/Test/WebTestCase.php

Lines changed: 7 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Beelab\TestBundle\Test;
44

5+
use Beelab\TestBundle\File\FileInjector;
56
use Doctrine\Common\DataFixtures\AbstractFixture;
67
use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
78
use Doctrine\Common\DataFixtures\Loader;
@@ -118,52 +119,31 @@ protected static function login(string $username = '[email protected]', ?string
118119
*/
119120
protected static function getImageFile(string $file = '0'): UploadedFile
120121
{
121-
$data = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVQI12P4//8/AAX+Av7czFnnAAAAAElFTkSuQmCC';
122-
123-
return self::getFile($file, $data, 'png', 'image/png');
122+
return FileInjector::getImageFile($file);
124123
}
125124

126125
/**
127126
* Get a pdf file to be used in a form.
128127
*/
129128
protected static function getPdfFile(string $file = '0'): UploadedFile
130129
{
131-
$data = <<<'EOF'
132-
JVBERi0xLjEKJcKlwrHDqwoKMSAwIG9iagogIDw8IC9UeXBlIC9DYXRhbG9nCiAgICAgL1BhZ2VzIDIgMCBSCiAgPj4KZW5kb2JqCgoyIDAgb2JqCiAgP
133-
DwgL1R5cGUgL1BhZ2VzCiAgICAgL0tpZHMgWzMgMCBSXQogICAgIC9Db3VudCAxCiAgICAgL01lZGlhQm94IFswIDAgMzAwIDE0NF0KICA+PgplbmRvYm
134-
oKCjMgMCBvYmoKICA8PCAgL1R5cGUgL1BhZ2UKICAgICAgL1BhcmVudCAyIDAgUgogICAgICAvUmVzb3VyY2VzCiAgICAgICA8PCAvRm9udAogICAgICA
135-
gICAgIDw8IC9GMQogICAgICAgICAgICAgICA8PCAvVHlwZSAvRm9udAogICAgICAgICAgICAgICAgICAvU3VidHlwZSAvVHlwZTEKICAgICAgICAgICAg
136-
ICAgICAgL0Jhc2VGb250IC9UaW1lcy1Sb21hbgogICAgICAgICAgICAgICA+PgogICAgICAgICAgID4+CiAgICAgICA+PgogICAgICAvQ29udGVudHMgN
137-
CAwIFIKICA+PgplbmRvYmoKCjQgMCBvYmoKICA8PCAvTGVuZ3RoIDU1ID4+CnN0cmVhbQogIEJUCiAgICAvRjEgMTggVGYKICAgIDAgMCBUZAogICAgKE
138-
hlbGxvIFdvcmxkKSBUagogIEVUCmVuZHN0cmVhbQplbmRvYmoKCnhyZWYKMCA1CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxOCAwMDAwMCBuIAo
139-
wMDAwMDAwMDc3IDAwMDAwIG4gCjAwMDAwMDAxNzggMDAwMDAgbiAKMDAwMDAwMDQ1NyAwMDAwMCBuIAp0cmFpbGVyCiAgPDwgIC9Sb290IDEgMCBSCiAg
140-
ICAgIC9TaXplIDUKICA+PgpzdGFydHhyZWYKNTY1CiUlRU9GCg==
141-
EOF;
142-
143-
return self::getFile($file, $data, 'pdf', 'application/pdf');
130+
return FileInjector::getPdfFile($file);
144131
}
145132

146133
/**
147134
* Get a pdf file to be used in a form.
148135
*/
149136
protected static function getZipFile(string $file = '0'): UploadedFile
150137
{
151-
$data = <<<'EOF'
152-
UEsDBAoAAgAAAM5RjEVOGigMAgAAAAIAAAAFABwAaC50eHRVVAkAA/OxilTzsYpUdXgLAAEE6AMAAARkAAAAaApQSwECHgMKAAIAAADOUYxF
153-
ThooDAIAAAACAAAABQAYAAAAAAABAAAApIEAAAAAaC50eHRVVAUAA/OxilR1eAsAAQToAwAABGQAAABQSwUGAAAAAAEAAQBLAAAAQQAAAAAA
154-
EOF;
155-
156-
return self::getFile($file, $data, 'zip', 'application/zip');
138+
return FileInjector::getZipFile($file);
157139
}
158140

159141
/**
160142
* Get a txt file to be used in a form.
161143
*/
162144
protected static function getTxtFile(string $file = '0'): UploadedFile
163145
{
164-
$data = 'Lorem ipsum dolor sit amet';
165-
166-
return self::getFile($file, $data, 'txt', 'text/plain');
146+
return FileInjector::getTxtFile($file);
167147
}
168148

169149
/**
@@ -271,15 +251,11 @@ protected function getReference(string $name): object
271251
*/
272252
protected static function getFile(string $file, string $data, string $ext, string $mime): UploadedFile
273253
{
274-
$name = 'file_'.$file.'.'.$ext;
275-
$path = \tempnam(\sys_get_temp_dir(), 'sf_test_').$name;
276-
\file_put_contents($path, \str_starts_with($mime, 'text') ? $data : \base64_decode($data));
277-
278-
return new UploadedFile($path, $name, $mime);
254+
return FileInjector::getFile($file, $data, $ext, $mime);
279255
}
280256

281257
/**
282-
* Submit a form that needs extra values (tipically, a form with collections).
258+
* Submit a form that needs extra values (typically, a form with collections).
283259
*
284260
* @param string $name The name of form
285261
* @param array $values The values to submit

0 commit comments

Comments
 (0)