From 39a386795a9db66e42412eaaf1bbea91952565f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20B=C3=BCrk?= <stefan@buerk.tech> Date: Fri, 22 Mar 2024 19:27:02 +0100 Subject: [PATCH] [TASK] Ensure correct SiteConfiguration in `SlugServiceTest.php` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It is possible, that the `SiteConfiguration` is retrieved from the `Dependency Injection container` by code executed before the test releated site configuration is written, which does not reset the instance based `SiteConfiguration->$firstLevelCache` property and later retrieving site configurations using the `SiteFinder`, for example in rootline and other operations, cannot find the test instance configurations. With #103470 this has been mitigated within the `SiteBasedTestTrait`, but `\TYPO3\CMS\Redirects\Tests\Functional\Service\SlugServiceTest` uses direct method for additional site configurations suffering from the very same issue. This change modifies the `SlugServiceTest` to retrieve the `SiteConfiguration` from the `Dependency Injection container` to ensure proper internal cache invalidation for SiteConfig write operations and additionally ensure cache invalidation by calling `SiteFinder->getAllSites(false)`. Resolves: #103471 Related: #103470 Releases: main, 12.4 Change-Id: I27075ad9f5640aaea07df81a97c8b0326fd76003 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/83574 Tested-by: Benni Mack <benni@typo3.org> Reviewed-by: Garvin Hicking <gh@faktor-e.de> Reviewed-by: Stefan Bürk <stefan@buerk.tech> Tested-by: Stefan Bürk <stefan@buerk.tech> Tested-by: core-ci <typo3@b13.com> Reviewed-by: Benni Mack <benni@typo3.org> Tested-by: Garvin Hicking <gh@faktor-e.de> --- .../Tests/Functional/Service/SlugServiceTest.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/typo3/sysext/redirects/Tests/Functional/Service/SlugServiceTest.php b/typo3/sysext/redirects/Tests/Functional/Service/SlugServiceTest.php index 55a7eeb695f1..160cfb46c0a3 100644 --- a/typo3/sysext/redirects/Tests/Functional/Service/SlugServiceTest.php +++ b/typo3/sysext/redirects/Tests/Functional/Service/SlugServiceTest.php @@ -29,6 +29,7 @@ use TYPO3\CMS\Core\EventDispatcher\ListenerProvider; use TYPO3\CMS\Core\LinkHandling\LinkService; use TYPO3\CMS\Core\Localization\LanguageServiceFactory; use TYPO3\CMS\Core\Routing\SiteMatcher; +use TYPO3\CMS\Core\Site\SiteFinder; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\StringUtility; use TYPO3\CMS\Redirects\Event\AfterAutoCreateRedirectHasBeenPersistedEvent; @@ -562,7 +563,7 @@ final class SlugServiceTest extends FunctionalTestCase 'rootPageId' => 1, 'base' => '/', ]; - $siteConfiguration = GeneralUtility::makeInstance(SiteConfiguration::class); + $siteConfiguration = $this->get(SiteConfiguration::class); $siteConfiguration->write('testing', $configuration); } @@ -572,7 +573,7 @@ final class SlugServiceTest extends FunctionalTestCase 'rootPageId' => 1, 'base' => '/sub-folder', ]; - $siteConfiguration = GeneralUtility::makeInstance(SiteConfiguration::class); + $siteConfiguration = $this->get(SiteConfiguration::class); $siteConfiguration->write('testing', $configuration); } @@ -583,7 +584,7 @@ final class SlugServiceTest extends FunctionalTestCase 'base' => '/', 'languages' => $this->languages, ]; - $siteConfiguration = GeneralUtility::makeInstance(SiteConfiguration::class); + $siteConfiguration = $this->get(SiteConfiguration::class); $siteConfiguration->write('testing', $configuration); } @@ -602,13 +603,14 @@ final class SlugServiceTest extends FunctionalTestCase 'base' => '/sub-folder', 'languages' => $languages, ]; - $siteConfiguration = GeneralUtility::makeInstance(SiteConfiguration::class); + $siteConfiguration = $this->get(SiteConfiguration::class); $siteConfiguration->write('testing', $configuration); } protected function createSubject(): void { - GeneralUtility::makeInstance(SiteMatcher::class)->refresh(); + $this->get(SiteMatcher::class)->refresh(); + $this->get(SiteFinder::class)->getAllSites(false); $this->subject = new SlugService( context: GeneralUtility::makeInstance(Context::class), pageRepository: GeneralUtility::makeInstance(PageRepository::class), -- GitLab