Skip to content

Commit

Permalink
[TASK] Introduce a proxy for ResourceFactory
Browse files Browse the repository at this point in the history
  • Loading branch information
NamelessCoder committed Jan 28, 2025
1 parent 5fa5412 commit 888eef0
Show file tree
Hide file tree
Showing 15 changed files with 87 additions and 32 deletions.
52 changes: 52 additions & 0 deletions Classes/Proxy/ResourceFactoryProxy.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php
namespace FluidTYPO3\Vhs\Proxy;

/*
* This file is part of the FluidTYPO3/Flux project under GPLv2 or later.
*
* For the full copyright and license information, please read the
* LICENSE.md file that was distributed with this source code.
*/

use TYPO3\CMS\Core\Resource\File;
use TYPO3\CMS\Core\Resource\FileReference;
use TYPO3\CMS\Core\Resource\ProcessedFile;
use TYPO3\CMS\Core\Resource\ResourceFactory;
use TYPO3\CMS\Core\SingletonInterface;

/**
* Final/readonly class is unnecessary coercion - and using it in shared libraries is arrogant and very disrespectful.
*
* @codeCoverageIgnore
*/
class ResourceFactoryProxy implements SingletonInterface
{
private ResourceFactory $resourceFactory;

public function __construct(ResourceFactory $resourceFactory)
{
$this->resourceFactory = $resourceFactory;
}

public function getFileReferenceObject(int $uid): FileReference
{
return $this->resourceFactory->getFileReferenceObject($uid);
}

/**
* @param int $uid
*/
public function getFileObject($uid, array $fileData = []): File
{
return $this->resourceFactory->getFileObject($uid, $fileData);
}

/**
* @param string $identifier
* @return File|ProcessedFile|null
*/
public function getFileObjectFromCombinedIdentifier($identifier)
{
return $this->resourceFactory->getFileObjectFromCombinedIdentifier($identifier);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
* LICENSE.md file that was distributed with this source code.
*/

use FluidTYPO3\Vhs\Proxy\ResourceFactoryProxy;
use FluidTYPO3\Vhs\Utility\ResourceUtility;
use TYPO3\CMS\Core\Resource\FileReference as CoreFileReference;
use TYPO3\CMS\Core\Resource\ResourceFactory;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Domain\Model\FileReference as ExtbaseFileReference;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
Expand All @@ -22,7 +22,7 @@
abstract class AbstractImageInfoViewHelper extends AbstractViewHelper
{
/**
* @var ResourceFactory
* @var ResourceFactoryProxy
*/
protected $resourceFactory;

Expand All @@ -36,8 +36,8 @@ abstract class AbstractImageInfoViewHelper extends AbstractViewHelper
*/
public function __construct()
{
/** @var ResourceFactory $resourceFactory */
$resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class);
/** @var ResourceFactoryProxy $resourceFactory */
$resourceFactory = GeneralUtility::makeInstance(ResourceFactoryProxy::class);
$this->resourceFactory = $resourceFactory;
}

Expand Down
6 changes: 3 additions & 3 deletions Classes/ViewHelpers/Resource/AbstractResourceViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
*/

use FluidTYPO3\Vhs\Proxy\DoctrineQueryProxy;
use FluidTYPO3\Vhs\Proxy\ResourceFactoryProxy;
use FluidTYPO3\Vhs\Traits\TagViewHelperCompatibility;
use FluidTYPO3\Vhs\Utility\ResourceUtility;
use TYPO3\CMS\Core\Database\Connection;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Resource\File;
use TYPO3\CMS\Core\Resource\ProcessedFile;
use TYPO3\CMS\Core\Resource\ResourceFactory;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;

Expand Down Expand Up @@ -93,8 +93,8 @@ public function getFiles(bool $onlyProperties = false, ?string $identifier = nul
}

$files = [];
/** @var ResourceFactory $resourceFactory */
$resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class);
/** @var ResourceFactoryProxy $resourceFactory */
$resourceFactory = GeneralUtility::makeInstance(ResourceFactoryProxy::class);

if (!empty($categories)) {
/** @var ConnectionPool $connectionPool */
Expand Down
8 changes: 4 additions & 4 deletions Classes/ViewHelpers/Resource/Record/FalViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@
*/

use FluidTYPO3\Vhs\Proxy\DoctrineQueryProxy;
use FluidTYPO3\Vhs\Proxy\ResourceFactoryProxy;
use FluidTYPO3\Vhs\Utility\ResourceUtility;
use TYPO3\CMS\Core\Database\Connection;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Database\Query\QueryBuilder;
use TYPO3\CMS\Core\Resource\Exception\ResourceDoesNotExistException;
use TYPO3\CMS\Core\Resource\FileReference;
use TYPO3\CMS\Core\Resource\FileRepository;
use TYPO3\CMS\Core\Resource\ResourceFactory;
use TYPO3\CMS\Core\Utility\ArrayUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Versioning\VersionState;
Expand Down Expand Up @@ -50,7 +50,7 @@
class FalViewHelper extends AbstractRecordResourceViewHelper
{
/**
* @var ResourceFactory
* @var ResourceFactoryProxy
*/
protected $resourceFactory;

Expand All @@ -69,8 +69,8 @@ class FalViewHelper extends AbstractRecordResourceViewHelper
*/
public function __construct()
{
/** @var ResourceFactory $resourceFactory */
$resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class);
/** @var ResourceFactoryProxy $resourceFactory */
$resourceFactory = GeneralUtility::makeInstance(ResourceFactoryProxy::class);
$this->resourceFactory = $resourceFactory;
/** @var FileRepository $fileRepository */
$fileRepository = GeneralUtility::makeInstance(FileRepository::class);
Expand Down
3 changes: 3 additions & 0 deletions Configuration/Services.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ services:
FluidTYPO3\Vhs\Proxy\SiteFinderProxy:
public: true

FluidTYPO3\Vhs\Proxy\ResourceFactoryProxy:
public: true

FluidTYPO3\Vhs\Service\AssetService:
public: true

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,20 @@
* LICENSE.md file that was distributed with this source code.
*/

use FluidTYPO3\Vhs\Proxy\ResourceFactoryProxy;
use FluidTYPO3\Vhs\Tests\Fixtures\Domain\Model\Bar;
use FluidTYPO3\Vhs\Tests\Fixtures\Domain\Model\Foo;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTest;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTestCase;
use TYPO3\CMS\Core\Resource\FileRepository;
use TYPO3\CMS\Core\Resource\ResourceFactory;
use TYPO3\CMS\Extbase\Reflection\ReflectionService;

class HasValidatorViewHelperTest extends AbstractViewHelperTestCase
{

protected function setUp(): void
{
$this->singletonInstances[ResourceFactory::class] = $this->getMockBuilder(ResourceFactory::class)->disableOriginalConstructor()->getMock();
$this->singletonInstances[ResourceFactoryProxy::class] = $this->getMockBuilder(ResourceFactoryProxy::class)->disableOriginalConstructor()->getMock();
$this->singletonInstances[FileRepository::class] = $this->getMockBuilder(FileRepository::class)->disableOriginalConstructor()->getMock();
$this->singletonInstances[ReflectionService::class] = $this->getMockBuilder(ReflectionService::class)
->setMethods(['__destruct'])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
* LICENSE.md file that was distributed with this source code.
*/

use FluidTYPO3\Vhs\Proxy\ResourceFactoryProxy;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTest;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTestCase;
use TYPO3\CMS\Core\Resource\FileRepository;
use TYPO3\CMS\Core\Resource\ResourceFactory;

/**
* Class FalViewHelperTest
Expand All @@ -20,7 +20,7 @@ class FalViewHelperTest extends AbstractViewHelperTestCase
{
protected function setUp(): void
{
$this->singletonInstances[ResourceFactory::class] = $this->getMockBuilder(ResourceFactory::class)->disableOriginalConstructor()->getMock();
$this->singletonInstances[ResourceFactoryProxy::class] = $this->getMockBuilder(ResourceFactoryProxy::class)->disableOriginalConstructor()->getMock();
$this->singletonInstances[FileRepository::class] = $this->getMockBuilder(FileRepository::class)->disableOriginalConstructor()->getMock();

parent::setUp();
Expand Down
4 changes: 2 additions & 2 deletions Tests/Unit/ViewHelpers/Media/ExtensionViewHelperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
* LICENSE.md file that was distributed with this source code.
*/

use FluidTYPO3\Vhs\Proxy\ResourceFactoryProxy;
use FluidTYPO3\Vhs\Tests\Fixtures\Classes\AccessibleExtensionManagementUtility;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTest;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTestCase;
use TYPO3\CMS\Core\Package\PackageManager;
use TYPO3\CMS\Core\Resource\ResourceFactory;

/**
* Class ExtensionViewHelperTest
Expand All @@ -29,7 +29,7 @@ class ExtensionViewHelperTest extends AbstractViewHelperTestCase
*/
public function setUp(): void
{
$this->singletonInstances[ResourceFactory::class] = $this->getMockBuilder(ResourceFactory::class)->disableOriginalConstructor()->getMock();
$this->singletonInstances[ResourceFactoryProxy::class] = $this->getMockBuilder(ResourceFactoryProxy::class)->disableOriginalConstructor()->getMock();
parent::setUp();
$this->fixturesPath = 'Tests/Fixtures/Files';
$packageManager = $this->getMockBuilder(PackageManager::class)->setMethods(['resolvePackagePath'])->disableOriginalConstructor()->getMock();
Expand Down
4 changes: 2 additions & 2 deletions Tests/Unit/ViewHelpers/Media/FilesViewHelperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
* LICENSE.md file that was distributed with this source code.
*/

use FluidTYPO3\Vhs\Proxy\ResourceFactoryProxy;
use FluidTYPO3\Vhs\Tests\Fixtures\Classes\AccessibleExtensionManagementUtility;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTest;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTestCase;
use TYPO3\CMS\Core\Package\PackageManager;
use TYPO3\CMS\Core\Resource\ResourceFactory;

/**
* Class FilesViewHelperTest
Expand All @@ -29,7 +29,7 @@ class FilesViewHelperTest extends AbstractViewHelperTestCase
*/
public function setUp(): void
{
$this->singletonInstances[ResourceFactory::class] = $this->getMockBuilder(ResourceFactory::class)->disableOriginalConstructor()->getMock();
$this->singletonInstances[ResourceFactoryProxy::class] = $this->getMockBuilder(ResourceFactoryProxy::class)->disableOriginalConstructor()->getMock();
parent::setUp();
$this->fixturesPath = 'EXT:vhs/Tests/Fixtures/Files';
$packageManager = $this->getMockBuilder(PackageManager::class)->setMethods(['resolvePackagePath'])->disableOriginalConstructor()->getMock();
Expand Down
4 changes: 2 additions & 2 deletions Tests/Unit/ViewHelpers/Media/Image/HeightViewHelperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
* LICENSE.md file that was distributed with this source code.
*/

use FluidTYPO3\Vhs\Proxy\ResourceFactoryProxy;
use FluidTYPO3\Vhs\Tests\Fixtures\Classes\AccessibleExtensionManagementUtility;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTest;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTestCase;
use TYPO3\CMS\Core\Package\PackageManager;
use TYPO3\CMS\Core\Resource\ResourceFactory;

/**
* Class HeightViewHelperTest
Expand All @@ -29,7 +29,7 @@ class HeightViewHelperTest extends AbstractViewHelperTestCase
*/
public function setUp(): void
{
$this->singletonInstances[ResourceFactory::class] = $this->getMockBuilder(ResourceFactory::class)->disableOriginalConstructor()->getMock();
$this->singletonInstances[ResourceFactoryProxy::class] = $this->getMockBuilder(ResourceFactoryProxy::class)->disableOriginalConstructor()->getMock();
parent::setUp();
$this->fixturesPath = realpath(__DIR__ . '/../../../../../Tests/Fixtures/Files');
$packageManager = $this->getMockBuilder(PackageManager::class)->setMethods(['resolvePackagePath'])->disableOriginalConstructor()->getMock();
Expand Down
4 changes: 2 additions & 2 deletions Tests/Unit/ViewHelpers/Media/Image/MimetypeViewHelperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
* LICENSE.md file that was distributed with this source code.
*/

use FluidTYPO3\Vhs\Proxy\ResourceFactoryProxy;
use FluidTYPO3\Vhs\Tests\Fixtures\Classes\AccessibleExtensionManagementUtility;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTest;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTestCase;
use TYPO3\CMS\Core\Package\PackageManager;
use TYPO3\CMS\Core\Resource\ResourceFactory;

/**
* Class MimetypeViewHelperTest
Expand All @@ -29,7 +29,7 @@ class MimetypeViewHelperTest extends AbstractViewHelperTestCase
*/
public function setUp(): void
{
$this->singletonInstances[ResourceFactory::class] = $this->getMockBuilder(ResourceFactory::class)->disableOriginalConstructor()->getMock();
$this->singletonInstances[ResourceFactoryProxy::class] = $this->getMockBuilder(ResourceFactoryProxy::class)->disableOriginalConstructor()->getMock();
parent::setUp();
$this->fixturesPath = realpath(__DIR__ . '/../../../../../Tests/Fixtures/Files');
$packageManager = $this->getMockBuilder(PackageManager::class)->setMethods(['resolvePackagePath'])->disableOriginalConstructor()->getMock();
Expand Down
4 changes: 2 additions & 2 deletions Tests/Unit/ViewHelpers/Media/Image/WidthViewHelperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
* LICENSE.md file that was distributed with this source code.
*/

use FluidTYPO3\Vhs\Proxy\ResourceFactoryProxy;
use FluidTYPO3\Vhs\Tests\Fixtures\Classes\AccessibleExtensionManagementUtility;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTest;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTestCase;
use TYPO3\CMS\Core\Package\PackageManager;
use TYPO3\CMS\Core\Resource\ResourceFactory;

/**
* Class WidthViewHelperTest
Expand All @@ -29,7 +29,7 @@ class WidthViewHelperTest extends AbstractViewHelperTestCase
*/
public function setUp(): void
{
$this->singletonInstances[ResourceFactory::class] = $this->getMockBuilder(ResourceFactory::class)->disableOriginalConstructor()->getMock();
$this->singletonInstances[ResourceFactoryProxy::class] = $this->getMockBuilder(ResourceFactoryProxy::class)->disableOriginalConstructor()->getMock();
parent::setUp();
$this->fixturesPath = realpath(__DIR__ . '/../../../../../Tests/Fixtures/Files');
$packageManager = $this->getMockBuilder(PackageManager::class)->setMethods(['resolvePackagePath'])->disableOriginalConstructor()->getMock();
Expand Down
4 changes: 2 additions & 2 deletions Tests/Unit/ViewHelpers/Media/SizeViewHelperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
* LICENSE.md file that was distributed with this source code.
*/

use FluidTYPO3\Vhs\Proxy\ResourceFactoryProxy;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTest;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTestCase;
use TYPO3\CMS\Core\Resource\ResourceFactory;

/**
* Class SizeViewHelperTest
Expand All @@ -27,7 +27,7 @@ class SizeViewHelperTest extends AbstractViewHelperTestCase
*/
public function setUp(): void
{
$this->singletonInstances[ResourceFactory::class] = $this->getMockBuilder(ResourceFactory::class)->disableOriginalConstructor()->getMock();
$this->singletonInstances[ResourceFactoryProxy::class] = $this->getMockBuilder(ResourceFactoryProxy::class)->disableOriginalConstructor()->getMock();
parent::setUp();
$this->fixturesPath = realpath(__DIR__ . '/../../../../Tests/Fixtures/Files');
}
Expand Down
4 changes: 2 additions & 2 deletions Tests/Unit/ViewHelpers/Page/Resources/FalViewHelperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
* LICENSE.md file that was distributed with this source code.
*/

use FluidTYPO3\Vhs\Proxy\ResourceFactoryProxy;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTest;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTestCase;
use TYPO3\CMS\Core\Resource\FileRepository;
use TYPO3\CMS\Core\Resource\ResourceFactory;

/**
* Class FalViewHelperTest
Expand All @@ -20,7 +20,7 @@ class FalViewHelperTest extends AbstractViewHelperTestCase
{
protected function setUp(): void
{
$this->singletonInstances[ResourceFactory::class] = $this->getMockBuilder(ResourceFactory::class)->disableOriginalConstructor()->getMock();
$this->singletonInstances[ResourceFactoryProxy::class] = $this->getMockBuilder(ResourceFactoryProxy::class)->disableOriginalConstructor()->getMock();
$this->singletonInstances[FileRepository::class] = $this->getMockBuilder(FileRepository::class)->disableOriginalConstructor()->getMock();

parent::setUp();
Expand Down
6 changes: 3 additions & 3 deletions Tests/Unit/ViewHelpers/Resource/Record/FalViewHelperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,21 @@
* LICENSE.md file that was distributed with this source code.
*/

use FluidTYPO3\Vhs\Proxy\ResourceFactoryProxy;
use FluidTYPO3\Vhs\Tests\Fixtures\Classes\DummyQueryBuilder;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTest;
use FluidTYPO3\Vhs\Tests\Unit\ViewHelpers\AbstractViewHelperTestCase;
use FluidTYPO3\Vhs\ViewHelpers\Resource\Record\FalViewHelper;
use TYPO3\CMS\Core\Resource\File;
use TYPO3\CMS\Core\Resource\FileReference;
use TYPO3\CMS\Core\Resource\FileRepository;
use TYPO3\CMS\Core\Resource\ResourceFactory;
use TYPO3\CMS\Core\Resource\ResourceStorage;

class FalViewHelperTest extends AbstractViewHelperTestCase
{
protected function setUp(): void
{
$this->singletonInstances[ResourceFactory::class] = $this->getMockBuilder(ResourceFactory::class)
$this->singletonInstances[ResourceFactoryProxy::class] = $this->getMockBuilder(ResourceFactoryProxy::class)
->setMethods(['getFileReferenceObject'])
->disableOriginalConstructor()
->getMock();
Expand Down Expand Up @@ -90,7 +90,7 @@ public function testGetResourcesInNonPageContext(int $workspaceUid): void
{
$file = $this->getMockBuilder(FileReference::class)->disableOriginalConstructor()->getMock();

$this->singletonInstances[ResourceFactory::class]->method('getFileReferenceObject')->willReturn($file);
$this->singletonInstances[ResourceFactoryProxy::class]->method('getFileReferenceObject')->willReturn($file);

$mockQueryBuilder = new DummyQueryBuilder($this);
$mockQueryBuilder->result->method('fetchAllAssociative')->willReturn([['uid' => 1]]);
Expand Down

0 comments on commit 888eef0

Please sign in to comment.