From 4ed568645b39815b6699f098637390da967f1299 Mon Sep 17 00:00:00 2001 From: Christian Kuhn <lolli@schwarzbu.ch> Date: Tue, 27 Feb 2024 15:50:46 +0100 Subject: [PATCH] [TASK] Modernize cache framework unit tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Less mocking * Don't test AbstractFrontend but implementations * Turn test-internal loops into data providers * General cleanup * Avoid phpunit 11 deprecations Resolves: #103214 Releases: main Change-Id: I87851d7ba6332161dc387bc6a5aea9661703428b Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/83147 Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de> Tested-by: Oliver Klee <typo3-coding@oliverklee.de> Tested-by: Stefan Bürk <stefan@buerk.tech> Reviewed-by: Stefan Bürk <stefan@buerk.tech> Tested-by: Christian Kuhn <lolli@schwarzbu.ch> Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch> Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de> Tested-by: core-ci <typo3@b13.com> Reviewed-by: Oliver Klee <typo3-coding@oliverklee.de> --- .../Tests/Unit/Cache/Backend/MockBackend.php | 52 ---- .../Backend/TransientMemoryBackendTest.php | 4 - .../Backend/Typo3DatabaseBackendTest.php | 23 +- .../BackendConfigurationOptionFixture.php | 3 - .../Cache/Fixtures/BackendDefaultFixture.php | 3 - .../Unit/Cache/Fixtures/BackendFixture.php | 3 - .../BackendInitializeObjectFixture.php | 3 - .../FrontendBackendInstanceFixture.php | 3 - .../Cache/Fixtures/FrontendDefaultFixture.php | 3 - .../Unit/Cache/Fixtures/FrontendFixture.php | 3 - .../Fixtures/FrontendIdentifierFixture.php | 3 - .../FrontendInitializeObjectFixture.php | 3 - .../Cache/Frontend/AbstractFrontendTest.php | 206 ------------- .../Unit/Cache/Frontend/PhpFrontendTest.php | 225 ++++++++++++-- .../Cache/Frontend/VariableFrontendTest.php | 284 ++++++++++++++---- 15 files changed, 435 insertions(+), 386 deletions(-) delete mode 100644 typo3/sysext/core/Tests/Unit/Cache/Backend/MockBackend.php delete mode 100644 typo3/sysext/core/Tests/Unit/Cache/Frontend/AbstractFrontendTest.php diff --git a/typo3/sysext/core/Tests/Unit/Cache/Backend/MockBackend.php b/typo3/sysext/core/Tests/Unit/Cache/Backend/MockBackend.php deleted file mode 100644 index 8bfe9013e6b9..000000000000 --- a/typo3/sysext/core/Tests/Unit/Cache/Backend/MockBackend.php +++ /dev/null @@ -1,52 +0,0 @@ -<?php - -declare(strict_types=1); - -/* - * This file is part of the TYPO3 CMS project. - * - * It is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, either version 2 - * of the License, or any later version. - * - * For the full copyright and license information, please read the - * LICENSE.txt file that was distributed with this source code. - * - * The TYPO3 project - inspiring people to share! - */ - -namespace TYPO3\CMS\Core\Tests\Unit\Cache\Backend; - -use TYPO3\CMS\Core\Cache\Backend\NullBackend; - -/** - * A caching backend which forgets everything immediately - * Used in FactoryTest - */ -class MockBackend extends NullBackend -{ - /** - * @var mixed - */ - protected $someOption; - - /** - * Sets some option - * - * @param mixed $value - */ - public function setSomeOption($value): void - { - $this->someOption = $value; - } - - /** - * Returns the option value - * - * @return mixed - */ - public function getSomeOption() - { - return $this->someOption; - } -} diff --git a/typo3/sysext/core/Tests/Unit/Cache/Backend/TransientMemoryBackendTest.php b/typo3/sysext/core/Tests/Unit/Cache/Backend/TransientMemoryBackendTest.php index 81d02162c97e..6521e988bef0 100644 --- a/typo3/sysext/core/Tests/Unit/Cache/Backend/TransientMemoryBackendTest.php +++ b/typo3/sysext/core/Tests/Unit/Cache/Backend/TransientMemoryBackendTest.php @@ -23,9 +23,6 @@ use TYPO3\CMS\Core\Cache\Exception; use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; -/** - * Testcase for the TransientMemory cache backend - */ final class TransientMemoryBackendTest extends UnitTestCase { protected bool $resetSingletonInstances = true; @@ -35,7 +32,6 @@ final class TransientMemoryBackendTest extends UnitTestCase { $this->expectException(Exception::class); $this->expectExceptionCode(1238244992); - $backend = new TransientMemoryBackend('Testing'); $data = 'Some data'; $identifier = 'MyIdentifier'; diff --git a/typo3/sysext/core/Tests/Unit/Cache/Backend/Typo3DatabaseBackendTest.php b/typo3/sysext/core/Tests/Unit/Cache/Backend/Typo3DatabaseBackendTest.php index fe21f51a0a0b..1fd8ec76b252 100644 --- a/typo3/sysext/core/Tests/Unit/Cache/Backend/Typo3DatabaseBackendTest.php +++ b/typo3/sysext/core/Tests/Unit/Cache/Backend/Typo3DatabaseBackendTest.php @@ -37,7 +37,6 @@ final class Typo3DatabaseBackendTest extends UnitTestCase $frontend = new NullFrontend('test'); $subject = new Typo3DatabaseBackend('Testing'); $subject->setCache($frontend); - self::assertEquals('cache_test', $subject->getCacheTable()); } @@ -63,67 +62,65 @@ final class Typo3DatabaseBackendTest extends UnitTestCase #[Test] public function setThrowsExceptionIfDataIsNotAString(): void { + $this->expectException(InvalidDataException::class); + $this->expectExceptionCode(1236518298); $frontend = new NullFrontend('test'); $subject = new Typo3DatabaseBackend('Testing'); $subject->setCache($frontend); - - $this->expectException(InvalidDataException::class); - $this->expectExceptionCode(1236518298); - $subject->set('identifier', ['iAmAnArray']); } #[Test] public function getThrowsExceptionIfFrontendWasNotSet(): void { - $subject = new Typo3DatabaseBackend('Testing'); $this->expectException(Exception::class); $this->expectExceptionCode(1236518288); + $subject = new Typo3DatabaseBackend('Testing'); $subject->get('identifier'); } #[Test] public function hasThrowsExceptionIfFrontendWasNotSet(): void { - $subject = new Typo3DatabaseBackend('Testing'); $this->expectException(Exception::class); $this->expectExceptionCode(1236518288); + $subject = new Typo3DatabaseBackend('Testing'); $subject->has('identifier'); } #[Test] public function removeThrowsExceptionIfFrontendWasNotSet(): void { - $subject = new Typo3DatabaseBackend('Testing'); $this->expectException(Exception::class); $this->expectExceptionCode(1236518288); + $subject = new Typo3DatabaseBackend('Testing'); $subject->remove('identifier'); } #[Test] public function collectGarbageThrowsExceptionIfFrontendWasNotSet(): void { - $subject = new Typo3DatabaseBackend('Testing'); $this->expectException(Exception::class); $this->expectExceptionCode(1236518288); + $subject = new Typo3DatabaseBackend('Testing'); $subject->collectGarbage(); } #[Test] public function findIdentifiersByTagThrowsExceptionIfFrontendWasNotSet(): void { - $subject = new Typo3DatabaseBackend('Testing'); $this->expectException(Exception::class); $this->expectExceptionCode(1236518288); + $subject = new Typo3DatabaseBackend('Testing'); $subject->findIdentifiersByTag('identifier'); } #[Test] public function flushThrowsExceptionIfFrontendWasNotSet(): void { - $subject = new Typo3DatabaseBackend('Testing'); $this->expectException(Exception::class); $this->expectExceptionCode(1236518288); + $subject = new Typo3DatabaseBackend('Testing'); $subject->flush(); } @@ -210,18 +207,18 @@ final class Typo3DatabaseBackendTest extends UnitTestCase #[Test] public function flushByTagThrowsExceptionIfFrontendWasNotSet(): void { - $subject = new Typo3DatabaseBackend('Testing'); $this->expectException(Exception::class); $this->expectExceptionCode(1236518288); + $subject = new Typo3DatabaseBackend('Testing'); $subject->flushByTag('Tag'); } #[Test] public function flushByTagsThrowsExceptionIfFrontendWasNotSet(): void { - $subject = new Typo3DatabaseBackend('Testing'); $this->expectException(Exception::class); $this->expectExceptionCode(1236518288); + $subject = new Typo3DatabaseBackend('Testing'); $subject->flushByTags([]); } } diff --git a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendConfigurationOptionFixture.php b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendConfigurationOptionFixture.php index 1197fd4e44b9..53a6a4b8ff13 100644 --- a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendConfigurationOptionFixture.php +++ b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendConfigurationOptionFixture.php @@ -17,9 +17,6 @@ declare(strict_types=1); namespace TYPO3\CMS\Core\Tests\Unit\Cache\Fixtures; -/** - * Backend fixture for CacheManager test getCacheCreatesBackendWithGivenConfiguration() - */ class BackendConfigurationOptionFixture extends BackendFixture { /** diff --git a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendDefaultFixture.php b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendDefaultFixture.php index 642962fdff29..e13c42f04bbf 100644 --- a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendDefaultFixture.php +++ b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendDefaultFixture.php @@ -17,9 +17,6 @@ declare(strict_types=1); namespace TYPO3\CMS\Core\Tests\Unit\Cache\Fixtures; -/** -* Backend for cache manager test getCacheCreatesCacheInstanceWithFallbackToDefaultBackend -*/ class BackendDefaultFixture extends BackendFixture { public function __construct() diff --git a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendFixture.php b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendFixture.php index 3828440f528d..a916cddd8eb8 100644 --- a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendFixture.php +++ b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendFixture.php @@ -20,9 +20,6 @@ namespace TYPO3\CMS\Core\Tests\Unit\Cache\Fixtures; use TYPO3\CMS\Core\Cache\Backend\BackendInterface; use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface; -/** - * Backend fixture to test cache manager. - */ class BackendFixture implements BackendInterface { public function setCache(FrontendInterface $cache): void {} diff --git a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendInitializeObjectFixture.php b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendInitializeObjectFixture.php index 2424f777f7ee..9aace3bc8d46 100644 --- a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendInitializeObjectFixture.php +++ b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/BackendInitializeObjectFixture.php @@ -17,9 +17,6 @@ declare(strict_types=1); namespace TYPO3\CMS\Core\Tests\Unit\Cache\Fixtures; -/** - * Fixture to test cache manager details - */ class BackendInitializeObjectFixture extends BackendFixture { public function initializeObject(): void diff --git a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendBackendInstanceFixture.php b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendBackendInstanceFixture.php index d5506575b121..d3731083ca09 100644 --- a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendBackendInstanceFixture.php +++ b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendBackendInstanceFixture.php @@ -17,9 +17,6 @@ declare(strict_types=1); namespace TYPO3\CMS\Core\Tests\Unit\Cache\Fixtures; -/** -* Frontend for cache manager test getCacheGivesBackendInstanceToCacheFrontend -*/ class FrontendBackendInstanceFixture extends FrontendFixture { public function __construct($_, $backend) diff --git a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendDefaultFixture.php b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendDefaultFixture.php index a658f4f4fa32..405c61ea523d 100644 --- a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendDefaultFixture.php +++ b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendDefaultFixture.php @@ -17,9 +17,6 @@ declare(strict_types=1); namespace TYPO3\CMS\Core\Tests\Unit\Cache\Fixtures; -/** -* Frontend for cache manager test getCacheCreatesCacheInstanceWithFallbackToDefaultFrontend -*/ class FrontendDefaultFixture extends FrontendFixture { public function __construct() diff --git a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendFixture.php b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendFixture.php index cd6c91915b62..2a0c1e6ac9bc 100644 --- a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendFixture.php +++ b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendFixture.php @@ -19,9 +19,6 @@ namespace TYPO3\CMS\Core\Tests\Unit\Cache\Fixtures; use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface; -/** -* Fixture implementing frontend -*/ class FrontendFixture implements FrontendInterface { protected string $identifier; diff --git a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendIdentifierFixture.php b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendIdentifierFixture.php index 6d203275cbe4..153ff539049a 100644 --- a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendIdentifierFixture.php +++ b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendIdentifierFixture.php @@ -17,9 +17,6 @@ declare(strict_types=1); namespace TYPO3\CMS\Core\Tests\Unit\Cache\Fixtures; -/** -* Frontend for cache manager test getCacheGivesIdentifierToCacheFrontend -*/ class FrontendIdentifierFixture extends FrontendFixture { public function __construct($identifier) diff --git a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendInitializeObjectFixture.php b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendInitializeObjectFixture.php index 85b48b782fbf..f0aca8f9bf50 100644 --- a/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendInitializeObjectFixture.php +++ b/typo3/sysext/core/Tests/Unit/Cache/Fixtures/FrontendInitializeObjectFixture.php @@ -17,9 +17,6 @@ declare(strict_types=1); namespace TYPO3\CMS\Core\Tests\Unit\Cache\Fixtures; -/** -* Fixture implementing frontend -*/ class FrontendInitializeObjectFixture extends FrontendFixture { public function initializeObject(): void diff --git a/typo3/sysext/core/Tests/Unit/Cache/Frontend/AbstractFrontendTest.php b/typo3/sysext/core/Tests/Unit/Cache/Frontend/AbstractFrontendTest.php deleted file mode 100644 index 0338d06de5e0..000000000000 --- a/typo3/sysext/core/Tests/Unit/Cache/Frontend/AbstractFrontendTest.php +++ /dev/null @@ -1,206 +0,0 @@ -<?php - -declare(strict_types=1); - -/* - * This file is part of the TYPO3 CMS project. - * - * It is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, either version 2 - * of the License, or any later version. - * - * For the full copyright and license information, please read the - * LICENSE.txt file that was distributed with this source code. - * - * The TYPO3 project - inspiring people to share! - */ - -namespace TYPO3\CMS\Core\Tests\Unit\Cache\Frontend; - -use PHPUnit\Framework\Attributes\Test; -use TYPO3\CMS\Core\Cache\Backend\AbstractBackend; -use TYPO3\CMS\Core\Cache\Backend\TaggableBackendInterface; -use TYPO3\CMS\Core\Cache\Frontend\VariableFrontend; -use TYPO3\TestingFramework\Core\Unit\UnitTestCase; - -/** - * Testcase for the abstract cache frontend - */ -final class AbstractFrontendTest extends UnitTestCase -{ - #[Test] - public function theConstructorAcceptsValidIdentifiers(): void - { - $mockBackend = $this->getMockBuilder(AbstractBackend::class) - ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage']) - ->addMethods(['findIdentifiersByTag', 'flushByTag']) - ->disableOriginalConstructor() - ->getMock(); - foreach (['x', 'someValue', '123fivesixseveneight', 'some&', 'ab_cd%', rawurlencode('resource://some/äöü$&% sadf'), str_repeat('x', 250)] as $identifier) { - $this->getMockBuilder(VariableFrontend::class) - ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove', 'flush', 'flushByTag', 'collectGarbage']) - ->setConstructorArgs([$identifier, $mockBackend]) - ->getMock(); - } - } - - #[Test] - public function theConstructorRejectsInvalidIdentifiers(): void - { - $mockBackend = $this->getMockBuilder(AbstractBackend::class) - ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage']) - ->addMethods(['findIdentifiersByTag', 'flushByTag']) - ->disableOriginalConstructor() - ->getMock(); - foreach (['', 'abc def', 'foo!', 'bar:', 'some/', 'bla*', 'one+', 'äöü', str_repeat('x', 251), 'x$', '\\a', 'b#'] as $identifier) { - try { - $this->getMockBuilder(VariableFrontend::class) - ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove', 'flush', 'flushByTag', 'collectGarbage']) - ->setConstructorArgs([$identifier, $mockBackend]) - ->getMock(); - self::fail('Identifier "' . $identifier . '" was not rejected.'); - } catch (\InvalidArgumentException $exception) { - } - } - } - - #[Test] - public function flushCallsBackend(): void - { - $identifier = 'someCacheIdentifier'; - $backend = $this->getMockBuilder(AbstractBackend::class) - ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage']) - ->addMethods(['findIdentifiersByTag', 'flushByTag']) - ->disableOriginalConstructor() - ->getMock(); - $backend->expects(self::once())->method('flush'); - $cache = $this->getMockBuilder(VariableFrontend::class) - ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove']) - ->setConstructorArgs([$identifier, $backend]) - ->getMock(); - $cache->flush(); - } - - #[Test] - public function flushByTagRejectsInvalidTags(): void - { - $this->expectException(\InvalidArgumentException::class); - $this->expectExceptionCode(1233057359); - - $identifier = 'someCacheIdentifier'; - $backend = $this->createMock(TaggableBackendInterface::class); - $backend->expects(self::never())->method('flushByTag'); - $cache = $this->getMockBuilder(VariableFrontend::class) - ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove']) - ->setConstructorArgs([$identifier, $backend]) - ->getMock(); - $cache->flushByTag('SomeInvalid\\Tag'); - } - - #[Test] - public function flushByTagCallsBackendIfItIsATaggableBackend(): void - { - $tag = 'sometag'; - $identifier = 'someCacheIdentifier'; - $backend = $this->getMockBuilder(TaggableBackendInterface::class) - ->onlyMethods(['setCache', 'get', 'set', 'has', 'remove', 'findIdentifiersByTag', 'flush', 'flushByTag', 'flushByTags', 'collectGarbage']) - ->disableOriginalConstructor() - ->getMock(); - $backend->expects(self::once())->method('flushByTag')->with($tag); - $cache = $this->getMockBuilder(VariableFrontend::class) - ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove']) - ->setConstructorArgs([$identifier, $backend]) - ->getMock(); - $cache->flushByTag($tag); - } - - #[Test] - public function flushByTagsCallsBackendIfItIsATaggableBackend(): void - { - $tag = 'sometag'; - $identifier = 'someCacheIdentifier'; - $backend = $this->getMockBuilder(TaggableBackendInterface::class) - ->onlyMethods(['setCache', 'get', 'set', 'has', 'remove', 'findIdentifiersByTag', 'flush', 'flushByTag', 'flushByTags', 'collectGarbage']) - ->disableOriginalConstructor() - ->getMock(); - $backend->expects(self::once())->method('flushByTags')->with([$tag]); - $cache = $this->getMockBuilder(VariableFrontend::class) - ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove']) - ->setConstructorArgs([$identifier, $backend]) - ->getMock(); - $cache->flushByTags([$tag]); - } - - #[Test] - public function collectGarbageCallsBackend(): void - { - $identifier = 'someCacheIdentifier'; - $backend = $this->getMockBuilder(AbstractBackend::class) - ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage']) - ->addMethods(['findIdentifiersByTag', 'flushByTag']) - ->disableOriginalConstructor() - ->getMock(); - $backend->expects(self::once())->method('collectGarbage'); - $cache = $this->getMockBuilder(VariableFrontend::class) - ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove']) - ->setConstructorArgs([$identifier, $backend]) - ->getMock(); - $cache->collectGarbage(); - } - - #[Test] - public function invalidEntryIdentifiersAreRecognizedAsInvalid(): void - { - $identifier = 'someCacheIdentifier'; - $backend = $this->createMock(AbstractBackend::class); - $cache = $this->getMockBuilder(VariableFrontend::class) - ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove']) - ->setConstructorArgs([$identifier, $backend]) - ->getMock(); - foreach (['', 'abc def', 'foo!', 'bar:', 'some/', 'bla*', 'one+', 'äöü', str_repeat('x', 251), 'x$', '\\a', 'b#'] as $entryIdentifier) { - self::assertFalse($cache->isValidEntryIdentifier($entryIdentifier), 'Invalid identifier "' . $entryIdentifier . '" was not rejected.'); - } - } - - #[Test] - public function validEntryIdentifiersAreRecognizedAsValid(): void - { - $identifier = 'someCacheIdentifier'; - $backend = $this->createMock(AbstractBackend::class); - $cache = $this->getMockBuilder(VariableFrontend::class) - ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove']) - ->setConstructorArgs([$identifier, $backend]) - ->getMock(); - foreach (['_', 'abcdef', 'foo', 'bar123', '3some', '_bl_a', 'some&', 'one%TWO', str_repeat('x', 250)] as $entryIdentifier) { - self::assertTrue($cache->isValidEntryIdentifier($entryIdentifier), 'Valid identifier "' . $entryIdentifier . '" was not accepted.'); - } - } - - #[Test] - public function invalidTagsAreRecognizedAsInvalid(): void - { - $identifier = 'someCacheIdentifier'; - $backend = $this->createMock(AbstractBackend::class); - $cache = $this->getMockBuilder(VariableFrontend::class) - ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove']) - ->setConstructorArgs([$identifier, $backend]) - ->getMock(); - foreach (['', 'abc def', 'foo!', 'bar:', 'some/', 'bla*', 'one+', 'äöü', str_repeat('x', 251), 'x$', '\\a', 'b#'] as $tag) { - self::assertFalse($cache->isValidTag($tag), 'Invalid tag "' . $tag . '" was not rejected.'); - } - } - - #[Test] - public function validTagsAreRecognizedAsValid(): void - { - $identifier = 'someCacheIdentifier'; - $backend = $this->createMock(AbstractBackend::class); - $cache = $this->getMockBuilder(VariableFrontend::class) - ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove']) - ->setConstructorArgs([$identifier, $backend]) - ->getMock(); - foreach (['abcdef', 'foo-bar', 'foo_baar', 'bar123', '3some', 'file%Thing', 'some&', '%x%', str_repeat('x', 250)] as $tag) { - self::assertTrue($cache->isValidTag($tag), 'Valid tag "' . $tag . '" was not accepted.'); - } - } -} diff --git a/typo3/sysext/core/Tests/Unit/Cache/Frontend/PhpFrontendTest.php b/typo3/sysext/core/Tests/Unit/Cache/Frontend/PhpFrontendTest.php index 56364d94a6c7..775e0c3dce0d 100644 --- a/typo3/sysext/core/Tests/Unit/Cache/Frontend/PhpFrontendTest.php +++ b/typo3/sysext/core/Tests/Unit/Cache/Frontend/PhpFrontendTest.php @@ -17,31 +17,222 @@ declare(strict_types=1); namespace TYPO3\CMS\Core\Tests\Unit\Cache\Frontend; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\Test; +use TYPO3\CMS\Core\Cache\Backend\FileBackend; use TYPO3\CMS\Core\Cache\Backend\PhpCapableBackendInterface; use TYPO3\CMS\Core\Cache\Backend\SimpleFileBackend; use TYPO3\CMS\Core\Cache\Exception\InvalidDataException; use TYPO3\CMS\Core\Cache\Frontend\PhpFrontend; -use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; -/** - * Testcase for the PHP source code cache frontend - */ final class PhpFrontendTest extends UnitTestCase { + public static function constructAcceptsValidIdentifiersDataProvider(): array + { + return [ + ['x'], + ['someValue'], + ['123fivesixseveneight'], + ['some&'], + ['ab_cd%'], + [rawurlencode('resource://some/äöü$&% sadf')], + [str_repeat('x', 250)], + ]; + } + + #[Test] + #[DataProvider('constructAcceptsValidIdentifiersDataProvider')] + public function constructAcceptsValidIdentifiers(string $identifier): void + { + new PhpFrontend($identifier, $this->createMock(PhpCapableBackendInterface::class)); + } + + public static function constructRejectsInvalidIdentifiersDataProvider(): array + { + return [ + [''], + ['abc def'], + ['foo!'], + ['bar:'], + ['some/'], + ['bla*'], + ['one+'], + ['äöü'], + [str_repeat('x', 251)], + ['x$'], + ['\\a'], + ['b#'], + ]; + } + + #[Test] + #[DataProvider('constructRejectsInvalidIdentifiersDataProvider')] + public function constructRejectsInvalidIdentifiers(string $identifier): void + { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionCode(1203584729); + new PhpFrontend($identifier, $this->createMock(PhpCapableBackendInterface::class)); + } + + #[Test] + public function flushCallsBackend(): void + { + $backend = $this->createMock(PhpCapableBackendInterface::class); + $backend->expects(self::once())->method('flush'); + $cache = new PhpFrontend('someCacheIdentifier', $backend); + $cache->flush(); + } + + #[Test] + public function flushByTagRejectsInvalidTags(): void + { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionCode(1233057359); + $backend = $this->createMock(FileBackend::class); + $backend->expects(self::never())->method('flushByTag'); + $cache = new PhpFrontend('someCacheIdentifier', $backend); + $cache->flushByTag('SomeInvalid\\Tag'); + } + + #[Test] + public function flushByTagCallsBackendIfItIsATaggableBackend(): void + { + $tag = 'someTag'; + $backend = $this->createMock(FileBackend::class); + $backend->expects(self::once())->method('flushByTag')->with($tag); + $cache = new PhpFrontend('someCacheIdentifier', $backend); + $cache->flushByTag($tag); + } + + #[Test] + public function flushByTagsCallsBackendIfItIsATaggableBackend(): void + { + $tag = 'someTag'; + $backend = $this->createMock(FileBackend::class); + $backend->expects(self::once())->method('flushByTags')->with([$tag]); + $cache = new PhpFrontend('someCacheIdentifier', $backend); + $cache->flushByTags([$tag]); + } + + #[Test] + public function collectGarbageCallsBackend(): void + { + $backend = $this->createMock(PhpCapableBackendInterface::class); + $backend->expects(self::once())->method('collectGarbage'); + $cache = new PhpFrontend('someCacheIdentifier', $backend); + $cache->collectGarbage(); + } + + public static function isValidEntryIdentifierReturnsFalseWithValidIdentifierDataProvider(): array + { + return [ + [''], + ['abc def'], + ['foo!'], + ['bar:'], + ['some/'], + ['bla*'], + ['one+'], + ['äöü'], + [str_repeat('x', 251)], + ['x$'], + ['\\a'], + ['b#'], + ]; + } + + #[Test] + #[DataProvider('isValidEntryIdentifierReturnsFalseWithValidIdentifierDataProvider')] + public function isValidEntryIdentifierReturnsFalseWithValidIdentifier(string $identifier): void + { + $backend = $this->createMock(PhpCapableBackendInterface::class); + $cache = new PhpFrontend('someCacheIdentifier', $backend); + self::assertFalse($cache->isValidEntryIdentifier($identifier)); + } + + public static function isValidEntryIdentifierReturnsTrueWithValidIdentifierDataProvider(): array + { + return [ + ['_'], + ['abcdef'], + ['foo'], + ['bar123'], + ['3some'], + ['_bl_a'], + ['some&'], + ['one%TWO'], + [str_repeat('x', 250)], + ]; + } + + #[Test] + #[DataProvider('isValidEntryIdentifierReturnsTrueWithValidIdentifierDataProvider')] + public function isValidEntryIdentifierReturnsTrueWithValidIdentifier(string $identifier): void + { + $backend = $this->createMock(PhpCapableBackendInterface::class); + $cache = new PhpFrontend('someCacheIdentifier', $backend); + self::assertTrue($cache->isValidEntryIdentifier($identifier)); + } + + public static function isValidTagReturnsFalseWithInvalidTagDataProvider(): array + { + return [ + [''], + ['abc def'], + ['foo!'], + ['bar:'], + ['some/'], + ['bla*'], + ['one+'], + ['äöü'], + [str_repeat('x', 251)], + ['x$'], + ['\\a'], + ['b#'], + ]; + } + + #[Test] + #[DataProvider('isValidTagReturnsFalseWithInvalidTagDataProvider')] + public function isValidTagReturnsFalseWithInvalidTag(string $tag): void + { + $backend = $this->createMock(PhpCapableBackendInterface::class); + $cache = new PhpFrontend('someCacheIdentifier', $backend); + self::assertFalse($cache->isValidTag($tag)); + } + + public static function isValidTagReturnsTrueWithValidTagDataProvider(): array + { + return [ + ['abcdef'], + ['foo-bar'], + ['foo_baar'], + ['bar123'], + ['3some'], + ['file%Thing'], + ['some&'], + ['%x%'], + [str_repeat('x', 250)], + ]; + } + + #[Test] + #[DataProvider('isValidTagReturnsTrueWithValidTagDataProvider')] + public function isValidTagReturnsTrueWithValidTag(string $tag): void + { + $backend = $this->createMock(PhpCapableBackendInterface::class); + $cache = new PhpFrontend('someCacheIdentifier', $backend); + self::assertTrue($cache->isValidTag($tag)); + } + #[Test] public function setChecksIfTheIdentifierIsValid(): void { $this->expectException(\InvalidArgumentException::class); $this->expectExceptionCode(1264023823); - - $cache = $this->getMockBuilder(PhpFrontend::class) - ->onlyMethods(['isValidEntryIdentifier']) - ->disableOriginalConstructor() - ->getMock(); - $cache->expects(self::once())->method('isValidEntryIdentifier')->with('foo')->willReturn(false); - $cache->set('foo', 'bar'); + $cache = new PhpFrontend('someCacheIdentifier', $this->createMock(PhpCapableBackendInterface::class)); + $cache->set('invalid identifier', 'bar'); } #[Test] @@ -51,7 +242,7 @@ final class PhpFrontendTest extends UnitTestCase $modifiedSourceCode = '<?php' . chr(10) . $originalSourceCode . chr(10) . '#'; $mockBackend = $this->createMock(PhpCapableBackendInterface::class); $mockBackend->expects(self::once())->method('set')->with('Foo-Bar', $modifiedSourceCode, ['tags'], 1234); - $cache = GeneralUtility::makeInstance(PhpFrontend::class, 'PhpFrontend', $mockBackend); + $cache = new PhpFrontend('someCacheIdentifier', $mockBackend); $cache->set('Foo-Bar', $originalSourceCode, ['tags'], 1234); } @@ -60,11 +251,7 @@ final class PhpFrontendTest extends UnitTestCase { $this->expectException(InvalidDataException::class); $this->expectExceptionCode(1264023824); - - $cache = $this->getMockBuilder(PhpFrontend::class) - ->addMethods(['dummy']) - ->disableOriginalConstructor() - ->getMock(); + $cache = new PhpFrontend('someCacheIdentifier', $this->createMock(PhpCapableBackendInterface::class)); $cache->set('Foo-Bar', []); } @@ -73,7 +260,7 @@ final class PhpFrontendTest extends UnitTestCase { $mockBackend = $this->createMock(PhpCapableBackendInterface::class); $mockBackend->expects(self::once())->method('requireOnce')->with('Foo-Bar')->willReturn('hello world!'); - $cache = GeneralUtility::makeInstance(PhpFrontend::class, 'PhpFrontend', $mockBackend); + $cache = new PhpFrontend('someCacheIdentifier', $mockBackend); $result = $cache->requireOnce('Foo-Bar'); self::assertSame('hello world!', $result); } @@ -83,7 +270,7 @@ final class PhpFrontendTest extends UnitTestCase { $mockBackend = $this->createMock(SimpleFileBackend::class); $mockBackend->expects(self::once())->method('require')->with('Foo-Bar')->willReturn('hello world!'); - $cache = GeneralUtility::makeInstance(PhpFrontend::class, 'PhpFrontend', $mockBackend); + $cache = new PhpFrontend('someCacheIdentifier', $mockBackend); $result = $cache->require('Foo-Bar'); self::assertSame('hello world!', $result); } diff --git a/typo3/sysext/core/Tests/Unit/Cache/Frontend/VariableFrontendTest.php b/typo3/sysext/core/Tests/Unit/Cache/Frontend/VariableFrontendTest.php index 3e3e59d84842..0d9ea0eeb46a 100644 --- a/typo3/sysext/core/Tests/Unit/Cache/Frontend/VariableFrontendTest.php +++ b/typo3/sysext/core/Tests/Unit/Cache/Frontend/VariableFrontendTest.php @@ -17,38 +17,228 @@ declare(strict_types=1); namespace TYPO3\CMS\Core\Tests\Unit\Cache\Frontend; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\Test; -use TYPO3\CMS\Core\Cache\Backend\AbstractBackend; +use TYPO3\CMS\Core\Cache\Backend\BackendInterface; +use TYPO3\CMS\Core\Cache\Backend\TaggableBackendInterface; use TYPO3\CMS\Core\Cache\Frontend\VariableFrontend; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; final class VariableFrontendTest extends UnitTestCase { + public static function constructAcceptsValidIdentifiersDataProvider(): array + { + return [ + ['x'], + ['someValue'], + ['123fivesixseveneight'], + ['some&'], + ['ab_cd%'], + [rawurlencode('resource://some/äöü$&% sadf')], + [str_repeat('x', 250)], + ]; + } + + #[Test] + #[DataProvider('constructAcceptsValidIdentifiersDataProvider')] + public function constructAcceptsValidIdentifiers(string $identifier): void + { + new VariableFrontend($identifier, $this->createMock(BackendInterface::class)); + } + + public static function constructRejectsInvalidIdentifiersDataProvider(): array + { + return [ + [''], + ['abc def'], + ['foo!'], + ['bar:'], + ['some/'], + ['bla*'], + ['one+'], + ['äöü'], + [str_repeat('x', 251)], + ['x$'], + ['\\a'], + ['b#'], + ]; + } + + #[Test] + #[DataProvider('constructRejectsInvalidIdentifiersDataProvider')] + public function constructRejectsInvalidIdentifiers(string $identifier): void + { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionCode(1203584729); + new VariableFrontend($identifier, $this->createMock(BackendInterface::class)); + } + + #[Test] + public function flushCallsBackend(): void + { + $backend = $this->createMock(BackendInterface::class); + $backend->expects(self::once())->method('flush'); + $cache = new VariableFrontend('someCacheIdentifier', $backend); + $cache->flush(); + } + + #[Test] + public function flushByTagRejectsInvalidTags(): void + { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionCode(1233057359); + $backend = $this->createMock(TaggableBackendInterface::class); + $backend->expects(self::never())->method('flushByTag'); + $cache = new VariableFrontend('someCacheIdentifier', $backend); + $cache->flushByTag('SomeInvalid\\Tag'); + } + + #[Test] + public function flushByTagCallsBackendIfItIsATaggableBackend(): void + { + $tag = 'someTag'; + $backend = $this->createMock(TaggableBackendInterface::class); + $backend->expects(self::once())->method('flushByTag')->with($tag); + $cache = new VariableFrontend('someCacheIdentifier', $backend); + $cache->flushByTag($tag); + } + + #[Test] + public function flushByTagsCallsBackendIfItIsATaggableBackend(): void + { + $tag = 'someTag'; + $backend = $this->createMock(TaggableBackendInterface::class); + $backend->expects(self::once())->method('flushByTags')->with([$tag]); + $cache = new VariableFrontend('someCacheIdentifier', $backend); + $cache->flushByTags([$tag]); + } + + #[Test] + public function collectGarbageCallsBackend(): void + { + $backend = $this->createMock(BackendInterface::class); + $backend->expects(self::once())->method('collectGarbage'); + $cache = new VariableFrontend('someCacheIdentifier', $backend); + $cache->collectGarbage(); + } + + public static function isValidEntryIdentifierReturnsFalseWithValidIdentifierDataProvider(): array + { + return [ + [''], + ['abc def'], + ['foo!'], + ['bar:'], + ['some/'], + ['bla*'], + ['one+'], + ['äöü'], + [str_repeat('x', 251)], + ['x$'], + ['\\a'], + ['b#'], + ]; + } + + #[Test] + #[DataProvider('isValidEntryIdentifierReturnsFalseWithValidIdentifierDataProvider')] + public function isValidEntryIdentifierReturnsFalseWithValidIdentifier(string $identifier): void + { + $backend = $this->createMock(BackendInterface::class); + $cache = new VariableFrontend('someCacheIdentifier', $backend); + self::assertFalse($cache->isValidEntryIdentifier($identifier)); + } + + public static function isValidEntryIdentifierReturnsTrueWithValidIdentifierDataProvider(): array + { + return [ + ['_'], + ['abcdef'], + ['foo'], + ['bar123'], + ['3some'], + ['_bl_a'], + ['some&'], + ['one%TWO'], + [str_repeat('x', 250)], + ]; + } + + #[Test] + #[DataProvider('isValidEntryIdentifierReturnsTrueWithValidIdentifierDataProvider')] + public function isValidEntryIdentifierReturnsTrueWithValidIdentifier(string $identifier): void + { + $backend = $this->createMock(BackendInterface::class); + $cache = new VariableFrontend('someCacheIdentifier', $backend); + self::assertTrue($cache->isValidEntryIdentifier($identifier)); + } + + public static function isValidTagReturnsFalseWithInvalidTagDataProvider(): array + { + return [ + [''], + ['abc def'], + ['foo!'], + ['bar:'], + ['some/'], + ['bla*'], + ['one+'], + ['äöü'], + [str_repeat('x', 251)], + ['x$'], + ['\\a'], + ['b#'], + ]; + } + + #[Test] + #[DataProvider('isValidTagReturnsFalseWithInvalidTagDataProvider')] + public function isValidTagReturnsFalseWithInvalidTag(string $tag): void + { + $backend = $this->createMock(BackendInterface::class); + $cache = new VariableFrontend('someCacheIdentifier', $backend); + self::assertFalse($cache->isValidTag($tag)); + } + + public static function isValidTagReturnsTrueWithValidTagDataProvider(): array + { + return [ + ['abcdef'], + ['foo-bar'], + ['foo_baar'], + ['bar123'], + ['3some'], + ['file%Thing'], + ['some&'], + ['%x%'], + [str_repeat('x', 250)], + ]; + } + + #[Test] + #[DataProvider('isValidTagReturnsTrueWithValidTagDataProvider')] + public function isValidTagReturnsTrueWithValidTag(string $tag): void + { + $backend = $this->createMock(BackendInterface::class); + $cache = new VariableFrontend('someCacheIdentifier', $backend); + self::assertTrue($cache->isValidTag($tag)); + } + #[Test] public function setChecksIfTheIdentifierIsValid(): void { $this->expectException(\InvalidArgumentException::class); $this->expectExceptionCode(1233058264); - - $cache = $this->getMockBuilder(VariableFrontend::class) - ->onlyMethods(['isValidEntryIdentifier']) - ->disableOriginalConstructor() - ->getMock(); - $cache->expects(self::once())->method('isValidEntryIdentifier')->with('foo')->willReturn(false); - $cache->set('foo', 'bar'); + $cache = new VariableFrontend('someCacheIdentifier', $this->createMock(BackendInterface::class)); + $cache->set('invalid identifier', 'bar'); } #[Test] public function setPassesSerializedStringToBackend(): void { $theString = 'Just some value'; - $backend = $this->getMockBuilder(AbstractBackend::class) - ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage']) - ->addMethods(['findIdentifiersByTag', 'flushByTag']) - ->disableOriginalConstructor() - ->getMock(); - $backend->expects(self::once())->method('set')->with(self::equalTo('VariableCacheTest'), self::equalTo(serialize($theString))); - + $backend = $this->createMock(BackendInterface::class); + $backend->expects(self::once())->method('set')->with('VariableCacheTest', serialize($theString)); $cache = new VariableFrontend('VariableFrontend', $backend); $cache->set('VariableCacheTest', $theString); } @@ -57,13 +247,8 @@ final class VariableFrontendTest extends UnitTestCase public function setPassesSerializedArrayToBackend(): void { $theArray = ['Just some value', 'and another one.']; - $backend = $this->getMockBuilder(AbstractBackend::class) - ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage']) - ->addMethods(['findIdentifiersByTag', 'flushByTag']) - ->disableOriginalConstructor() - ->getMock(); - $backend->expects(self::once())->method('set')->with(self::equalTo('VariableCacheTest'), self::equalTo(serialize($theArray))); - + $backend = $this->createMock(BackendInterface::class); + $backend->expects(self::once())->method('set')->with('VariableCacheTest', serialize($theArray)); $cache = new VariableFrontend('VariableFrontend', $backend); $cache->set('VariableCacheTest', $theArray); } @@ -73,13 +258,8 @@ final class VariableFrontendTest extends UnitTestCase { $theString = 'Just some value'; $theLifetime = 1234; - $backend = $this->getMockBuilder(AbstractBackend::class) - ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage']) - ->addMethods(['findIdentifiersByTag', 'flushByTag']) - ->disableOriginalConstructor() - ->getMock(); - $backend->expects(self::once())->method('set')->with(self::equalTo('VariableCacheTest'), self::equalTo(serialize($theString)), self::equalTo([]), self::equalTo($theLifetime)); - + $backend = $this->createMock(BackendInterface::class); + $backend->expects(self::once())->method('set')->with('VariableCacheTest', serialize($theString), [], $theLifetime); $cache = new VariableFrontend('VariableFrontend', $backend); $cache->set('VariableCacheTest', $theString, [], $theLifetime); } @@ -87,73 +267,47 @@ final class VariableFrontendTest extends UnitTestCase #[Test] public function getFetchesStringValueFromBackend(): void { - $backend = $this->getMockBuilder(AbstractBackend::class) - ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage']) - ->addMethods(['findIdentifiersByTag', 'flushByTag']) - ->disableOriginalConstructor() - ->getMock(); + $backend = $this->createMock(BackendInterface::class); $backend->expects(self::once())->method('get')->willReturn(serialize('Just some value')); - $cache = new VariableFrontend('VariableFrontend', $backend); - self::assertEquals('Just some value', $cache->get('VariableCacheTest'), 'The returned value was not the expected string.'); + self::assertEquals('Just some value', $cache->get('VariableCacheTest')); } #[Test] public function getFetchesArrayValueFromBackend(): void { $theArray = ['Just some value', 'and another one.']; - $backend = $this->getMockBuilder(AbstractBackend::class) - ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage']) - ->addMethods(['findIdentifiersByTag', 'flushByTag']) - ->disableOriginalConstructor() - ->getMock(); + $backend = $this->createMock(BackendInterface::class); $backend->expects(self::once())->method('get')->willReturn(serialize($theArray)); - $cache = new VariableFrontend('VariableFrontend', $backend); - self::assertEquals($theArray, $cache->get('VariableCacheTest'), 'The returned value was not the expected unserialized array.'); + self::assertEquals($theArray, $cache->get('VariableCacheTest')); } #[Test] public function getFetchesFalseBooleanValueFromBackend(): void { - $backend = $this->getMockBuilder(AbstractBackend::class) - ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage']) - ->addMethods(['findIdentifiersByTag', 'flushByTag']) - ->disableOriginalConstructor() - ->getMock(); + $backend = $this->createMock(BackendInterface::class); $backend->expects(self::once())->method('get')->willReturn(serialize(false)); - $cache = new VariableFrontend('VariableFrontend', $backend); - self::assertFalse($cache->get('VariableCacheTest'), 'The returned value was not the FALSE.'); + self::assertFalse($cache->get('VariableCacheTest')); } #[Test] public function hasReturnsResultFromBackend(): void { - $backend = $this->getMockBuilder(AbstractBackend::class) - ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage']) - ->addMethods(['findIdentifiersByTag', 'flushByTag']) - ->disableOriginalConstructor() - ->getMock(); + $backend = $this->createMock(BackendInterface::class); $backend->expects(self::once())->method('has')->with(self::equalTo('VariableCacheTest'))->willReturn(true); - $cache = new VariableFrontend('VariableFrontend', $backend); - self::assertTrue($cache->has('VariableCacheTest'), 'has() did not return TRUE.'); + self::assertTrue($cache->has('VariableCacheTest')); } #[Test] public function removeCallsBackend(): void { $cacheIdentifier = 'someCacheIdentifier'; - $backend = $this->getMockBuilder(AbstractBackend::class) - ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage']) - ->addMethods(['findIdentifiersByTag', 'flushByTag']) - ->disableOriginalConstructor() - ->getMock(); - + $backend = $this->createMock(BackendInterface::class); $backend->expects(self::once())->method('remove')->with(self::equalTo($cacheIdentifier))->willReturn(true); - $cache = new VariableFrontend('VariableFrontend', $backend); - self::assertTrue($cache->remove($cacheIdentifier), 'remove() did not return TRUE'); + self::assertTrue($cache->remove($cacheIdentifier)); } } -- GitLab