From 9bdfcfd262a9654f5f57299ed156a4f228ad6ef2 Mon Sep 17 00:00:00 2001 From: Oliver Klee Date: Wed, 9 Aug 2023 12:20:18 +0200 Subject: [PATCH] [TASK] Replace usages of getMockForAbstractClass in EXT:core `getMockForAbstractClass` has been (soft-)deprecated in PHPUnit 10.1: https://github.com/sebastianbergmann/phpunit/issues/5241 Hence, we should replace its usages to follow best practices and avoid deprecation warnings later with PHPUnit 11. We do this by creating dedicated fixture subclasses of the affected abstract classes. Resolves: #101630 Related: #101601 Releases: main Change-Id: I27f526cb7ee4e1f2081c05befd3d70549dd0e2fd Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/80470 Tested-by: Christian Kuhn Reviewed-by: Christian Kuhn Tested-by: Anja Leichsenring Tested-by: Andreas Nedbal Reviewed-by: Lina Wolf <112@linawolf.de> Tested-by: core-ci Tested-by: Lina Wolf <112@linawolf.de> Reviewed-by: Anja Leichsenring Reviewed-by: Andreas Nedbal --- Build/phpstan/phpstan-baseline.neon | 2 +- .../Processor/AbstractMemoryProcessorTest.php | 6 +- .../Fixtures/TestingMemoryProcessor.php | 32 ++ .../Tests/Unit/Resource/AbstractFileTest.php | 4 +- .../Collection/FileCollectionRegistryTest.php | 16 +- .../Fixtures/TestingFileCollection.php | 31 ++ .../Resource/Driver/AbstractDriverTest.php | 4 +- .../Resource/Driver/DriverRegistryTest.php | 3 +- .../Driver/Fixtures/TestingDriver.php | 281 ++++++++++++++++++ .../Unit/Resource/Fixtures/TestingFile.php | 41 +++ .../Repository/AbstractRepositoryTest.php | 24 +- .../Repository/Fixtures/TestingRepository.php | 36 +++ .../Unit/Utility/RootlineUtilityTest.php | 12 +- 13 files changed, 443 insertions(+), 49 deletions(-) create mode 100644 typo3/sysext/core/Tests/Unit/Log/Processor/Fixtures/TestingMemoryProcessor.php create mode 100644 typo3/sysext/core/Tests/Unit/Resource/Collection/Fixtures/TestingFileCollection.php create mode 100644 typo3/sysext/core/Tests/Unit/Resource/Driver/Fixtures/TestingDriver.php create mode 100644 typo3/sysext/core/Tests/Unit/Resource/Fixtures/TestingFile.php create mode 100644 typo3/sysext/core/Tests/Unit/Resource/Repository/Fixtures/TestingRepository.php diff --git a/Build/phpstan/phpstan-baseline.neon b/Build/phpstan/phpstan-baseline.neon index 84c55119e85e..b86feb330db7 100644 --- a/Build/phpstan/phpstan-baseline.neon +++ b/Build/phpstan/phpstan-baseline.neon @@ -1307,7 +1307,7 @@ parameters: - message: "#^Parameter \\#1 \\$uid of method TYPO3\\\\CMS\\\\Core\\\\Resource\\\\AbstractRepository\\\\:\\:findByUid\\(\\) expects int, string given\\.$#" - count: 2 + count: 1 path: ../../typo3/sysext/core/Tests/Unit/Resource/Repository/AbstractRepositoryTest.php - diff --git a/typo3/sysext/core/Tests/Unit/Log/Processor/AbstractMemoryProcessorTest.php b/typo3/sysext/core/Tests/Unit/Log/Processor/AbstractMemoryProcessorTest.php index 178b2292d500..5f5f61e6e0d7 100644 --- a/typo3/sysext/core/Tests/Unit/Log/Processor/AbstractMemoryProcessorTest.php +++ b/typo3/sysext/core/Tests/Unit/Log/Processor/AbstractMemoryProcessorTest.php @@ -17,7 +17,7 @@ namespace TYPO3\CMS\Core\Tests\Unit\Log\Processor; -use TYPO3\CMS\Core\Log\Processor\AbstractMemoryProcessor; +use TYPO3\CMS\Core\Tests\Unit\Log\Processor\Fixtures\TestingMemoryProcessor; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; final class AbstractMemoryProcessorTest extends UnitTestCase @@ -27,7 +27,7 @@ final class AbstractMemoryProcessorTest extends UnitTestCase */ public function setRealMemoryUsageSetsRealMemoryUsage(): void { - $processor = $this->getMockForAbstractClass(AbstractMemoryProcessor::class); + $processor = new TestingMemoryProcessor(); $processor->setRealMemoryUsage(false); self::assertFalse($processor->getRealMemoryUsage()); } @@ -37,7 +37,7 @@ public function setRealMemoryUsageSetsRealMemoryUsage(): void */ public function setFormatSizeSetsFormatSize(): void { - $processor = $this->getMockForAbstractClass(AbstractMemoryProcessor::class); + $processor = new TestingMemoryProcessor(); $processor->setFormatSize(false); self::assertFalse($processor->getFormatSize()); } diff --git a/typo3/sysext/core/Tests/Unit/Log/Processor/Fixtures/TestingMemoryProcessor.php b/typo3/sysext/core/Tests/Unit/Log/Processor/Fixtures/TestingMemoryProcessor.php new file mode 100644 index 000000000000..0bc37c0b4fa6 --- /dev/null +++ b/typo3/sysext/core/Tests/Unit/Log/Processor/Fixtures/TestingMemoryProcessor.php @@ -0,0 +1,32 @@ +expects(self::once())->method('getFolderIdentifierFromFileIdentifier')->with($currentIdentifier)->willReturn($parentIdentifier); $mockedStorage->expects(self::once())->method('getFolder')->with($parentIdentifier)->willReturn($parentFolderFixture); - $currentFolderFixture = $this->getMockForAbstractClass(AbstractFile::class); + $currentFolderFixture = new TestingFile(); $currentFolderFixture->setIdentifier($currentIdentifier)->setStorage($mockedStorage); self::assertSame($parentFolderFixture, $currentFolderFixture->getParentFolder()); diff --git a/typo3/sysext/core/Tests/Unit/Resource/Collection/FileCollectionRegistryTest.php b/typo3/sysext/core/Tests/Unit/Resource/Collection/FileCollectionRegistryTest.php index 7075686e5ccd..2b5739c728bf 100644 --- a/typo3/sysext/core/Tests/Unit/Resource/Collection/FileCollectionRegistryTest.php +++ b/typo3/sysext/core/Tests/Unit/Resource/Collection/FileCollectionRegistryTest.php @@ -17,9 +17,9 @@ namespace TYPO3\CMS\Core\Tests\Unit\Resource\Collection; -use TYPO3\CMS\Core\Resource\Collection\AbstractFileCollection; use TYPO3\CMS\Core\Resource\Collection\FileCollectionRegistry; use TYPO3\CMS\Core\Resource\Collection\StaticFileCollection; +use TYPO3\CMS\Core\Tests\Unit\Resource\Collection\Fixtures\TestingFileCollection; use TYPO3\CMS\Core\Utility\StringUtility; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; @@ -30,7 +30,7 @@ final class FileCollectionRegistryTest extends UnitTestCase */ public function registeredFileCollectionClassesCanBeRetrieved(): void { - $className = get_class($this->getMockForAbstractClass(AbstractFileCollection::class)); + $className = TestingFileCollection::class; $subject = new FileCollectionRegistry(); $subject->registerFileCollectionClass($className, 'foobar'); $returnedClassName = $subject->getFileCollectionClass('foobar'); @@ -56,7 +56,7 @@ public function registerFileCollectionClassThrowsExceptionIfTypeIsTooLong(): voi $this->expectException(\InvalidArgumentException::class); $this->expectExceptionCode(1391295611); $subject = new FileCollectionRegistry(); - $className = get_class($this->getMockForAbstractClass(AbstractFileCollection::class)); + $className = TestingFileCollection::class; $type = str_pad('', 40); $subject->registerFileCollectionClass($className, $type); } @@ -69,7 +69,7 @@ public function registerFileCollectionClassThrowsExceptionIfTypeIsAlreadyRegiste $this->expectException(\InvalidArgumentException::class); $this->expectExceptionCode(1391295643); $subject = new FileCollectionRegistry(); - $className = get_class($this->getMockForAbstractClass(AbstractFileCollection::class)); + $className = TestingFileCollection::class; $className2 = get_class($this->getMockForAbstractClass(StaticFileCollection::class)); $subject->registerFileCollectionClass($className, 'foobar'); $subject->registerFileCollectionClass($className2, 'foobar'); @@ -80,7 +80,7 @@ public function registerFileCollectionClassThrowsExceptionIfTypeIsAlreadyRegiste */ public function registerFileCollectionClassOverridesExistingRegisteredFileCollectionClass(): void { - $className = get_class($this->getMockForAbstractClass(AbstractFileCollection::class)); + $className = TestingFileCollection::class; $className2 = get_class($this->getMockForAbstractClass(StaticFileCollection::class)); $subject = new FileCollectionRegistry(); $subject->registerFileCollectionClass($className, 'foobar'); @@ -103,7 +103,7 @@ public function getFileCollectionClassThrowsExceptionIfClassIsNotRegistered(): v */ public function getFileCollectionClassAcceptsClassNameIfClassIsRegistered(): void { - $className = get_class($this->getMockForAbstractClass(AbstractFileCollection::class)); + $className = TestingFileCollection::class; $subject = new FileCollectionRegistry(); $subject->registerFileCollectionClass($className, 'foobar'); self::assertEquals($className, $subject->getFileCollectionClass('foobar')); @@ -114,7 +114,7 @@ public function getFileCollectionClassAcceptsClassNameIfClassIsRegistered(): voi */ public function fileCollectionRegistryIsInitializedWithPreconfiguredFileCollections(): void { - $className = get_class($this->getMockForAbstractClass(AbstractFileCollection::class)); + $className = TestingFileCollection::class; $type = substr(StringUtility::getUniqueId('type_'), 0, 30); $GLOBALS['TYPO3_CONF_VARS']['SYS']['fal']['registeredCollections'] = [ $type => $className, @@ -128,7 +128,7 @@ public function fileCollectionRegistryIsInitializedWithPreconfiguredFileCollecti */ public function fileCollectionExistsReturnsTrueForAllExistingFileCollections(): void { - $className = get_class($this->getMockForAbstractClass(AbstractFileCollection::class)); + $className = TestingFileCollection::class; $type = 'foo'; $GLOBALS['TYPO3_CONF_VARS']['SYS']['fal']['registeredCollections'] = [ $type => $className, diff --git a/typo3/sysext/core/Tests/Unit/Resource/Collection/Fixtures/TestingFileCollection.php b/typo3/sysext/core/Tests/Unit/Resource/Collection/Fixtures/TestingFileCollection.php new file mode 100644 index 000000000000..2ac7ddef960a --- /dev/null +++ b/typo3/sysext/core/Tests/Unit/Resource/Collection/Fixtures/TestingFileCollection.php @@ -0,0 +1,31 @@ +getMockForAbstractClass(AbstractDriver::class, [], '', false); + $subject = new TestingDriver(); self::assertTrue($subject->isCaseSensitiveFileSystem()); } } diff --git a/typo3/sysext/core/Tests/Unit/Resource/Driver/DriverRegistryTest.php b/typo3/sysext/core/Tests/Unit/Resource/Driver/DriverRegistryTest.php index 33bd8d0d932d..582b4c43fd65 100644 --- a/typo3/sysext/core/Tests/Unit/Resource/Driver/DriverRegistryTest.php +++ b/typo3/sysext/core/Tests/Unit/Resource/Driver/DriverRegistryTest.php @@ -19,6 +19,7 @@ use TYPO3\CMS\Core\Resource\Driver\DriverInterface; use TYPO3\CMS\Core\Resource\Driver\DriverRegistry; +use TYPO3\CMS\Core\Tests\Unit\Resource\Driver\Fixtures\TestingDriver; use TYPO3\CMS\Core\Utility\StringUtility; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; @@ -55,7 +56,7 @@ public function registerDriverClassThrowsExceptionIfShortnameIsAlreadyTakenByAno $this->expectException(\InvalidArgumentException::class); $this->expectExceptionCode(1314979451); $className = get_class($this->createMock(DriverInterface::class)); - $className2 = get_class($this->getMockForAbstractClass(DriverInterface::class)); + $className2 = TestingDriver::class; $subject = new DriverRegistry(); $subject->registerDriverClass($className, 'foobar'); $subject->registerDriverClass($className2, 'foobar'); diff --git a/typo3/sysext/core/Tests/Unit/Resource/Driver/Fixtures/TestingDriver.php b/typo3/sysext/core/Tests/Unit/Resource/Driver/Fixtures/TestingDriver.php new file mode 100644 index 000000000000..18997fe1d978 --- /dev/null +++ b/typo3/sysext/core/Tests/Unit/Resource/Driver/Fixtures/TestingDriver.php @@ -0,0 +1,281 @@ +expectException(\InvalidArgumentException::class); $this->expectExceptionCode(1316779798); - $subject = $this->getMockForAbstractClass(AbstractRepository::class, [], '', false); + $subject = new TestingRepository(); $subject->findByUid('asdf'); } - - /** - * @test - */ - public function findByUidAcceptsNumericUidInString(): void - { - $statementMock = $this->createMock(Result::class); - $statementMock->expects(self::once())->method('fetchAssociative')->willReturn(['uid' => 123]); - - $queryBuilderMock = $this->createDatabaseMock(); - $queryBuilderMock->expects(self::once())->method('select')->with('*')->willReturn($queryBuilderMock); - $queryBuilderMock->expects(self::once())->method('from')->with('')->willReturn($queryBuilderMock); - $queryBuilderMock->expects(self::once())->method('where')->with(self::anything())->willReturn($queryBuilderMock); - $queryBuilderMock->method('createNamedParameter')->with(self::anything())->willReturnArgument(0); - $queryBuilderMock->expects(self::once())->method('executeQuery')->willReturn($statementMock); - - $subject = $this->getMockForAbstractClass(AbstractRepository::class, [], '', false); - $subject->findByUid('123'); - } } diff --git a/typo3/sysext/core/Tests/Unit/Resource/Repository/Fixtures/TestingRepository.php b/typo3/sysext/core/Tests/Unit/Resource/Repository/Fixtures/TestingRepository.php new file mode 100644 index 000000000000..362f96bf455b --- /dev/null +++ b/typo3/sysext/core/Tests/Unit/Resource/Repository/Fixtures/TestingRepository.php @@ -0,0 +1,36 @@ +subject->method('resolvePageId')->willReturn(42); - - $cacheFrontendMock = $this->getMockForAbstractClass( - AbstractFrontend::class, - [], - '', - false - ); + $cacheFrontend = new NullFrontend('some-frontend'); $context = new Context(); $context->setAspect('workspace', new WorkspaceAspect(15)); $context->setAspect('language', new LanguageAspect(8, 8, LanguageAspect::OVERLAYS_OFF)); - $this->subject->__construct(42, '47-11,48-12', $context); - self::assertTrue($cacheFrontendMock->isValidEntryIdentifier($this->subject->getCacheIdentifier())); + self::assertTrue($cacheFrontend->isValidEntryIdentifier($this->subject->getCacheIdentifier())); } }