From f3c34ee75e7d4cd84ea9608855473b9214e932f9 Mon Sep 17 00:00:00 2001 From: dena Date: Fri, 7 Nov 2025 12:03:46 +0100 Subject: [PATCH] extend mediawikihostresolver --- app/Services/MediaWikiHostResolver.php | 17 +++++++++++++---- tests/Services/MediaWikiHostResolverTest.php | 10 ++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/app/Services/MediaWikiHostResolver.php b/app/Services/MediaWikiHostResolver.php index 38bd64383..f83b6e284 100644 --- a/app/Services/MediaWikiHostResolver.php +++ b/app/Services/MediaWikiHostResolver.php @@ -10,6 +10,11 @@ */ class UnknownDBVersionException extends Exception {} +/** + * Exception thrown when a wiki is not found by domain in MediaWikiHostResolver. + */ +class UnknownWikiDomainException extends Exception {} + class MediaWikiHostResolver { // TODO: Move this mapping to a config file so that MW updates do not require code changes here. /** @var array Map of DB version strings to MediaWiki backend version strings */ @@ -18,6 +23,7 @@ class MediaWikiHostResolver { 'mw1.43-wbs1' => '143-app', ]; + // https://phabricator.wikimedia.org/T409530 // This service could have other methods in future, e.g. getBackendHostForWiki() // public function getBackendHostForWiki(Wiki $wiki): string { // return $this->getBackendHostForDomain($wiki->domain); @@ -29,10 +35,13 @@ public function getBackendHostForDomain(string $domain): string { } public function getMwVersionForDomain(string $domain): string { - $dbVersion = Wiki::where('domain', $domain) - ->first() - ->wikiDb - ->version; + $wiki = Wiki::where('domain', $domain)->first(); + + if (!$wiki) { + throw new UnknownWikiDomainException("Unknown Wiki Domain '{$domain}'."); + } + + $dbVersion = $wiki->wikiDb->version; if (array_key_exists($dbVersion, self::DB_VERSION_TO_MW_VERSION)) { return self::DB_VERSION_TO_MW_VERSION[$dbVersion]; diff --git a/tests/Services/MediaWikiHostResolverTest.php b/tests/Services/MediaWikiHostResolverTest.php index 826c5f1f7..d3dfe0023 100644 --- a/tests/Services/MediaWikiHostResolverTest.php +++ b/tests/Services/MediaWikiHostResolverTest.php @@ -4,6 +4,7 @@ use App\Services\MediaWikiHostResolver; use App\Services\UnknownDBVersionException; +use App\Services\UnknownWikiDomainException; use App\Wiki; use App\WikiDb; use Faker\Factory; @@ -43,4 +44,13 @@ public function testResolverThrowsIfUnableToFindHostInMap(): void { UnknownDBVersionException::class ); } + + public function testResolverThrowsIfUnableToFindWiki(): void { + $domain = (new Factory)->create()->unique()->text(30); + $resolver = new MediaWikiHostResolver; + $this->assertThrows( + fn () => $resolver->getBackendHostForDomain($domain), + UnknownWikiDomainException::class + ); + } }