wiki.techinc.nl/tests/phpunit/includes/filerepo/MigrateFileRepoLayoutTest.php
Seb35 ec215d010c Replace mocks of DatabaseMysql by DatabaseMysqli
The class DatabaseMysql corresponds to the PHP extension 'mysql' which is
deprecated since PHP 5.5, and the class DatabaseMysqli corresponds to the
PHP extension 'mysqli' which is the current MySQL driver. Given the class
DatabaseMysql is likely to be removed in the future, this change is a
first step towards this.

Bug: T120333
Change-Id: I7b8363838449cae09b360221d8f50ace3a008f11
2016-12-31 12:52:16 +01:00

137 lines
3.3 KiB
PHP

<?php
class MigrateFileRepoLayoutTest extends MediaWikiTestCase {
protected $tmpPrefix;
protected $migratorMock;
protected $tmpFilepath;
protected $text = 'testing';
protected function setUp() {
parent::setUp();
$filename = 'Foo.png';
$this->tmpPrefix = $this->getNewTempDirectory();
$backend = new FSFileBackend( [
'name' => 'local-migratefilerepolayouttest',
'wikiId' => wfWikiID(),
'containerPaths' => [
'migratefilerepolayouttest-original' => "{$this->tmpPrefix}-original",
'migratefilerepolayouttest-public' => "{$this->tmpPrefix}-public",
'migratefilerepolayouttest-thumb' => "{$this->tmpPrefix}-thumb",
'migratefilerepolayouttest-temp' => "{$this->tmpPrefix}-temp",
'migratefilerepolayouttest-deleted' => "{$this->tmpPrefix}-deleted",
]
] );
$dbMock = $this->getMockBuilder( 'DatabaseMysqli' )
->disableOriginalConstructor()
->getMock();
$imageRow = new stdClass;
$imageRow->img_name = $filename;
$imageRow->img_sha1 = sha1( $this->text );
$dbMock->expects( $this->any() )
->method( 'select' )
->will( $this->onConsecutiveCalls(
new FakeResultWrapper( [ $imageRow ] ), // image
new FakeResultWrapper( [] ), // image
new FakeResultWrapper( [] ) // filearchive
) );
$repoMock = $this->getMock( 'LocalRepo',
[ 'getMasterDB' ],
[ [
'name' => 'migratefilerepolayouttest',
'backend' => $backend
] ] );
$repoMock
->expects( $this->any() )
->method( 'getMasterDB' )
->will( $this->returnValue( $dbMock ) );
$this->migratorMock = $this->getMock( 'MigrateFileRepoLayout', [ 'getRepo' ] );
$this->migratorMock
->expects( $this->any() )
->method( 'getRepo' )
->will( $this->returnValue( $repoMock ) );
$this->tmpFilepath = TempFSFile::factory(
'migratefilelayout-test-', 'png', wfTempDir() )->getPath();
file_put_contents( $this->tmpFilepath, $this->text );
$hashPath = $repoMock->getHashPath( $filename );
$status = $repoMock->store(
$this->tmpFilepath,
'public',
$hashPath . $filename,
FileRepo::OVERWRITE
);
}
protected function deleteFilesRecursively( $directory ) {
foreach ( glob( $directory . '/*' ) as $file ) {
if ( is_dir( $file ) ) {
$this->deleteFilesRecursively( $file );
} else {
unlink( $file );
}
}
rmdir( $directory );
}
protected function tearDown() {
foreach ( glob( $this->tmpPrefix . '*' ) as $directory ) {
$this->deleteFilesRecursively( $directory );
}
unlink( $this->tmpFilepath );
parent::tearDown();
}
public function testMigration() {
$this->migratorMock->loadParamsAndArgs(
null,
[ 'oldlayout' => 'name', 'newlayout' => 'sha1' ]
);
ob_start();
$this->migratorMock->execute();
ob_end_clean();
$sha1 = sha1( $this->text );
$expectedOriginalFilepath = $this->tmpPrefix
. '-original/'
. substr( $sha1, 0, 1 )
. '/'
. substr( $sha1, 1, 1 )
. '/'
. substr( $sha1, 2, 1 )
. '/'
. $sha1;
$this->assertEquals(
file_get_contents( $expectedOriginalFilepath ),
$this->text,
'New sha1 file should be exist and have the right contents'
);
$expectedPublicFilepath = $this->tmpPrefix . '-public/f/f8/Foo.png';
$this->assertEquals(
file_get_contents( $expectedPublicFilepath ),
$this->text,
'Existing name file should still and have the right contents'
);
}
}