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