‪TYPO3CMS  11.5
ExtendedFileUtilityTest.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 Doctrine\DBAL\Result;
21 use Prophecy\Argument;
22 use Prophecy\PhpUnit\ProphecyTrait;
25 use TYPO3\CMS\Core\Database\Query\QueryBuilder;
32 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
33 
37 class ‪ExtendedFileUtilityTest extends UnitTestCase
38 {
39  use ProphecyTrait;
40 
44  protected function ‪setUp(): void
45  {
46  parent::setUp();
47  ‪$GLOBALS['LANG'] = $this->getMockBuilder(LanguageService::class)
48  ->disableOriginalConstructor()
49  ->onlyMethods(['sL'])
50  ->getMock();
51  }
52 
56  public function ‪folderHasFilesInUseReturnsTrueIfItHasFiles(): void
57  {
58  $fileUid = 1;
59  $file = $this->getMockBuilder(File::class)
60  ->onlyMethods(['getUid'])
61  ->disableOriginalConstructor()
62  ->getMock();
63  $file->expects(self::once())->method('getUid')->willReturn($fileUid);
64 
65  $folder = $this->getMockBuilder(Folder::class)
66  ->onlyMethods(['getFiles'])
67  ->disableOriginalConstructor()
68  ->getMock();
69  $folder->expects(self::once())
70  ->method('getFiles')->with(0, 0, ‪Folder::FILTER_MODE_USE_OWN_AND_STORAGE_FILTERS, true)
71  ->willReturn(
72  [$file]
73  );
74 
75  $subject = $this->getMockBuilder(ExtendedFileUtility::class)
76  ->onlyMethods(['addFlashMessage'])
77  ->getMock();
78 
79  // prophetizing the DB query
80  $expressionBuilderProphet = $this->prophesize(ExpressionBuilder::class);
81  $expressionBuilderProphet->eq(Argument::cetera())->willReturn('1 = 1');
82  $expressionBuilderProphet->neq(Argument::cetera())->willReturn('1 != 1');
83  $expressionBuilderProphet->in(Argument::cetera())->willReturn('uid IN (1)');
84  $databaseStatementProphet = $this->prophesize(Result::class);
85  $databaseStatementProphet->fetchOne(Argument::cetera())->willReturn(1);
86  $queryBuilderProphet = $this->prophesize(QueryBuilder::class);
87  $queryBuilderProphet->getRestrictions()->willReturn(GeneralUtility::makeInstance(DefaultRestrictionContainer::class));
88  $queryBuilderProphet->count(Argument::cetera())->willReturn($queryBuilderProphet);
89  $queryBuilderProphet->from(Argument::cetera())->willReturn($queryBuilderProphet);
90  $queryBuilderProphet->where(Argument::cetera())->willReturn($queryBuilderProphet);
91  $queryBuilderProphet->createNamedParameter(Argument::cetera())->willReturn(Argument::type('string'));
92  $queryBuilderProphet->executeQuery()->willReturn($databaseStatementProphet);
93  $queryBuilderProphet->expr()->willReturn($expressionBuilderProphet->reveal());
94  $connectionPoolProphet = $this->prophesize(ConnectionPool::class);
95  $connectionPoolProphet->getQueryBuilderForTable(Argument::cetera())->willReturn($queryBuilderProphet->reveal());
96  GeneralUtility::addInstance(ConnectionPool::class, $connectionPoolProphet->reveal());
97 
98  ‪$GLOBALS['LANG']->expects(self::exactly(2))->method('sL')
99  ->withConsecutive(
100  ['LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:message.description.folderNotDeletedHasFilesWithReferences'],
101  ['LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:message.header.folderNotDeletedHasFilesWithReferences']
102  )
103  ->willReturnOnConsecutiveCalls(
104  'folderNotDeletedHasFilesWithReferences',
105  'folderNotDeletedHasFilesWithReferences'
106  );
107 
108  $result = $subject->folderHasFilesInUse($folder);
109  self::assertTrue($result);
110  }
111 
116  {
117  $folder = $this->getMockBuilder(Folder::class)
118  ->onlyMethods(['getFiles'])
119  ->disableOriginalConstructor()
120  ->getMock();
121  $folder->expects(self::once())->method('getFiles')->with(0, 0, ‪Folder::FILTER_MODE_USE_OWN_AND_STORAGE_FILTERS, true)->willReturn(
122  []
123  );
124 
125  $subject = $this->getMockBuilder(ExtendedFileUtility::class)
126  ->onlyMethods(['addFlashMessage'])
127  ->getMock();
128  self::assertFalse($subject->folderHasFilesInUse($folder));
129  }
130 }
‪TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder
Definition: ExpressionBuilder.php:36
‪TYPO3\CMS\Core\Resource\Folder\FILTER_MODE_USE_OWN_AND_STORAGE_FILTERS
‪const FILTER_MODE_USE_OWN_AND_STORAGE_FILTERS
Definition: Folder.php:69
‪TYPO3\CMS\Core\Tests\Unit\Utility\File\ExtendedFileUtilityTest\folderHasFilesInUseReturnsTrueIfItHasFiles
‪folderHasFilesInUseReturnsTrueIfItHasFiles()
Definition: ExtendedFileUtilityTest.php:55
‪TYPO3\CMS\Core\Utility\File\ExtendedFileUtility
Definition: ExtendedFileUtility.php:73
‪TYPO3\CMS\Core\Tests\Unit\Utility\File
Definition: ExtendedFileUtilityTest.php:18
‪TYPO3\CMS\Core\Resource\Folder
Definition: Folder.php:37
‪TYPO3\CMS\Core\Resource\File
Definition: File.php:24
‪TYPO3\CMS\Core\Tests\Unit\Utility\File\ExtendedFileUtilityTest
Definition: ExtendedFileUtilityTest.php:38
‪TYPO3\CMS\Core\Tests\Unit\Utility\File\ExtendedFileUtilityTest\setUp
‪setUp()
Definition: ExtendedFileUtilityTest.php:43
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Core\Tests\Unit\Utility\File\ExtendedFileUtilityTest\folderHasFilesInUseReturnsFalseIfItHasNoFiles
‪folderHasFilesInUseReturnsFalseIfItHasNoFiles()
Definition: ExtendedFileUtilityTest.php:114
‪TYPO3\CMS\Core\Database\Query\Restriction\DefaultRestrictionContainer
Definition: DefaultRestrictionContainer.php:24