Inject service LanguageConverterFactory in LanguagesHelper

Change-Id: I2fd1b4c3b25a94cca59d08216390652759859a62
This commit is contained in:
Fomafix 2024-03-02 19:34:53 +00:00
parent 751da83410
commit 52583a336d
3 changed files with 50 additions and 16 deletions

View file

@ -19,7 +19,7 @@
*/
namespace MediaWiki\Minerva;
use MediaWiki\MediaWikiServices;
use MediaWiki\Languages\LanguageConverterFactory;
use MediaWiki\Output\OutputPage;
use MediaWiki\Title\Title;
@ -29,15 +29,22 @@ use MediaWiki\Title\Title;
*/
class LanguagesHelper {
private LanguageConverterFactory $languageConverterFactory;
/**
* @var bool
*/
private $hasLanguages;
/**
* @param LanguageConverterFactory $languageConverterFactory
* @param OutputPage $out Output page to fetch language links
*/
public function __construct( OutputPage $out ) {
public function __construct(
LanguageConverterFactory $languageConverterFactory,
OutputPage $out
) {
$this->languageConverterFactory = $languageConverterFactory;
$this->hasLanguages = $out->getLanguageLinks() !== [];
}
@ -50,8 +57,7 @@ class LanguagesHelper {
if ( $this->hasLanguages ) {
return true;
}
$langConv = MediaWikiServices::getInstance()->getLanguageConverterFactory()
->getLanguageConverter( $title->getPageLanguage() );
$langConv = $this->languageConverterFactory->getLanguageConverter( $title->getPageLanguage() );
return $langConv->hasVariants();
}
}

View file

@ -151,8 +151,11 @@ return [
RequestContext::getMain()
);
},
'Minerva.LanguagesHelper' => static function (): LanguagesHelper {
return new LanguagesHelper( RequestContext::getMain()->getOutput() );
'Minerva.LanguagesHelper' => static function ( MediaWikiServices $services ): LanguagesHelper {
return new LanguagesHelper(
$services->getLanguageConverterFactory(),
RequestContext::getMain()->getOutput()
);
},
'Minerva.SkinOptions' => static function (): SkinOptions {
return new SkinOptions();

View file

@ -31,17 +31,24 @@ class LanguagesHelperTest extends MediaWikiIntegrationTestCase {
}
/**
* Build test Title object
* Build test LanguageConverterFactory object
* @param bool $hasVariants
* @return Title
* @return LanguageConverterFactory
*/
private function getTitle( $hasVariants ) {
private function getLanguageConverterFactory( $hasVariants ) {
$langConv = $this->createMock( ILanguageConverter::class );
$langConv->method( 'hasVariants' )->willReturn( $hasVariants );
$langConvFactory = $this->createMock( LanguageConverterFactory::class );
$langConvFactory->method( 'getLanguageConverter' )->willReturn( $langConv );
$this->setService( 'LanguageConverterFactory', $langConvFactory );
return $langConvFactory;
}
/**
* Build test Title object
* @return Title
*/
private function getTitle() {
$languageMock = $this->createMock( Language::class );
$title = $this->createMock( Title::class );
$title->method( 'getPageLanguage' )
@ -55,10 +62,19 @@ class LanguagesHelperTest extends MediaWikiIntegrationTestCase {
* @covers ::doesTitleHasLanguagesOrVariants
*/
public function testReturnsWhenOutputPageHasLangLinks() {
$helper = new LanguagesHelper( $this->getOutput( [ 'pl:StronaTestowa', 'en:TestPage' ] ) );
$helper = new LanguagesHelper(
$this->getLanguageConverterFactory( false ),
$this->getOutput( [ 'pl:StronaTestowa', 'en:TestPage' ] )
);
$this->assertTrue( $helper->doesTitleHasLanguagesOrVariants( $this->getTitle( false ) ) );
$this->assertTrue( $helper->doesTitleHasLanguagesOrVariants( $this->getTitle( true ) ) );
$this->assertTrue( $helper->doesTitleHasLanguagesOrVariants( $this->getTitle() ) );
$helper = new LanguagesHelper(
$this->getLanguageConverterFactory( true ),
$this->getOutput( [ 'pl:StronaTestowa', 'en:TestPage' ] )
);
$this->assertTrue( $helper->doesTitleHasLanguagesOrVariants( $this->getTitle() ) );
}
/**
@ -66,11 +82,20 @@ class LanguagesHelperTest extends MediaWikiIntegrationTestCase {
* @covers ::doesTitleHasLanguagesOrVariants
*/
public function testReturnsWhenOutputDoesNotHaveLangLinks() {
$helper = new LanguagesHelper( $this->getOutput( [] ) );
$helper = new LanguagesHelper(
$this->getLanguageConverterFactory( false ),
$this->getOutput( [] )
);
$this->assertFalse( $helper->doesTitleHasLanguagesOrVariants(
$this->getTitle( false ) ) );
$this->getTitle() ) );
$helper = new LanguagesHelper(
$this->getLanguageConverterFactory( true ),
$this->getOutput( [] )
);
$this->assertTrue( $helper->doesTitleHasLanguagesOrVariants(
$this->getTitle( true ) ) );
$this->getTitle() ) );
}
}