]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - tests/phpunit/suites/UploadFromUrlTestSuite.php
MediaWiki 1.30.2-scripts
[autoinstalls/mediawiki.git] / tests / phpunit / suites / UploadFromUrlTestSuite.php
1 <?php
2
3 require_once dirname( __DIR__ ) . '/includes/upload/UploadFromUrlTest.php';
4
5 class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite {
6         public $savedGlobals = [];
7
8         public static function addTables( &$tables ) {
9                 $tables[] = 'user_properties';
10                 $tables[] = 'filearchive';
11                 $tables[] = 'logging';
12                 $tables[] = 'updatelog';
13                 $tables[] = 'iwlinks';
14
15                 return true;
16         }
17
18         protected function setUp() {
19                 global $wgParser, $wgParserConf, $IP, $messageMemc, $wgMemc, $wgUser,
20                         $wgLang, $wgOut, $wgRequest, $wgStyleDirectory,
21                         $wgParserCacheType, $wgNamespaceAliases, $wgNamespaceProtection,
22                         $parserMemc;
23
24                 $tmpDir = $this->getNewTempDirectory();
25                 $tmpGlobals = [];
26
27                 $tmpGlobals['wgScript'] = '/index.php';
28                 $tmpGlobals['wgScriptPath'] = '/';
29                 $tmpGlobals['wgArticlePath'] = '/wiki/$1';
30                 $tmpGlobals['wgStylePath'] = '/skins';
31                 $tmpGlobals['wgThumbnailScriptPath'] = false;
32                 $tmpGlobals['wgLocalFileRepo'] = [
33                         'class' => 'LocalRepo',
34                         'name' => 'local',
35                         'url' => 'http://example.com/images',
36                         'hashLevels' => 2,
37                         'transformVia404' => false,
38                         'backend' => new FSFileBackend( [
39                                 'name' => 'local-backend',
40                                 'wikiId' => wfWikiID(),
41                                 'containerPaths' => [
42                                         'local-public' => "{$tmpDir}/test-repo/public",
43                                         'local-thumb' => "{$tmpDir}/test-repo/thumb",
44                                         'local-temp' => "{$tmpDir}/test-repo/temp",
45                                         'local-deleted' => "{$tmpDir}/test-repo/delete",
46                                 ]
47                         ] ),
48                 ];
49                 foreach ( $tmpGlobals as $var => $val ) {
50                         if ( array_key_exists( $var, $GLOBALS ) ) {
51                                 $this->savedGlobals[$var] = $GLOBALS[$var];
52                         }
53                         $GLOBALS[$var] = $val;
54                 }
55
56                 $wgNamespaceProtection[NS_MEDIAWIKI] = 'editinterface';
57                 $wgNamespaceAliases['Image'] = NS_FILE;
58                 $wgNamespaceAliases['Image_talk'] = NS_FILE_TALK;
59
60                 $wgParserCacheType = CACHE_NONE;
61                 DeferredUpdates::clearPendingUpdates();
62                 $wgMemc = wfGetMainCache();
63                 $messageMemc = wfGetMessageCacheStorage();
64
65                 RequestContext::resetMain();
66                 $context = RequestContext::getMain();
67                 $wgUser = new User;
68                 $wgLang = $context->getLanguage();
69                 $wgOut = $context->getOutput();
70                 $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], [ $wgParserConf ] );
71                 $wgRequest = $context->getRequest();
72
73                 if ( $wgStyleDirectory === false ) {
74                         $wgStyleDirectory = "$IP/skins";
75                 }
76
77                 RepoGroup::destroySingleton();
78                 FileBackendGroup::destroySingleton();
79         }
80
81         protected function tearDown() {
82                 foreach ( $this->savedGlobals as $var => $val ) {
83                         $GLOBALS[$var] = $val;
84                 }
85                 // Restore backends
86                 RepoGroup::destroySingleton();
87                 FileBackendGroup::destroySingleton();
88
89                 parent::tearDown();
90         }
91
92         /**
93          * Delete the specified files, if they exist.
94          *
95          * @param array $files Full paths to files to delete.
96          */
97         private static function deleteFiles( $files ) {
98                 foreach ( $files as $file ) {
99                         if ( file_exists( $file ) ) {
100                                 unlink( $file );
101                         }
102                 }
103         }
104
105         /**
106          * Delete the specified directories, if they exist. Must be empty.
107          *
108          * @param array $dirs Full paths to directories to delete.
109          */
110         private static function deleteDirs( $dirs ) {
111                 foreach ( $dirs as $dir ) {
112                         if ( is_dir( $dir ) ) {
113                                 rmdir( $dir );
114                         }
115                 }
116         }
117
118         /**
119          * Create a dummy uploads directory which will contain a couple
120          * of files in order to pass existence tests.
121          *
122          * @return string The directory
123          */
124         private function setupUploadDir() {
125                 global $IP;
126
127                 $dir = $this->getNewTempDirectory();
128
129                 wfDebug( "Creating upload directory $dir\n" );
130
131                 wfMkdirParents( $dir . '/3/3a', null, __METHOD__ );
132                 copy( "$IP/tests/phpunit/data/upload/headbg.jpg", "$dir/3/3a/Foobar.jpg" );
133
134                 wfMkdirParents( $dir . '/0/09', null, __METHOD__ );
135                 copy( "$IP/tests/phpunit/data/upload/headbg.jpg", "$dir/0/09/Bad.jpg" );
136
137                 return $dir;
138         }
139
140         public static function suite() {
141                 // Hack to invoke the autoloader required to get phpunit to recognize
142                 // the UploadFromUrlTest class
143                 class_exists( 'UploadFromUrlTest' );
144                 $suite = new UploadFromUrlTestSuite( 'UploadFromUrlTest' );
145
146                 return $suite;
147         }
148 }