wiki.techinc.nl/tests/phpunit/unit/includes/Revision/SlotRoleRegistryTest.php
Umherirrender e662614f95 Use explicit nullable type on parameter arguments
Implicitly marking parameter $... as nullable is deprecated in php8.4,
the explicit nullable type must be used instead

Created with autofix from Ide15839e98a6229c22584d1c1c88c690982e1d7a

Break one long line in SpecialPage.php

Bug: T376276
Change-Id: I807257b2ba1ab2744ab74d9572c9c3d3ac2a968e
2024-10-16 20:58:33 +02:00

164 lines
5.1 KiB
PHP

<?php
namespace MediaWiki\Tests\Unit\Revision;
use InvalidArgumentException;
use LogicException;
use MediaWiki\Content\IContentHandlerFactory;
use MediaWiki\HookContainer\HookContainer;
use MediaWiki\Revision\MainSlotRoleHandler;
use MediaWiki\Revision\SlotRecord;
use MediaWiki\Revision\SlotRoleHandler;
use MediaWiki\Revision\SlotRoleRegistry;
use MediaWiki\Storage\NameTableStore;
use MediaWiki\Title\Title;
use MediaWiki\Title\TitleFactory;
use MediaWikiUnitTestCase;
use Wikimedia\Assert\PostconditionException;
/**
* @covers \MediaWiki\Revision\SlotRoleRegistry
*/
class SlotRoleRegistryTest extends MediaWikiUnitTestCase {
private function makeNameTableStore( array $names = [] ) {
$mock = $this->createMock( NameTableStore::class );
$mock->method( 'getMap' )
->willReturn( $names );
return $mock;
}
private function newSlotRoleRegistry( ?NameTableStore $roleNameStore = null ) {
if ( !$roleNameStore ) {
$roleNameStore = $this->makeNameTableStore();
}
return new SlotRoleRegistry( $roleNameStore );
}
public function testDefineRole() {
$registry = $this->newSlotRoleRegistry();
$registry->defineRole( 'FOO', static function ( $role ) {
return new SlotRoleHandler( $role, 'FooModel' );
} );
$this->assertTrue( $registry->isDefinedRole( 'foo' ) );
$this->assertTrue( $registry->isDefinedRole( 'Foo' ) );
$this->assertContains( 'foo', $registry->getDefinedRoles() );
$this->assertContains( 'foo', $registry->getKnownRoles() );
$this->assertNotContains( 'FOO', $registry->getDefinedRoles() );
$this->assertNotContains( 'FOO', $registry->getKnownRoles() );
$handler = $registry->getRoleHandler( 'foo' );
$this->assertSame( 'foo', $handler->getRole() );
$handler = $registry->getRoleHandler( 'Foo' );
$this->assertSame( 'foo', $handler->getRole() );
$title = $this->createMock( Title::class );
$this->assertSame( 'FooModel', $handler->getDefaultModel( $title ) );
}
public function testDefineRoleFailsForDupe() {
$registry = $this->newSlotRoleRegistry();
$registry->defineRole( 'foo', static function ( $role ) {
return new SlotRoleHandler( $role, 'FooModel' );
} );
$this->expectException( LogicException::class );
$registry->defineRole( 'FOO', static function ( $role ) {
return new SlotRoleHandler( $role, 'FooModel' );
} );
}
public function testDefineRoleWithContentModel() {
$registry = $this->newSlotRoleRegistry();
$registry->defineRoleWithModel( 'FOO', 'FooModel' );
$this->assertTrue( $registry->isDefinedRole( 'foo' ) );
$this->assertContains( 'foo', $registry->getDefinedRoles() );
$this->assertContains( 'foo', $registry->getKnownRoles() );
$handler = $registry->getRoleHandler( 'foo' );
$this->assertSame( 'foo', $handler->getRole() );
/** @var Title $title */
$title = $this->createMock( Title::class );
$this->assertSame( 'FooModel', $handler->getDefaultModel( $title ) );
}
public function testGetRoleHandlerForUnknownModel() {
$registry = $this->newSlotRoleRegistry();
$this->expectException( InvalidArgumentException::class );
$registry->getRoleHandler( 'foo' );
}
public function testGetRoleHandlerFallbackHandler() {
$registry = $this->newSlotRoleRegistry(
$this->makeNameTableStore( [ 1 => 'foo' ] )
);
$handler = @$registry->getRoleHandler( 'foo' );
$this->assertSame( 'foo', $handler->getRole() );
}
public function testGetRoleHandlerWithBadInstantiator() {
$registry = $this->newSlotRoleRegistry();
$registry->defineRole( 'foo', static function ( $role ) {
return 'Not a SlotRoleHandler instance';
} );
$this->expectException( PostconditionException::class );
$registry->getRoleHandler( 'foo' );
}
public function testGetRequiredRoles() {
$registry = $this->newSlotRoleRegistry();
$registry->defineRole( SlotRecord::MAIN, function ( $role ) {
return new MainSlotRoleHandler(
[],
$this->createMock( IContentHandlerFactory::class ),
$this->createMock( HookContainer::class ),
$this->createMock( TitleFactory::class )
);
} );
$title = $this->createMock( Title::class );
$this->assertEquals( [ SlotRecord::MAIN ], $registry->getRequiredRoles( $title ) );
}
public function testGetAllowedRoles() {
$registry = $this->newSlotRoleRegistry();
$registry->defineRole( SlotRecord::MAIN, function ( $role ) {
return new MainSlotRoleHandler(
[],
$this->createMock( IContentHandlerFactory::class ),
$this->createMock( HookContainer::class ),
$this->createMock( TitleFactory::class )
);
} );
$registry->defineRoleWithModel( 'FOO', CONTENT_MODEL_TEXT );
$title = $this->createMock( Title::class );
$this->assertEquals( [ SlotRecord::MAIN, 'foo' ], $registry->getAllowedRoles( $title ) );
}
public function testGetKnownRoles() {
$registry = $this->newSlotRoleRegistry(
$this->makeNameTableStore( [ 1 => 'foo' ] )
);
$registry->defineRoleWithModel( 'BAR', CONTENT_MODEL_TEXT );
$this->assertTrue( $registry->isKnownRole( 'foo' ) );
$this->assertTrue( $registry->isKnownRole( 'bar' ) );
$this->assertTrue( $registry->isKnownRole( 'Bar' ) );
$this->assertFalse( $registry->isKnownRole( 'xyzzy' ) );
$this->assertArrayEquals( [ 'foo', 'bar' ], $registry->getKnownRoles() );
}
}