‪TYPO3CMS  ‪main
ResourceStorageTest.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 
33 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
34 
38 class ‪ResourceStorageTest extends FunctionalTestCase
39 {
40  protected function ‪tearDown(): void
41  {
42  // cleanup manually created folders
43  foreach (glob(‪Environment::getPublicPath() . '/fileadmin/*') as $folderToRemove) {
44  ‪GeneralUtility::rmdir($folderToRemove, true);
45  }
46  parent::tearDown();
47  }
48 
52  public function ‪getNestedProcessingFolderTest(): void
53  {
54  $this->importCSVDataSet(__DIR__ . '/../Fixtures/sys_file_storage.csv');
55  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
56  $this->setUpBackendUser(1);
57  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
58  $subject->setEvaluatePermissions(false);
59 
62  ‪GeneralUtility::mkdir_deep(‪Environment::getPublicPath() . '/typo3temp/assets/_processed_/');
63  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/adirectory/bar.txt', 'myData');
64  clearstatcache();
65  $subject->addFileMount('/adirectory/', ['read_only' => false]);
66  $file = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/adirectory/bar.txt');
67 
68  $rootProcessingFolder = $subject->getProcessingFolder();
69  $processingFolder = $subject->getProcessingFolder($file);
70 
71  self::assertInstanceOf(Folder::class, $processingFolder);
72  self::assertNotEquals($rootProcessingFolder, $processingFolder);
73 
74  for ($i = ‪ResourceStorage::PROCESSING_FOLDER_LEVELS; $i>0; $i--) {
75  $processingFolder = $processingFolder->getParentFolder();
76  }
77  self::assertEquals($rootProcessingFolder, $processingFolder);
78  }
79 
89  public function ‪isWithinFileMountBoundariesRespectsReadOnlyFileMounts($targetDirectory, $fileMountFolder, $isFileMountReadOnly, $checkWriteAccess, $expectedResult): void
90  {
91  $this->importCSVDataSet(__DIR__ . '/../Fixtures/sys_file_storage.csv');
92  $fileName = 'bar.txt';
93  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
94  $this->setUpBackendUser(1);
96  ‪GeneralUtility::mkdir_deep(‪Environment::getPublicPath() . '/fileadmin/' . $targetDirectory);
97  if ($fileMountFolder !== $targetDirectory) {
98  ‪GeneralUtility::mkdir_deep(‪Environment::getPublicPath() . '/fileadmin/' . $fileMountFolder);
99  }
100  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/' . $targetDirectory . '/' . $fileName, 'myData');
101  clearstatcache();
102  $file = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/' . $targetDirectory . '/' . $fileName);
103 
104  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
105  $subject->setEvaluatePermissions(true);
106 
107  // read_only = true -> no write access for user, so checking for second argument true should assert false
108  $subject->addFileMount('/' . $fileMountFolder . '/', ['read_only' => $isFileMountReadOnly]);
109  self::assertSame($expectedResult, $subject->isWithinFileMountBoundaries($file, $checkWriteAccess));
110  }
111 
116  {
117  return [
118  'Access to file in ro file mount denied for write request' => [
119  '$targetDirectory' => 'fooBaz',
120  '$fileMountFolder' => 'fooBaz',
121  '$isFileMountReadOnly' => true,
122  '$checkWriteAccess' => true,
123  '$expectedResult' => false,
124  ],
125  'Access to file in ro file mount allowed for read request' => [
126  '$targetDirectory' => 'fooBaz',
127  '$fileMountFolder' => 'fooBaz',
128  '$isFileMountReadOnly' => true,
129  '$checkWriteAccess' => false,
130  '$expectedResult' => true,
131  ],
132  'Access to file in rw file mount allowed for write request' => [
133  '$targetDirectory' => 'fooBaz',
134  '$fileMountFolder' => 'fooBaz',
135  '$isFileMountReadOnly' => false,
136  '$checkWriteAccess' => true,
137  '$expectedResult' => true,
138  ],
139  'Access to file in rw file mount allowed for read request' => [
140  '$targetDirectory' => 'fooBaz',
141  '$fileMountFolder' => 'fooBaz',
142  '$isFileMountReadOnly' => false,
143  '$checkWriteAccess' => false,
144  '$expectedResult' => true,
145  ],
146  'Access to file not in file mount denied for write request' => [
147  '$targetDirectory' => 'fooBaz',
148  '$fileMountFolder' => 'barBaz',
149  '$isFileMountReadOnly' => false,
150  '$checkWriteAccess' => true,
151  '$expectedResult' => false,
152  ],
153  'Access to file not in file mount denied for read request' => [
154  '$targetDirectory' => 'fooBaz',
155  '$fileMountFolder' => 'barBaz',
156  '$isFileMountReadOnly' => false,
157  '$checkWriteAccess' => false,
158  '$expectedResult' => false,
159  ],
160  ];
161  }
162 
166  public function ‪getProcessingRootFolderTest(): void
167  {
168  $this->importCSVDataSet(__DIR__ . '/../Fixtures/sys_file_storage.csv');
169  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
170  $this->setUpBackendUser(1);
171 
172  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
173  $processingFolder = $subject->getProcessingFolder();
174 
175  self::assertInstanceOf(Folder::class, $processingFolder);
176  }
177 
182  {
183  $folderIdentifier = ‪StringUtility::getUniqueId();
184  $this->importCSVDataSet(__DIR__ . '/../Fixtures/sys_file_storage.csv');
185  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
186  $this->setUpBackendUser(1);
187 
188  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
189  $folder = new ‪Folder($subject, '/foo/' . $folderIdentifier . '/', $folderIdentifier);
190 
191  $role = $subject->getRole($folder);
192 
193  self::assertSame(‪FolderInterface::ROLE_DEFAULT, $role);
194  }
195 
200  {
201  $this->importCSVDataSet(__DIR__ . '/../Fixtures/sys_file_storage.csv');
202  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
203  $this->setUpBackendUser(1);
204  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
205 
207  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/foo/bar.txt', 'myData');
208  clearstatcache();
209  $file = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/foo/bar.txt');
210 
211  $this->expectException(\InvalidArgumentException::class);
212  $this->expectExceptionCode(1325842622);
213  $subject->replaceFile($file, ‪Environment::getPublicPath() . '/' . ‪StringUtility::getUniqueId());
214  }
215 
220  {
221  $this->importCSVDataSet(__DIR__ . '/../Fixtures/sys_file_storage.csv');
222  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
223  $this->setUpBackendUser(1);
224  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
225 
226  $this->expectException(\InvalidArgumentException::class);
227  $this->expectExceptionCode(1325689164);
228  $subject->createFolder('newFolder', new ‪Folder($subject, '/foo/', 'foo'));
229  }
230 
235  {
236  $this->importCSVDataSet(__DIR__ . '/../Fixtures/sys_file_storage.csv');
237  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
238  $this->setUpBackendUser(1);
239  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
240 
243  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/foo/bar.txt', 'myData');
244  clearstatcache();
245 
246  $file = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/foo/bar.txt');
247  $subject->deleteFile($file);
248 
249  self::assertFileExists(‪Environment::getPublicPath() . '/fileadmin/_recycler_/bar.txt');
250  self::assertFileDoesNotExist(‪Environment::getPublicPath() . '/fileadmin/foo/bar.txt');
251  }
252 
257  {
258  $this->importCSVDataSet(__DIR__ . '/../Fixtures/sys_file_storage.csv');
259  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
260  $this->setUpBackendUser(1);
261  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
262 
264  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/foo/bar.txt', 'myData');
265  clearstatcache();
266 
267  $file = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/foo/bar.txt');
268  $subject->deleteFile($file);
269 
270  self::assertFileDoesNotExist(‪Environment::getPublicPath() . '/fileadmin/foo/bar.txt');
271  }
272 
274  {
275  return [
276  'Finds foo recursive by name' => [
277  'foo',
278  '/bar/',
279  true,
280  [],
281  [
282  '/bar/bla/foo.txt',
283  ],
284  ],
285  'Finds foo not recursive by name' => [
286  'foo',
287  '/bar/bla/',
288  false,
289  [],
290  [
291  '/bar/bla/foo.txt',
292  ],
293  ],
294  'Finds nothing when not recursive for top level folder' => [
295  'foo',
296  '/bar/',
297  false,
298  [],
299  [],
300  ],
301  'Finds foo by description' => [
302  'fodescrip',
303  '/bar/',
304  true,
305  [],
306  [
307  '/bar/bla/foo.txt',
308  ],
309  ],
310  'Finds foo by translated description' => [
311  'fotranslated',
312  '/bar/',
313  true,
314  [],
315  [
316  '/bar/bla/foo.txt',
317  ],
318  ],
319  'Finds blupp by name' => [
320  'blupp',
321  '/bar/',
322  false,
323  [],
324  [
325  '/bar/blupp.txt',
326  ],
327  ],
328  'Finds only blupp by title for non recursive' => [
329  'title',
330  '/bar/',
331  false,
332  [],
333  [
334  '/bar/blupp.txt',
335  ],
336  ],
337  'Finds foo and blupp by title for recursive' => [
338  'title',
339  '/bar/',
340  true,
341  [],
342  [
343  '/bar/blupp.txt',
344  '/bar/bla/foo.txt',
345  ],
346  ],
347  'Finds foo, baz and blupp with no folder' => [
348  'title',
349  null,
350  true,
351  [],
352  [
353  '/baz/bla/baz.txt',
354  '/bar/blupp.txt',
355  '/bar/bla/foo.txt',
356  ],
357  ],
358  'Finds nothing for not existing' => [
359  'baz',
360  '/bar/',
361  true,
362  [],
363  [],
364  ],
365  'Finds nothing in root, when not recursive' => [
366  'title',
367  '/',
368  false,
369  [],
370  [],
371  ],
372  'Finds nothing, when not recursive and no folder given' => [
373  'title',
374  null,
375  false,
376  [],
377  [],
378  ],
379  'Filter is applied to result' => [
380  'title',
381  null,
382  true,
383  [
384  static function ($itemName) {
385  return str_contains($itemName, 'blupp') ? true : -1;
386  },
387  ],
388  [
389  '/bar/blupp.txt',
390  ],
391  ],
392  ];
393  }
394 
405  public function ‪searchFilesFindsFilesInFolder(string $searchTerm, ?string $searchFolder, bool $recursive, array $filters, array $expectedIdentifiers): void
406  {
407  try {
408  $this->importCSVDataSet(__DIR__ . '/../Fixtures/sys_file_storage.csv');
409  $this->importCSVDataSet(__DIR__ . '/Fixtures/FileSearch.csv');
410  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
411  $this->setUpBackendUser(1);
412  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
413  $subject->setFileAndFolderNameFilters($filters);
414 
417  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/bar/bla/foo.txt', 'myData');
418  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/baz/bla/baz.txt', 'myData');
419  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/bar/blupp.txt', 'myData');
420  clearstatcache();
421 
422  $folder = $searchFolder ? GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:' . $searchFolder) : null;
423  $search = ‪FileSearchDemand::createForSearchTerm($searchTerm);
424  if ($recursive) {
425  $search = $search->withRecursive();
426  }
427 
428  $result = $subject->searchFiles($search, $folder);
429  $expectedFiles = array_map([$subject, 'getFile'], $expectedIdentifiers);
430  self::assertSame($expectedFiles, iterator_to_array($result));
431 
432  // Check if search also works for non hierarchical storages/drivers
433  // This is a hack, as capabilities is not settable from the outside
434  $objectReflection = new \ReflectionObject($subject);
435  $property = $objectReflection->getProperty('capabilities');
436  $property->setAccessible(true);
437  $property->setValue($subject, $subject->getCapabilities() & 7);
438  $result = $subject->searchFiles($search, $folder);
439  $expectedFiles = array_map([$subject, 'getFile'], $expectedIdentifiers);
440  self::assertSame($expectedFiles, iterator_to_array($result));
441  } finally {
442  ‪GeneralUtility::rmdir(‪Environment::getPublicPath() . '/fileadmin/bar', true);
443  ‪GeneralUtility::rmdir(‪Environment::getPublicPath() . '/fileadmin/baz', true);
444  }
445  }
446 
451  {
453  $this->importCSVDataSet(__DIR__ . '/../Fixtures/sys_file_storage.csv');
454  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
455  $this->setUpBackendUser(1);
456  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
457 
459  $folderToCopy = GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:/foo');
460  $targetParentFolder = GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:/');
461 
462  $this->expectException(InvalidTargetFolderException::class);
463  $this->expectExceptionCode(1422723059);
464  $subject->copyFolder($folderToCopy, $targetParentFolder, null, $conflictMode);
465  }
466 
471  {
473  $this->importCSVDataSet(__DIR__ . '/../Fixtures/sys_file_storage.csv');
474  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
475  $this->setUpBackendUser(1);
476  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
477 
479  $folderToCopy = GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:/foo');
480  $targetParentFolder = GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:/');
481 
482  $subject->copyFolder($folderToCopy, $targetParentFolder, null, $conflictMode);
483 
484  $newFolder = GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:/foo_01');
485  self::assertInstanceOf(Folder::class, $newFolder);
486  }
487 
492  {
494  $this->importCSVDataSet(__DIR__ . '/../Fixtures/sys_file_storage.csv');
495  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
496  $this->setUpBackendUser(1);
498  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/foo/bar.txt', 'Temp file 1');
499  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/bar.txt', 'Temp file 2');
500 
501  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
502 
503  $fileToCopy = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/foo/bar.txt');
504  $targetParentFolder = GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:/');
505 
506  $this->expectException(ExistingTargetFileNameException::class);
507  $this->expectExceptionCode(1320291064);
508  $subject->copyFile($fileToCopy, $targetParentFolder, null, $conflictMode);
509  }
510 
515  {
517  $this->importCSVDataSet(__DIR__ . '/../Fixtures/sys_file_storage.csv');
518  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
519  $this->setUpBackendUser(1);
521  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/foo/bar.txt', 'Temp file 1');
522  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/bar.txt', 'Temp file 2');
523 
524  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
525 
526  $fileToCopy = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/foo/bar.txt');
527  $targetParentFolder = GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:/');
528 
529  $subject->copyFile($fileToCopy, $targetParentFolder, null, $conflictMode);
530 
531  $newFile = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/bar_01.txt');
532  self::assertInstanceOf(File::class, $newFile);
533  }
534 }
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\deleteFileUnlinksFileIfNoRecyclerFolderAvailable
‪deleteFileUnlinksFileIfNoRecyclerFolderAvailable()
Definition: ResourceStorageTest.php:256
‪TYPO3\CMS\Core\Resource\DuplicationBehavior
Definition: DuplicationBehavior.php:24
‪TYPO3\CMS\Core\Core\Environment\getPublicPath
‪static string getPublicPath()
Definition: Environment.php:204
‪TYPO3\CMS\Core\Resource\DuplicationBehavior\CANCEL
‪const CANCEL
Definition: DuplicationBehavior.php:46
‪TYPO3\CMS\Core\Resource\ResourceStorage\PROCESSING_FOLDER_LEVELS
‪const PROCESSING_FOLDER_LEVELS
Definition: ResourceStorage.php:212
‪TYPO3\CMS\Core\Tests\Functional\Resource
Definition: ResourceStorageTest.php:18
‪TYPO3\CMS\Core\Resource\FolderInterface\ROLE_DEFAULT
‪const ROLE_DEFAULT
Definition: FolderInterface.php:26
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\createFolderThrowsExceptionIfParentFolderDoesNotExist
‪createFolderThrowsExceptionIfParentFolderDoesNotExist()
Definition: ResourceStorageTest.php:219
‪TYPO3\CMS\Core\Resource\Exception\ExistingTargetFileNameException
Definition: ExistingTargetFileNameException.php:24
‪TYPO3\CMS\Core\Resource\Exception\InvalidTargetFolderException
Definition: InvalidTargetFolderException.php:24
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\copyFolderGeneratesNewFolderNameWhenFolderAlreadyExistsInTargetFolderAndConflictModeIsRename
‪copyFolderGeneratesNewFolderNameWhenFolderAlreadyExistsInTargetFolderAndConflictModeIsRename()
Definition: ResourceStorageTest.php:470
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\tearDown
‪tearDown()
Definition: ResourceStorageTest.php:40
‪TYPO3\CMS\Core\Type\Enumeration\cast
‪static static cast($value)
Definition: Enumeration.php:186
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\copyFileThrowsErrorWhenFileWithSameNameAlreadyExistsInTargetFolderAndConflictModeIsCancel
‪copyFileThrowsErrorWhenFileWithSameNameAlreadyExistsInTargetFolderAndConflictModeIsCancel()
Definition: ResourceStorageTest.php:491
‪TYPO3\CMS\Core\Utility\GeneralUtility\mkdir_deep
‪static mkdir_deep($directory)
Definition: GeneralUtility.php:1751
‪TYPO3\CMS\Core\Resource\Search\FileSearchDemand
Definition: FileSearchDemand.php:26
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\searchFilesFindsFilesInFolder
‪searchFilesFindsFilesInFolder(string $searchTerm, ?string $searchFolder, bool $recursive, array $filters, array $expectedIdentifiers)
Definition: ResourceStorageTest.php:405
‪TYPO3\CMS\Core\Resource\Folder
Definition: Folder.php:37
‪TYPO3\CMS\Core\Resource\ResourceFactory
Definition: ResourceFactory.php:41
‪TYPO3\CMS\Core\Resource\StorageRepository
Definition: StorageRepository.php:38
‪TYPO3\CMS\Core\Resource\File
Definition: File.php:24
‪TYPO3\CMS\Core\Resource\DuplicationBehavior\RENAME
‪const RENAME
Definition: DuplicationBehavior.php:32
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\isWithinFileMountBoundariesDataProvider
‪array isWithinFileMountBoundariesDataProvider()
Definition: ResourceStorageTest.php:115
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\isWithinFileMountBoundariesRespectsReadOnlyFileMounts
‪isWithinFileMountBoundariesRespectsReadOnlyFileMounts($targetDirectory, $fileMountFolder, $isFileMountReadOnly, $checkWriteAccess, $expectedResult)
Definition: ResourceStorageTest.php:89
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\copyFileGeneratesNewFileNameWhenFileAlreadyExistsInTargetFolderAndConflictModeIsRename
‪copyFileGeneratesNewFileNameWhenFileAlreadyExistsInTargetFolderAndConflictModeIsRename()
Definition: ResourceStorageTest.php:514
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\searchFilesFindsFilesInFolderDataProvider
‪searchFilesFindsFilesInFolderDataProvider()
Definition: ResourceStorageTest.php:273
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\getProcessingRootFolderTest
‪getProcessingRootFolderTest()
Definition: ResourceStorageTest.php:166
‪TYPO3\CMS\Core\Resource\ResourceStorage
Definition: ResourceStorage.php:127
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\replaceFileFailsIfLocalFileDoesNotExist
‪replaceFileFailsIfLocalFileDoesNotExist()
Definition: ResourceStorageTest.php:199
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest
Definition: ResourceStorageTest.php:39
‪TYPO3\CMS\Core\Core\Environment
Definition: Environment.php:41
‪TYPO3\CMS\Core\Resource\FolderInterface
Definition: FolderInterface.php:22
‪TYPO3\CMS\Core\Utility\GeneralUtility\rmdir
‪static bool rmdir($path, $removeNonEmpty=false)
Definition: GeneralUtility.php:1804
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\deleteFileMovesFileToRecyclerFolderIfAvailable
‪deleteFileMovesFileToRecyclerFolderIfAvailable()
Definition: ResourceStorageTest.php:234
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:51
‪TYPO3\CMS\Core\Resource\Search\FileSearchDemand\createForSearchTerm
‪static createForSearchTerm(string $searchTerm)
Definition: FileSearchDemand.php:70
‪TYPO3\CMS\Core\Utility\StringUtility
Definition: StringUtility.php:24
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\getRoleReturnsDefaultForRegularFolders
‪getRoleReturnsDefaultForRegularFolders()
Definition: ResourceStorageTest.php:181
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\getNestedProcessingFolderTest
‪getNestedProcessingFolderTest()
Definition: ResourceStorageTest.php:52
‪TYPO3\CMS\Core\Utility\StringUtility\getUniqueId
‪static getUniqueId(string $prefix='')
Definition: StringUtility.php:29
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\copyFolderThrowsErrorWhenFolderAlreadyExistsInTargetFolderAndConflictModeIsCancel
‪copyFolderThrowsErrorWhenFolderAlreadyExistsInTargetFolderAndConflictModeIsCancel()
Definition: ResourceStorageTest.php:450