wiki.techinc.nl/tests/phpunit/includes/filerepo/file/LocalFileTest.php
Aryeh Gregor b4a7620b9e Hard-deprecate Title::getUserCaseDBKey
The only use-case for this was if the local wiki's File namespace didn't
allow initial-lowercase names but a remote repo did. This case is
unlikely to be useful and was broken anyway, so it's now prohibited, and
getUserCaseDBKey is no longer needed. It's now an alias for getDBkey
until we remove it.

This includes a breaking change to
MediaWikiTitleCodec::splitTitleString, but that was always intended as
an internal method and I have now marked it officially as such. There is
one caller in code search outside core (JsonConfig), but it looks like
it will be unaffected.

Bug: T202094
Depends-On: I4b8ceb8a7f4624d6a3763aca6df41bf1a0d7293f
Depends-On: I724be15e93421f874fb202f0ec2ca6940e56a20a
Change-Id: I4fd64d4b0036b6dabdcfeee18766df18bf538542
2019-10-24 19:26:37 +03:00

305 lines
9.2 KiB
PHP

<?php
/**
* These tests should work regardless of $wgCapitalLinks
* @todo Split tests into providers and test methods
*/
class LocalFileTest extends MediaWikiTestCase {
private static function getDefaultInfo() {
return [
'name' => 'test',
'directory' => '/testdir',
'url' => '/testurl',
'hashLevels' => 2,
'transformVia404' => false,
'backend' => new FSFileBackend( [
'name' => 'local-backend',
'wikiId' => wfWikiID(),
'containerPaths' => [
'cont1' => "/testdir/local-backend/tempimages/cont1",
'cont2' => "/testdir/local-backend/tempimages/cont2"
]
] )
];
}
/**
* @covers File::getHashPath
* @dataProvider provideGetHashPath
* @param string $expected
* @param bool $capitalLinks
* @param array $info
*/
public function testGetHashPath( $expected, $capitalLinks, array $info ) {
$this->setMwGlobals( 'wgCapitalLinks', $capitalLinks );
$this->assertSame( $expected, ( new LocalRepo( $info + self::getDefaultInfo() ) )
->newFile( 'test!' )->getHashPath() );
}
public static function provideGetHashPath() {
return [
[ '', true, [ 'hashLevels' => 0 ] ],
[ 'a/a2/', true, [ 'hashLevels' => 2 ] ],
[ 'c/c4/', false, [ 'initialCapital' => false ] ],
];
}
/**
* @covers File::getRel
* @dataProvider provideGetRel
* @param string $expected
* @param bool $capitalLinks
* @param array $info
*/
public function testGetRel( $expected, $capitalLinks, array $info ) {
$this->setMwGlobals( 'wgCapitalLinks', $capitalLinks );
$this->assertSame( $expected, ( new LocalRepo( $info + self::getDefaultInfo() ) )
->newFile( 'test!' )->getRel() );
}
public static function provideGetRel() {
return [
[ 'Test!', true, [ 'hashLevels' => 0 ] ],
[ 'a/a2/Test!', true, [ 'hashLevels' => 2 ] ],
[ 'c/c4/test!', false, [ 'initialCapital' => false ] ],
];
}
/**
* @covers File::getUrlRel
* @dataProvider provideGetUrlRel
* @param string $expected
* @param bool $capitalLinks
* @param array $info
*/
public function testGetUrlRel( $expected, $capitalLinks, array $info ) {
$this->setMwGlobals( 'wgCapitalLinks', $capitalLinks );
$this->assertSame( $expected, ( new LocalRepo( $info + self::getDefaultInfo() ) )
->newFile( 'test!' )->getUrlRel() );
}
public static function provideGetUrlRel() {
return [
[ 'Test%21', true, [ 'hashLevels' => 0 ] ],
[ 'a/a2/Test%21', true, [ 'hashLevels' => 2 ] ],
[ 'c/c4/test%21', false, [ 'initialCapital' => false ] ],
];
}
/**
* @covers File::getArchivePath
* @dataProvider provideGetArchivePath
* @param string $expected
* @param bool $capitalLinks
* @param array $info
* @param array $args
*/
public function testGetArchivePath( $expected, $capitalLinks, array $info, array $args ) {
$this->setMwGlobals( 'wgCapitalLinks', $capitalLinks );
$this->assertSame( $expected, ( new LocalRepo( $info + self::getDefaultInfo() ) )
->newFile( 'test!' )->getArchivePath( ...$args ) );
}
public static function provideGetArchivePath() {
return [
[ 'mwstore://local-backend/test-public/archive', true, [ 'hashLevels' => 0 ], [] ],
[ 'mwstore://local-backend/test-public/archive/a/a2', true, [ 'hashLevels' => 2 ], [] ],
[
'mwstore://local-backend/test-public/archive/!',
true, [ 'hashLevels' => 0 ], [ '!' ]
], [
'mwstore://local-backend/test-public/archive/a/a2/!',
true, [ 'hashLevels' => 2 ], [ '!' ]
],
];
}
/**
* @covers File::getThumbPath
* @dataProvider provideGetThumbPath
* @param string $expected
* @param bool $capitalLinks
* @param array $info
* @param array $args
*/
public function testGetThumbPath( $expected, $capitalLinks, array $info, array $args ) {
$this->setMwGlobals( 'wgCapitalLinks', $capitalLinks );
$this->assertSame( $expected, ( new LocalRepo( $info + self::getDefaultInfo() ) )
->newFile( 'test!' )->getThumbPath( ...$args ) );
}
public static function provideGetThumbPath() {
return [
[ 'mwstore://local-backend/test-thumb/Test!', true, [ 'hashLevels' => 0 ], [] ],
[ 'mwstore://local-backend/test-thumb/a/a2/Test!', true, [ 'hashLevels' => 2 ], [] ],
[
'mwstore://local-backend/test-thumb/Test!/x',
true, [ 'hashLevels' => 0 ], [ 'x' ]
], [
'mwstore://local-backend/test-thumb/a/a2/Test!/x',
true, [ 'hashLevels' => 2 ], [ 'x' ]
],
];
}
/**
* @covers File::getArchiveUrl
* @dataProvider provideGetArchiveUrl
* @param string $expected
* @param bool $capitalLinks
* @param array $info
* @param array $args
*/
public function testGetArchiveUrl( $expected, $capitalLinks, array $info, array $args ) {
$this->setMwGlobals( 'wgCapitalLinks', $capitalLinks );
$this->assertSame( $expected, ( new LocalRepo( $info + self::getDefaultInfo() ) )
->newFile( 'test!' )->getArchiveUrl( ...$args ) );
}
public static function provideGetArchiveUrl() {
return [
[ '/testurl/archive', true, [ 'hashLevels' => 0 ], [] ],
[ '/testurl/archive/a/a2', true, [ 'hashLevels' => 2 ], [] ],
[ '/testurl/archive/%21', true, [ 'hashLevels' => 0 ], [ '!' ] ],
[ '/testurl/archive/a/a2/%21', true, [ 'hashLevels' => 2 ], [ '!' ] ],
];
}
/**
* @covers File::getThumbUrl
* @dataProvider provideGetThumbUrl
* @param string $expected
* @param bool $capitalLinks
* @param array $info
* @param array $args
*/
public function testGetThumbUrl( $expected, $capitalLinks, array $info, array $args ) {
$this->setMwGlobals( 'wgCapitalLinks', $capitalLinks );
$this->assertSame( $expected, ( new LocalRepo( $info + self::getDefaultInfo() ) )
->newFile( 'test!' )->getThumbUrl( ...$args ) );
}
public static function provideGetThumbUrl() {
return [
[ '/testurl/thumb/Test%21', true, [ 'hashLevels' => 0 ], [] ],
[ '/testurl/thumb/a/a2/Test%21', true, [ 'hashLevels' => 2 ], [] ],
[ '/testurl/thumb/Test%21/x', true, [ 'hashLevels' => 0 ], [ 'x' ] ],
[ '/testurl/thumb/a/a2/Test%21/x', true, [ 'hashLevels' => 2 ], [ 'x' ] ],
];
}
/**
* @covers File::getArchiveVirtualUrl
* @dataProvider provideGetArchiveVirtualUrl
* @param string $expected
* @param bool $capitalLinks
* @param array $info
* @param array $args
*/
public function testGetArchiveVirtualUrl(
$expected, $capitalLinks, array $info, array $args
) {
$this->setMwGlobals( 'wgCapitalLinks', $capitalLinks );
$this->assertSame( $expected, ( new LocalRepo( $info + self::getDefaultInfo() ) )
->newFile( 'test!' )->getArchiveVirtualUrl( ...$args ) );
}
public static function provideGetArchiveVirtualUrl() {
return [
[ 'mwrepo://test/public/archive', true, [ 'hashLevels' => 0 ], [] ],
[ 'mwrepo://test/public/archive/a/a2', true, [ 'hashLevels' => 2 ], [] ],
[ 'mwrepo://test/public/archive/%21', true, [ 'hashLevels' => 0 ], [ '!' ] ],
[ 'mwrepo://test/public/archive/a/a2/%21', true, [ 'hashLevels' => 2 ], [ '!' ] ],
];
}
/**
* @covers File::getThumbVirtualUrl
* @dataProvider provideGetThumbVirtualUrl
* @param string $expected
* @param bool $capitalLinks
* @param array $info
* @param array $args
*/
public function testGetThumbVirtualUrl( $expected, $capitalLinks, array $info, array $args ) {
$this->setMwGlobals( 'wgCapitalLinks', $capitalLinks );
$this->assertSame( $expected, ( new LocalRepo( $info + self::getDefaultInfo() ) )
->newFile( 'test!' )->getThumbVirtualUrl( ...$args ) );
}
public static function provideGetThumbVirtualUrl() {
return [
[ 'mwrepo://test/thumb/Test%21', true, [ 'hashLevels' => 0 ], [] ],
[ 'mwrepo://test/thumb/a/a2/Test%21', true, [ 'hashLevels' => 2 ], [] ],
[ 'mwrepo://test/thumb/Test%21/%21', true, [ 'hashLevels' => 0 ], [ '!' ] ],
[ 'mwrepo://test/thumb/a/a2/Test%21/%21', true, [ 'hashLevels' => 2 ], [ '!' ] ],
];
}
/**
* @covers File::getUrl
* @dataProvider provideGetUrl
* @param string $expected
* @param bool $capitalLinks
* @param array $info
*/
public function testGetUrl( $expected, $capitalLinks, array $info ) {
$this->setMwGlobals( 'wgCapitalLinks', $capitalLinks );
$this->assertSame( $expected, ( new LocalRepo( $info + self::getDefaultInfo() ) )
->newFile( 'test!' )->getUrl() );
}
public static function provideGetUrl() {
return [
[ '/testurl/Test%21', true, [ 'hashLevels' => 0 ] ],
[ '/testurl/a/a2/Test%21', true, [ 'hashLevels' => 2 ] ],
];
}
/**
* @covers ::wfLocalFile
*/
public function testWfLocalFile() {
$file = wfLocalFile( "File:Some_file_that_probably_doesn't exist.png" );
$this->assertThat(
$file,
$this->isInstanceOf( LocalFile::class ),
'wfLocalFile() returns LocalFile for valid Titles'
);
}
/**
* @covers File::getUser
*/
public function testGetUserForNonExistingFile() {
$file = ( new LocalRepo( self::getDefaultInfo() ) )->newFile( 'test!' );
$this->assertSame( 'Unknown user', $file->getUser() );
$this->assertSame( 0, $file->getUser( 'id' ) );
}
/**
* @covers File::getUser
*/
public function testDescriptionShortUrlForNonExistingFile() {
$file = ( new LocalRepo( self::getDefaultInfo() ) )->newFile( 'test!' );
$this->assertNull( $file->getDescriptionShortUrl() );
}
/**
* @covers File::getUser
*/
public function testDescriptionTextForNonExistingFile() {
$file = ( new LocalRepo( self::getDefaultInfo() ) )->newFile( 'test!' );
$this->assertFalse( $file->getDescriptionText() );
}
}