1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
<?php
use MediaWiki\WikiMap\WikiMap;
use Wikimedia\FileBackend\FSFileBackend;
/**
* Specificly for testing Media handlers. Sets up a FileRepo backend
*/
abstract class MediaWikiMediaTestCase extends MediaWikiIntegrationTestCase {
/** @var FileRepo */
protected $repo;
/** @var FSFileBackend */
protected $backend;
/** @var string */
protected $filePath;
protected function setUp(): void {
parent::setUp();
$this->filePath = $this->getFilePath();
$containers = [ 'data' => $this->filePath ];
if ( $this->createsThumbnails() ) {
// We need a temp directory for the thumbnails
// the container is named 'temp-thumb' because it is the
// thumb directory for a repo named "temp".
$containers['temp-thumb'] = $this->getNewTempDirectory();
}
$this->backend = new FSFileBackend( [
'name' => 'localtesting',
'wikiId' => WikiMap::getCurrentWikiId(),
'containerPaths' => $containers,
'tmpDirectory' => $this->getNewTempDirectory(),
'obResetFunc' => static function () {
// do nothing, we need the output buffer in tests
}
] );
$this->repo = new FileRepo( $this->getRepoOptions() );
}
/**
* @return array Argument for FileRepo constructor
*/
protected function getRepoOptions() {
return [
'name' => 'temp',
'url' => 'http://localhost/thumbtest',
'backend' => $this->backend
];
}
/**
* The result of this method will set the file path to use,
* as well as the protected member $filePath
*
* @return string Path where files are
*/
protected function getFilePath() {
return __DIR__ . '/../../data/media/';
}
/**
* Will the test create thumbnails (and thus do we need to set aside
* a temporary directory for them?)
*
* Override this method if your test case creates thumbnails
*
* @return bool
*/
protected function createsThumbnails() {
return false;
}
/**
* Utility function: Get a new file object for a file on disk but not actually in db.
*
* File must be in the path returned by getFilePath()
* @param string $name File name
* @param string|false $type MIME type [optional]
* @return UnregisteredLocalFile
*/
protected function dataFile( $name, $type = false ) {
return new UnregisteredLocalFile( false, $this->repo,
"mwstore://localtesting/data/$name", $type );
}
/**
* Get a mock LocalFile with the specified metadata, specified as a
* serialized string. The metadata-related methods will return this
* metadata. The behaviour of the other methods is undefined.
*
* @since 1.37
* @param string $metadata
* @return LocalFile
*/
protected function getMockFileWithMetadata( $metadata ) {
return new class( $metadata ) extends LocalFile {
public function __construct( $metadata ) {
$this->loadMetadataFromString( $metadata );
$this->dataLoaded = true;
}
};
}
}
|