From: Brian Wolff Date: Thu, 3 Jul 2014 06:12:27 +0000 (-0300) Subject: Fix RepoGroup::hasForeignRepos() and RepoGroup::forEachForeignRepo() X-Git-Tag: 1.31.0-rc.0~15003^2~1 X-Git-Url: https://git.cyclocoop.org/%242?a=commitdiff_plain;h=2897061d1ebc8f1bf99ac99d871554f32bf1ddb3;hp=-c;p=lhc%2Fweb%2Fwiklou.git Fix RepoGroup::hasForeignRepos() and RepoGroup::forEachForeignRepo() Also add unit tests for those methods. Change-Id: Ic72be60d13820492efc90b5925bb5cfc1813d28a --- 2897061d1ebc8f1bf99ac99d871554f32bf1ddb3 diff --git a/includes/filerepo/RepoGroup.php b/includes/filerepo/RepoGroup.php index 103e78eb7b..65637df9e9 100644 --- a/includes/filerepo/RepoGroup.php +++ b/includes/filerepo/RepoGroup.php @@ -367,6 +367,9 @@ class RepoGroup { * @return bool */ function forEachForeignRepo( $callback, $params = array() ) { + if ( !$this->reposInitialised ) { + $this->initialiseRepos(); + } foreach ( $this->foreignRepos as $repo ) { $args = array_merge( array( $repo ), $params ); if ( call_user_func_array( $callback, $args ) ) { @@ -382,6 +385,9 @@ class RepoGroup { * @return bool */ function hasForeignRepos() { + if ( !$this->reposInitialised ) { + $this->initialiseRepos(); + } return (bool)$this->foreignRepos; } diff --git a/tests/phpunit/includes/filerepo/RepoGroupTest.php b/tests/phpunit/includes/filerepo/RepoGroupTest.php new file mode 100644 index 0000000000..2c5233841d --- /dev/null +++ b/tests/phpunit/includes/filerepo/RepoGroupTest.php @@ -0,0 +1,57 @@ +setMWGlobals( 'wgForeignFileRepos', array() ); + RepoGroup::destroySingleton(); + FileBackendGroup::destroySingleton(); + $this->assertFalse( RepoGroup::singleton()->hasForeignRepos() ); + } + + function testHasForeignRepoPositive() { + $this->setUpForeignRepo(); + $this->assertTrue( RepoGroup::singleton()->hasForeignRepos() ); + } + + function testForEachForeignRepo() { + $this->setUpForeignRepo(); + $fakeCallback = $this->getMock( 'RepoGroupTestHelper' ); + $fakeCallback->expects( $this->once() )->method( 'callback' ); + RepoGroup::singleton()->forEachForeignRepo( array( $fakeCallback, 'callback' ), array( array() ) ); + } + + function testForEachForeignRepoNone() { + $this->setMWGlobals( 'wgForeignFileRepos', array() ); + RepoGroup::destroySingleton(); + FileBackendGroup::destroySingleton(); + $fakeCallback = $this->getMock( 'RepoGroupTestHelper' ); + $fakeCallback->expects( $this->never() )->method( 'callback' ); + RepoGroup::singleton()->forEachForeignRepo( array( $fakeCallback, 'callback' ), array( array() ) ); + } + + private function setUpForeignRepo() { + global $wgUploadDirectory; + $this->setMWGlobals( 'wgForeignFileRepos', array( array( + 'class' => 'ForeignAPIRepo', + 'name' => 'wikimediacommons', + 'backend' => 'wikimediacommons-backend', + 'apibase' => 'https://commons.wikimedia.org/w/api.php', + 'hashLevels' => 2, + 'fetchDescription' => true, + 'descriptionCacheExpiry' => 43200, + 'apiThumbCacheExpiry' => 86400, + 'directory' => $wgUploadDirectory + ) ) ); + RepoGroup::destroySingleton(); + FileBackendGroup::destroySingleton(); + } +} + +/** + * Quick helper class to use as a mock callback for RepoGroup::singleton()->forEachForeignRepo. + */ +class RepoGroupTestHelper { + function callback( FileRepo $repo, array $foo ) { + return true; + } +}