‪TYPO3CMS  ‪main
FilesContentObjectTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
26 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
27 
28 final class ‪FilesContentObjectTest extends FunctionalTestCase
29 {
31 
33  'typo3/sysext/frontend/Tests/Functional/Fixtures/Images' => 'fileadmin/images',
34  'typo3/sysext/frontend/Tests/Functional/ContentObject/ImagesInStorage2' => 'storage2/images',
35  'typo3/sysext/frontend/Tests/Functional/ContentObject/ImagesInStorage3' => 'storage3/images',
36  ];
37 
38  protected function ‪setUp(): void
39  {
40  parent::setUp();
41  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
42  $this->importCSVDataSet(__DIR__ . '/DataSet/FilesContentObjectDataSet.csv');
43  $this->setUpBackendUser(1);
44  $contentObjectRenderer = GeneralUtility::getContainer()->get(ContentObjectRenderer::class);
45  $request = new ‪ServerRequest();
46  $contentObjectRenderer->setRequest($request);
47  $this->subject = $contentObjectRenderer->getContentObject('FILES');
48  }
49 
51  {
52  return [
53  'One file reference' => [
54  [
55  'references' => '1',
56  'renderObj' => 'TEXT',
57  'renderObj.' => [
58  'data' => 'file:current:name',
59  'wrap' => '<p>|</p>',
60  ],
61  ],
62  '<p>team-t3board10.jpg</p>',
63  ],
64  'One file reference with begin higher than allowed' => [
65  [
66  'references' => '1',
67  'begin' => '1',
68  'renderObj' => 'TEXT',
69  'renderObj.' => [
70  'data' => 'file:current:name',
71  'wrap' => '<p>|</p>',
72  ],
73  ],
74  '',
75  ],
76  'One file reference with maxItems higher than allowed' => [
77  [
78  'references' => '1',
79  'maxItems' => '2',
80  'renderObj' => 'TEXT',
81  'renderObj.' => [
82  'data' => 'file:current:name',
83  'wrap' => '<p>|</p>',
84  ],
85  ],
86  '<p>team-t3board10.jpg</p>',
87  ],
88  'Multiple file references' => [
89  [
90  'references' => '1,2,3',
91  'renderObj' => 'TEXT',
92  'renderObj.' => [
93  'data' => 'file:current:name',
94  'wrap' => '<p>|</p>',
95  ],
96  ],
97  '<p>team-t3board10.jpg</p><p>kasper-skarhoj1.jpg</p><p>typo3-logo.png</p>',
98  ],
99  'Multiple file references with begin' => [
100  [
101  'references' => '1,2,3',
102  'begin' => '1',
103  'renderObj' => 'TEXT',
104  'renderObj.' => [
105  'data' => 'file:current:name',
106  'wrap' => '<p>|</p>',
107  ],
108  ],
109  '<p>kasper-skarhoj1.jpg</p><p>typo3-logo.png</p>',
110  ],
111  'Multiple file references with negative begin' => [
112  [
113  'references' => '1,2,3',
114  'begin' => '-1',
115  'renderObj' => 'TEXT',
116  'renderObj.' => [
117  'data' => 'file:current:name',
118  'wrap' => '<p>|</p>',
119  ],
120  ],
121  '<p>team-t3board10.jpg</p><p>kasper-skarhoj1.jpg</p><p>typo3-logo.png</p>',
122  ],
123  'Multiple file references with maxItems' => [
124  [
125  'references' => '1,2,3',
126  'maxItems' => '2',
127  'renderObj' => 'TEXT',
128  'renderObj.' => [
129  'data' => 'file:current:name',
130  'wrap' => '<p>|</p>',
131  ],
132  ],
133  '<p>team-t3board10.jpg</p><p>kasper-skarhoj1.jpg</p>',
134  ],
135  'Multiple file references with negative maxItems' => [
136  [
137  'references' => '1,2,3',
138  'maxItems' => '-2',
139  'renderObj' => 'TEXT',
140  'renderObj.' => [
141  'data' => 'file:current:name',
142  'wrap' => '<p>|</p>',
143  ],
144  ],
145  '',
146  ],
147  'Multiple file references with begin and maxItems' => [
148  [
149  'references' => '1,2,3',
150  'begin' => '1',
151  'maxItems' => '1',
152  'renderObj' => 'TEXT',
153  'renderObj.' => [
154  'data' => 'file:current:name',
155  'wrap' => '<p>|</p>',
156  ],
157  ],
158  '<p>kasper-skarhoj1.jpg</p>',
159  ],
160  'Multiple file references unsorted' => [
161  [
162  'references' => '1,3,2',
163  'renderObj' => 'TEXT',
164  'renderObj.' => [
165  'data' => 'file:current:name',
166  'wrap' => '<p>|</p>',
167  ],
168  ],
169  '<p>team-t3board10.jpg</p><p>typo3-logo.png</p><p>kasper-skarhoj1.jpg</p>',
170  ],
171  'Multiple file references sorted by name' => [
172  [
173  'references' => '3,1,2',
174  'sorting' => 'name',
175  'renderObj' => 'TEXT',
176  'renderObj.' => [
177  'data' => 'file:current:name',
178  'wrap' => '<p>|</p>',
179  ],
180  ],
181  '<p>kasper-skarhoj1.jpg</p><p>team-t3board10.jpg</p><p>typo3-logo.png</p>',
182  ],
183  ];
184  }
185 
186  #[DataProvider('renderReturnsFilesForFileReferencesDataProvider')]
187  #[Test]
188  public function ‪renderReturnsFilesForFileReferences(array $configuration, string $expected): void
189  {
190  self::assertSame($expected, $this->subject->render($configuration));
191  }
192 
193  public static function ‪renderReturnsFilesForFilesDataProvider(): array
194  {
195  return [
196  'One file' => [
197  [
198  'files' => '1',
199  'renderObj' => 'TEXT',
200  'renderObj.' => [
201  'data' => 'file:current:name',
202  'wrap' => '<p>|</p>',
203  ],
204  ],
205  '<p>team-t3board10.jpg</p>',
206  ],
207  'One file with begin higher than allowed' => [
208  [
209  'files' => '1',
210  'begin' => '1',
211  'renderObj' => 'TEXT',
212  'renderObj.' => [
213  'data' => 'file:current:name',
214  'wrap' => '<p>|</p>',
215  ],
216  ],
217  '',
218  ],
219  'One file with maxItems higher than allowed' => [
220  [
221  'files' => '1',
222  'maxItems' => '2',
223  'renderObj' => 'TEXT',
224  'renderObj.' => [
225  'data' => 'file:current:name',
226  'wrap' => '<p>|</p>',
227  ],
228  ],
229  '<p>team-t3board10.jpg</p>',
230  ],
231  'Multiple files' => [
232  [
233  'files' => '1,2,3',
234  'renderObj' => 'TEXT',
235  'renderObj.' => [
236  'data' => 'file:current:name',
237  'wrap' => '<p>|</p>',
238  ],
239  ],
240  '<p>team-t3board10.jpg</p><p>kasper-skarhoj1.jpg</p><p>typo3-logo.png</p>',
241  ],
242  'Multiple files with begin' => [
243  [
244  'files' => '1,2,3',
245  'begin' => '1',
246  'renderObj' => 'TEXT',
247  'renderObj.' => [
248  'data' => 'file:current:name',
249  'wrap' => '<p>|</p>',
250  ],
251  ],
252  '<p>kasper-skarhoj1.jpg</p><p>typo3-logo.png</p>',
253  ],
254  'Multiple files with negative begin' => [
255  [
256  'files' => '1,2,3',
257  'begin' => '-1',
258  'renderObj' => 'TEXT',
259  'renderObj.' => [
260  'data' => 'file:current:name',
261  'wrap' => '<p>|</p>',
262  ],
263  ],
264  '<p>team-t3board10.jpg</p><p>kasper-skarhoj1.jpg</p><p>typo3-logo.png</p>',
265  ],
266  'Multiple files with maxItems' => [
267  [
268  'files' => '1,2,3',
269  'maxItems' => '2',
270  'renderObj' => 'TEXT',
271  'renderObj.' => [
272  'data' => 'file:current:name',
273  'wrap' => '<p>|</p>',
274  ],
275  ],
276  '<p>team-t3board10.jpg</p><p>kasper-skarhoj1.jpg</p>',
277  ],
278  'Multiple files with negative maxItems' => [
279  [
280  'files' => '1,2,3',
281  'maxItems' => '-2',
282  'renderObj' => 'TEXT',
283  'renderObj.' => [
284  'data' => 'file:current:name',
285  'wrap' => '<p>|</p>',
286  ],
287  ],
288  '',
289  ],
290  'Multiple files with begin and maxItems' => [
291  [
292  'files' => '1,2,3',
293  'begin' => '1',
294  'maxItems' => '1',
295  'renderObj' => 'TEXT',
296  'renderObj.' => [
297  'data' => 'file:current:name',
298  'wrap' => '<p>|</p>',
299  ],
300  ],
301  '<p>kasper-skarhoj1.jpg</p>',
302  ],
303  'Multiple files unsorted' => [
304  [
305  'files' => '1,3,2',
306  'renderObj' => 'TEXT',
307  'renderObj.' => [
308  'data' => 'file:current:name',
309  'wrap' => '<p>|</p>',
310  ],
311  ],
312  '<p>team-t3board10.jpg</p><p>typo3-logo.png</p><p>kasper-skarhoj1.jpg</p>',
313  ],
314  'Multiple files sorted by name' => [
315  [
316  'files' => '3,1,2',
317  'sorting' => 'name',
318  'renderObj' => 'TEXT',
319  'renderObj.' => [
320  'data' => 'file:current:name',
321  'wrap' => '<p>|</p>',
322  ],
323  ],
324  '<p>kasper-skarhoj1.jpg</p><p>team-t3board10.jpg</p><p>typo3-logo.png</p>',
325  ],
326  ];
327  }
328 
329  #[DataProvider('renderReturnsFilesForFilesDataProvider')]
330  #[Test]
331  public function ‪renderReturnsFilesForFiles(array $configuration, string $expected): void
332  {
333  self::assertSame($expected, $this->subject->render($configuration));
334  }
335 
336  public static function ‪renderReturnsFilesForCollectionsDataProvider(): array
337  {
338  return [
339  'One collection' => [
340  [
341  'collections' => '1',
342  'renderObj' => 'TEXT',
343  'renderObj.' => [
344  'data' => 'file:current:name',
345  'wrap' => '<p>|</p>',
346  ],
347  ],
348  '<p>team-t3board10.jpg</p><p>kasper-skarhoj1.jpg</p><p>typo3-logo.png</p>',
349  ],
350  'One collection with begin' => [
351  [
352  'collections' => '1',
353  'begin' => '1',
354  'renderObj' => 'TEXT',
355  'renderObj.' => [
356  'data' => 'file:current:name',
357  'wrap' => '<p>|</p>',
358  ],
359  ],
360  '<p>kasper-skarhoj1.jpg</p><p>typo3-logo.png</p>',
361  ],
362  'One collection with begin higher than allowed' => [
363  [
364  'collections' => '1',
365  'begin' => '3',
366  'renderObj' => 'TEXT',
367  'renderObj.' => [
368  'data' => 'file:current:name',
369  'wrap' => '<p>|</p>',
370  ],
371  ],
372  '',
373  ],
374  'One collection with maxItems' => [
375  [
376  'collections' => '1',
377  'maxItems' => '2',
378  'renderObj' => 'TEXT',
379  'renderObj.' => [
380  'data' => 'file:current:name',
381  'wrap' => '<p>|</p>',
382  ],
383  ],
384  '<p>team-t3board10.jpg</p><p>kasper-skarhoj1.jpg</p>',
385  ],
386  'One collection with maxItems higher than allowed' => [
387  [
388  'collections' => '1',
389  'maxItems' => '4',
390  'renderObj' => 'TEXT',
391  'renderObj.' => [
392  'data' => 'file:current:name',
393  'wrap' => '<p>|</p>',
394  ],
395  ],
396  '<p>team-t3board10.jpg</p><p>kasper-skarhoj1.jpg</p><p>typo3-logo.png</p>',
397  ],
398  'One collections with begin and maxItems' => [
399  [
400  'collections' => '1',
401  'begin' => '1',
402  'maxItems' => '1',
403  'renderObj' => 'TEXT',
404  'renderObj.' => [
405  'data' => 'file:current:name',
406  'wrap' => '<p>|</p>',
407  ],
408  ],
409  '<p>kasper-skarhoj1.jpg</p>',
410  ],
411  'Multiple collections' => [
412  [
413  'collections' => '1,2,3',
414  'renderObj' => 'TEXT',
415  'renderObj.' => [
416  'data' => 'file:current:name',
417  'wrap' => '<p>|</p>',
418  ],
419  ],
420  '<p>team-t3board10.jpg</p><p>kasper-skarhoj1.jpg</p><p>typo3-logo.png</p><p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p><p>file7.jpg</p><p>file8.jpg</p><p>file9.jpg</p>',
421  ],
422  'Multiple collections with begin' => [
423  [
424  'collections' => '1,2,3',
425  'begin' => '3',
426  'renderObj' => 'TEXT',
427  'renderObj.' => [
428  'data' => 'file:current:name',
429  'wrap' => '<p>|</p>',
430  ],
431  ],
432  '<p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p><p>file7.jpg</p><p>file8.jpg</p><p>file9.jpg</p>',
433  ],
434  'Multiple collections with negative begin' => [
435  [
436  'collections' => '1,2,3',
437  'begin' => '-3',
438  'renderObj' => 'TEXT',
439  'renderObj.' => [
440  'data' => 'file:current:name',
441  'wrap' => '<p>|</p>',
442  ],
443  ],
444  '<p>team-t3board10.jpg</p><p>kasper-skarhoj1.jpg</p><p>typo3-logo.png</p><p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p><p>file7.jpg</p><p>file8.jpg</p><p>file9.jpg</p>',
445  ],
446  'Multiple collections with maxItems' => [
447  [
448  'collections' => '1,2,3',
449  'maxItems' => '5',
450  'renderObj' => 'TEXT',
451  'renderObj.' => [
452  'data' => 'file:current:name',
453  'wrap' => '<p>|</p>',
454  ],
455  ],
456  '<p>team-t3board10.jpg</p><p>kasper-skarhoj1.jpg</p><p>typo3-logo.png</p><p>file4.jpg</p><p>file5.jpg</p>',
457  ],
458  'Multiple collections with negative maxItems' => [
459  [
460  'collections' => '1,2,3',
461  'maxItems' => '-5',
462  'renderObj' => 'TEXT',
463  'renderObj.' => [
464  'data' => 'file:current:name',
465  'wrap' => '<p>|</p>',
466  ],
467  ],
468  '',
469  ],
470  'Multiple collections with begin and maxItems' => [
471  [
472  'collections' => '1,2,3',
473  'begin' => '4',
474  'maxItems' => '3',
475  'renderObj' => 'TEXT',
476  'renderObj.' => [
477  'data' => 'file:current:name',
478  'wrap' => '<p>|</p>',
479  ],
480  ],
481  '<p>file5.jpg</p><p>file6.jpg</p><p>file7.jpg</p>',
482  ],
483  'Multiple collections unsorted' => [
484  [
485  'collections' => '1,3,2',
486  'renderObj' => 'TEXT',
487  'renderObj.' => [
488  'data' => 'file:current:name',
489  'wrap' => '<p>|</p>',
490  ],
491  ],
492  '<p>team-t3board10.jpg</p><p>kasper-skarhoj1.jpg</p><p>typo3-logo.png</p><p>file7.jpg</p><p>file8.jpg</p><p>file9.jpg</p><p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p>',
493  ],
494  'Multiple collections sorted by name' => [
495  [
496  'collections' => '3,1,2',
497  'sorting' => 'name',
498  'renderObj' => 'TEXT',
499  'renderObj.' => [
500  'data' => 'file:current:name',
501  'wrap' => '<p>|</p>',
502  ],
503  ],
504  '<p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p><p>file7.jpg</p><p>file8.jpg</p><p>file9.jpg</p><p>kasper-skarhoj1.jpg</p><p>team-t3board10.jpg</p><p>typo3-logo.png</p>',
505  ],
506  ];
507  }
508 
509  #[DataProvider('renderReturnsFilesForCollectionsDataProvider')]
510  #[Test]
511  public function ‪renderReturnsFilesForCollections(array $configuration, string $expected): void
512  {
513  self::assertSame($expected, $this->subject->render($configuration));
514  }
515 
516  public static function ‪renderReturnsFilesForFoldersDataProvider(): array
517  {
518  return [
519  'One folder' => [
520  [
521  'folders' => '1:images/',
522  'renderObj' => 'TEXT',
523  'renderObj.' => [
524  'data' => 'file:current:name',
525  'wrap' => '<p>|</p>',
526  ],
527  ],
528  '<p>kasper-skarhoj1.jpg</p><p>team-t3board10.jpg</p><p>typo3-logo.png</p>',
529  ],
530  'One folder with begin' => [
531  [
532  'folders' => '1:images/',
533  'begin' => '1',
534  'renderObj' => 'TEXT',
535  'renderObj.' => [
536  'data' => 'file:current:name',
537  'wrap' => '<p>|</p>',
538  ],
539  ],
540  '<p>team-t3board10.jpg</p><p>typo3-logo.png</p>',
541  ],
542  'One folder with begin higher than allowed' => [
543  [
544  'folders' => '1:images/',
545  'begin' => '3',
546  'renderObj' => 'TEXT',
547  'renderObj.' => [
548  'data' => 'file:current:name',
549  'wrap' => '<p>|</p>',
550  ],
551  ],
552  '',
553  ],
554  'One folder with maxItems' => [
555  [
556  'folders' => '1:images/',
557  'maxItems' => '2',
558  'renderObj' => 'TEXT',
559  'renderObj.' => [
560  'data' => 'file:current:name',
561  'wrap' => '<p>|</p>',
562  ],
563  ],
564  '<p>kasper-skarhoj1.jpg</p><p>team-t3board10.jpg</p>',
565  ],
566  'One folder with maxItems higher than allowed' => [
567  [
568  'folders' => '1:images/',
569  'maxItems' => '4',
570  'renderObj' => 'TEXT',
571  'renderObj.' => [
572  'data' => 'file:current:name',
573  'wrap' => '<p>|</p>',
574  ],
575  ],
576  '<p>kasper-skarhoj1.jpg</p><p>team-t3board10.jpg</p><p>typo3-logo.png</p>',
577  ],
578  'One folder with begin and maxItems' => [
579  [
580  'folders' => '1:images/',
581  'begin' => '1',
582  'maxItems' => '1',
583  'renderObj' => 'TEXT',
584  'renderObj.' => [
585  'data' => 'file:current:name',
586  'wrap' => '<p>|</p>',
587  ],
588  ],
589  '<p>team-t3board10.jpg</p>',
590  ],
591  'Multiple folders' => [
592  [
593  'folders' => '1:images/,2:images/,3:images/',
594  'renderObj' => 'TEXT',
595  'renderObj.' => [
596  'data' => 'file:current:name',
597  'wrap' => '<p>|</p>',
598  ],
599  ],
600  '<p>kasper-skarhoj1.jpg</p><p>team-t3board10.jpg</p><p>typo3-logo.png</p><p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p><p>file7.jpg</p><p>file8.jpg</p><p>file9.jpg</p>',
601  ],
602  'Multiple folders with begin' => [
603  [
604  'folders' => '1:images/,2:images/,3:images/',
605  'begin' => '3',
606  'renderObj' => 'TEXT',
607  'renderObj.' => [
608  'data' => 'file:current:name',
609  'wrap' => '<p>|</p>',
610  ],
611  ],
612  '<p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p><p>file7.jpg</p><p>file8.jpg</p><p>file9.jpg</p>',
613  ],
614  'Multiple folders with negative begin' => [
615  [
616  'folders' => '1:images/,2:images/,3:images/',
617  'begin' => '-3',
618  'renderObj' => 'TEXT',
619  'renderObj.' => [
620  'data' => 'file:current:name',
621  'wrap' => '<p>|</p>',
622  ],
623  ],
624  '<p>kasper-skarhoj1.jpg</p><p>team-t3board10.jpg</p><p>typo3-logo.png</p><p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p><p>file7.jpg</p><p>file8.jpg</p><p>file9.jpg</p>',
625  ],
626  'Multiple folders with maxItems' => [
627  [
628  'folders' => '1:images/,2:images/,3:images/',
629  'maxItems' => '5',
630  'renderObj' => 'TEXT',
631  'renderObj.' => [
632  'data' => 'file:current:name',
633  'wrap' => '<p>|</p>',
634  ],
635  ],
636  '<p>kasper-skarhoj1.jpg</p><p>team-t3board10.jpg</p><p>typo3-logo.png</p><p>file4.jpg</p><p>file5.jpg</p>',
637  ],
638  'Multiple folders with negative maxItems' => [
639  [
640  'folders' => '1:images/,2:images/,3:images/',
641  'maxItems' => '-5',
642  'renderObj' => 'TEXT',
643  'renderObj.' => [
644  'data' => 'file:current:name',
645  'wrap' => '<p>|</p>',
646  ],
647  ],
648  '',
649  ],
650  'Multiple folders with begin and maxItems' => [
651  [
652  'folders' => '1:images/,2:images/,3:images/',
653  'begin' => '4',
654  'maxItems' => '3',
655  'renderObj' => 'TEXT',
656  'renderObj.' => [
657  'data' => 'file:current:name',
658  'wrap' => '<p>|</p>',
659  ],
660  ],
661  '<p>file5.jpg</p><p>file6.jpg</p><p>file7.jpg</p>',
662  ],
663  'Multiple folders unsorted' => [
664  [
665  'folders' => '1:images/,3:images/,2:images/',
666  'renderObj' => 'TEXT',
667  'renderObj.' => [
668  'data' => 'file:current:name',
669  'wrap' => '<p>|</p>',
670  ],
671  ],
672  '<p>kasper-skarhoj1.jpg</p><p>team-t3board10.jpg</p><p>typo3-logo.png</p><p>file7.jpg</p><p>file8.jpg</p><p>file9.jpg</p><p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p>',
673  ],
674  'Multiple folders sorted by name' => [
675  [
676  'folders' => '3:images/,1:images/,2:images/',
677  'sorting' => 'name',
678  'renderObj' => 'TEXT',
679  'renderObj.' => [
680  'data' => 'file:current:name',
681  'wrap' => '<p>|</p>',
682  ],
683  ],
684  '<p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p><p>file7.jpg</p><p>file8.jpg</p><p>file9.jpg</p><p>kasper-skarhoj1.jpg</p><p>team-t3board10.jpg</p><p>typo3-logo.png</p>',
685  ],
686  'Multiple folders recursively' => [
687  [
688  'folders' => '2:images/',
689  'folders.' => [
690  'recursive' => '1',
691  ],
692  'renderObj' => 'TEXT',
693  'renderObj.' => [
694  'data' => 'file:current:name',
695  'wrap' => '<p>|</p>',
696  ],
697  ],
698  '<p>afilesub1.jpg</p><p>afilesub2.jpg</p><p>afilesub3.jpg</p><p>bfilesub1.jpg</p><p>bfilesub2.jpg</p><p>bfilesub3.jpg</p><p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p>',
699  ],
700  'Multiple folders recursively, sorted by name' => [
701  [
702  'folders' => '2:images/',
703  'folders.' => [
704  'recursive' => '1',
705  ],
706  'sorting' => 'name',
707  'renderObj' => 'TEXT',
708  'renderObj.' => [
709  'data' => 'file:current:name',
710  'wrap' => '<p>|</p>',
711  ],
712  ],
713  '<p>afilesub1.jpg</p><p>afilesub2.jpg</p><p>afilesub3.jpg</p><p>bfilesub1.jpg</p><p>bfilesub2.jpg</p><p>bfilesub3.jpg</p><p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p>',
714  ],
715  ];
716  }
717 
718  #[DataProvider('renderReturnsFilesForFoldersDataProvider')]
719  #[Test]
720  public function ‪renderReturnsFilesForFolders(array $configuration, string $expected): void
721  {
722  self::assertSame($expected, $this->subject->render($configuration));
723  }
724 
725  public static function ‪renderReturnsFilesForReferencesAsArrayDataProvider(): iterable
726  {
727  yield 'references option as array with nothing provided returns nothing' => [
728  'configuration' => [
729  'references.' => [
730  'fieldName' => '',
731  ],
732  'renderObj' => 'TEXT',
733  'renderObj.' => [
734  'data' => 'file:current:name',
735  'wrap' => '<p>|</p>',
736  ],
737  ],
738  'data' => [],
739  'table' => 'tt_content',
740  'expected' => '',
741  ];
742 
743  yield 'references option as array and field name provided takes row of current data' => [
744  'configuration' => [
745  'references.' => [
746  'fieldName' => 'image',
747  ],
748  'renderObj' => 'TEXT',
749  'renderObj.' => [
750  'data' => 'file:current:name',
751  'wrap' => '<p>|</p>',
752  ],
753  ],
754  'data' => [
755  'uid' => 298,
756  'image' => 3,
757  ],
758  'table' => 'tt_content',
759  'expected' => '<p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p>',
760  ];
761 
762  yield 'references option as array with uid provided overrides current uid, but uses same current table' => [
763  'configuration' => [
764  'references.' => [
765  'fieldName' => 'image',
766  'uid' => '297',
767  ],
768  'renderObj' => 'TEXT',
769  'renderObj.' => [
770  'data' => 'file:current:name',
771  'wrap' => '<p>|</p>',
772  ],
773  ],
774  'data' => [
775  'uid' => 298,
776  'image' => 3,
777  ],
778  'table' => 'tt_content',
779  'expected' => '<p>team-t3board10.jpg</p><p>kasper-skarhoj1.jpg</p><p>typo3-logo.png</p>',
780  ];
781 
782  yield 'references option as array with uid and table provided ignores current data completely' => [
783  'configuration' => [
784  'references.' => [
785  'fieldName' => 'media',
786  'uid' => '1',
787  'table' => 'pages',
788  ],
789  'renderObj' => 'TEXT',
790  'renderObj.' => [
791  'data' => 'file:current:name',
792  'wrap' => '<p>|</p>',
793  ],
794  ],
795  'data' => [
796  'uid' => 298,
797  'image' => 3,
798  ],
799  'table' => 'tt_content',
800  'expected' => '<p>file7.jpg</p>',
801  ];
802 
803  yield 'references option as array where uid results in nothing, falls back to current data' => [
804  'configuration' => [
805  'references.' => [
806  'fieldName' => 'image',
807  'uid.' => [
808  'field' => 'not_existing_field',
809  ],
810  ],
811  'renderObj' => 'TEXT',
812  'renderObj.' => [
813  'data' => 'file:current:name',
814  'wrap' => '<p>|</p>',
815  ],
816  ],
817  'data' => [
818  'uid' => 298,
819  'image' => 3,
820  ],
821  'table' => 'tt_content',
822  'expected' => '<p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p>',
823  ];
824 
825  yield 'references option as array where table results in nothing, falls back to current data' => [
826  'configuration' => [
827  'references.' => [
828  'fieldName' => 'image',
829  'table' => '',
830  ],
831  'renderObj' => 'TEXT',
832  'renderObj.' => [
833  'data' => 'file:current:name',
834  'wrap' => '<p>|</p>',
835  ],
836  ],
837  'data' => [
838  'uid' => 298,
839  'image' => 3,
840  ],
841  'table' => 'tt_content',
842  'expected' => '<p>file4.jpg</p><p>file5.jpg</p><p>file6.jpg</p>',
843  ];
844  }
845 
846  #[DataProvider('renderReturnsFilesForReferencesAsArrayDataProvider')]
847  #[Test]
848  public function ‪renderReturnsFilesForReferencesAsArray(array $configuration, array $data, string $table, string $expected): void
849  {
850  $this->subject->getContentObjectRenderer()->start($data, $table);
851  self::assertSame($expected, $this->subject->render($configuration));
852  }
853 }
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject\FilesContentObjectTest\$subject
‪AbstractContentObject $subject
Definition: FilesContentObjectTest.php:30
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject\FilesContentObjectTest
Definition: FilesContentObjectTest.php:29
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject\FilesContentObjectTest\renderReturnsFilesForFiles
‪renderReturnsFilesForFiles(array $configuration, string $expected)
Definition: FilesContentObjectTest.php:331
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject\FilesContentObjectTest\renderReturnsFilesForFileReferencesDataProvider
‪static renderReturnsFilesForFileReferencesDataProvider()
Definition: FilesContentObjectTest.php:50
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject\FilesContentObjectTest\setUp
‪setUp()
Definition: FilesContentObjectTest.php:38
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject\FilesContentObjectTest\renderReturnsFilesForReferencesAsArrayDataProvider
‪static renderReturnsFilesForReferencesAsArrayDataProvider()
Definition: FilesContentObjectTest.php:725
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject\FilesContentObjectTest\renderReturnsFilesForFolders
‪renderReturnsFilesForFolders(array $configuration, string $expected)
Definition: FilesContentObjectTest.php:720
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject\FilesContentObjectTest\$pathsToProvideInTestInstance
‪array $pathsToProvideInTestInstance
Definition: FilesContentObjectTest.php:32
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject\FilesContentObjectTest\renderReturnsFilesForFilesDataProvider
‪static renderReturnsFilesForFilesDataProvider()
Definition: FilesContentObjectTest.php:193
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:39
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject\FilesContentObjectTest\renderReturnsFilesForCollections
‪renderReturnsFilesForCollections(array $configuration, string $expected)
Definition: FilesContentObjectTest.php:511
‪TYPO3\CMS\Frontend\ContentObject\AbstractContentObject
Definition: AbstractContentObject.php:31
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject\FilesContentObjectTest\renderReturnsFilesForReferencesAsArray
‪renderReturnsFilesForReferencesAsArray(array $configuration, array $data, string $table, string $expected)
Definition: FilesContentObjectTest.php:848
‪TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
Definition: ContentObjectRenderer.php:102
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject
Definition: ContentContentObjectTest.php:18
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject\FilesContentObjectTest\renderReturnsFilesForCollectionsDataProvider
‪static renderReturnsFilesForCollectionsDataProvider()
Definition: FilesContentObjectTest.php:336
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject\FilesContentObjectTest\renderReturnsFilesForFileReferences
‪renderReturnsFilesForFileReferences(array $configuration, string $expected)
Definition: FilesContentObjectTest.php:188
‪TYPO3\CMS\Frontend\Tests\Functional\ContentObject\FilesContentObjectTest\renderReturnsFilesForFoldersDataProvider
‪static renderReturnsFilesForFoldersDataProvider()
Definition: FilesContentObjectTest.php:516