|
11 | 11 | use Josegonzalez\Upload\Model\Behavior\UploadBehavior; |
12 | 12 | use Josegonzalez\Upload\Test\Stub\ChildBehavior; |
13 | 13 | use Laminas\Diactoros\UploadedFile; |
| 14 | +use Psr\Http\Message\UploadedFileInterface; |
14 | 15 | use ReflectionClass; |
15 | 16 |
|
16 | 17 | class UploadBehaviorTest extends TestCase |
@@ -258,6 +259,40 @@ public function testBeforeMarshalEmptyAllowed() |
258 | 259 | $this->assertEquals(new ArrayObject($this->dataError), $data); |
259 | 260 | } |
260 | 261 |
|
| 262 | + public function testBeforeMarshalDataAsArray() |
| 263 | + { |
| 264 | + $validator = $this->getMockBuilder('Cake\Validation\Validator')->getMock(); |
| 265 | + $validator->expects($this->atLeastOnce()) |
| 266 | + ->method('isEmptyAllowed') |
| 267 | + ->will($this->returnValue(true)); |
| 268 | + |
| 269 | + $table = $this->getMockBuilder('Cake\ORM\Table')->getMock(); |
| 270 | + $table->expects($this->atLeastOnce()) |
| 271 | + ->method('getValidator') |
| 272 | + ->will($this->returnValue($validator)); |
| 273 | + |
| 274 | + $methods = array_diff($this->behaviorMethods, ['beforeMarshal']); |
| 275 | + $behavior = $this->getMockBuilder('Josegonzalez\Upload\Model\Behavior\UploadBehavior') |
| 276 | + ->onlyMethods($methods) |
| 277 | + ->setConstructorArgs([$table, $this->settings]) |
| 278 | + ->getMock(); |
| 279 | + $behavior->expects($this->any()) |
| 280 | + ->method('getConfig') |
| 281 | + ->will($this->returnValue($this->settings)); |
| 282 | + |
| 283 | + $data = new ArrayObject( |
| 284 | + $this->transformUploadedFilesToArray($this->dataOk) |
| 285 | + ); |
| 286 | + $behavior->beforeMarshal(new Event('fake.event'), $data, new ArrayObject()); |
| 287 | + $this->assertEquals(new ArrayObject($this->transformUploadedFilesToArray($this->dataOk)), $data); |
| 288 | + |
| 289 | + $data = new ArrayObject( |
| 290 | + $this->transformUploadedFilesToArray($this->dataError) |
| 291 | + ); |
| 292 | + $behavior->beforeMarshal(new Event('fake.event'), $data, new ArrayObject()); |
| 293 | + $this->assertEquals(new ArrayObject([]), $data); |
| 294 | + } |
| 295 | + |
261 | 296 | public function testBeforeSaveNoUpload() |
262 | 297 | { |
263 | 298 | $originalValue = rand(1000, 9999); |
@@ -763,4 +798,20 @@ public function testNameCallback() |
763 | 798 |
|
764 | 799 | $this->assertEquals($expected, $behavior->constructedFiles); |
765 | 800 | } |
| 801 | + |
| 802 | + private function transformUploadedFilesToArray(array $data): array |
| 803 | + { |
| 804 | + return array_map( |
| 805 | + function (UploadedFileInterface $file) { |
| 806 | + return [ |
| 807 | + 'tmp_name' => '', |
| 808 | + 'error' => $file->getError(), |
| 809 | + 'name' => $file->getClientFilename(), |
| 810 | + 'type' => $file->getClientMediaType(), |
| 811 | + 'size' => $file->getSize(), |
| 812 | + ]; |
| 813 | + }, |
| 814 | + $data |
| 815 | + ); |
| 816 | + } |
766 | 817 | } |
0 commit comments