jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/337857 )
Change subject: Retreive Info for file from API
......................................................................
Retreive Info for file from API
Change-Id: I2a9c9c7fe04b6940ec76d8cdfe0938826114dedc
---
M extension.json
M src/Generic/DispatchingImporter.php
A src/Generic/Exceptions/HttpRequestException.php
A src/Generic/Exceptions/ImportException.php
A src/Generic/Exceptions/ImportTargetException.php
A src/Generic/HttpRequestExecutor.php
D src/Generic/ImportTargetException.php
M src/Generic/Importer.php
A src/MediaWiki/ApiImporter.php
D src/MediaWiki/HostBasedSiteTableLookup.php
A src/MediaWiki/HttpApiLookup.php
D src/MediaWiki/MediaWikiImporter.php
A src/MediaWiki/SiteTableSiteLookup.php
M src/ServiceWiring.php
A tests/Generic/HttpRequestExecutorTest.php
R tests/MediaWiki/SiteTableSiteLookupTest.php
16 files changed, 518 insertions(+), 120 deletions(-)
Approvals:
WMDE-Fisch: Looks good to me, approved
jenkins-bot: Verified
diff --git a/extension.json b/extension.json
index 345c4b3..3830ed0 100644
--- a/extension.json
+++ b/extension.json
@@ -20,13 +20,17 @@
},
"AutoloadClasses": {
"FileImporter\\Generic\\DispatchingImporter":
"src/Generic/DispatchingImporter.php",
+ "FileImporter\\Generic\\Exceptions\\HttpRequestException":
"src/Generic/Exceptions/HttpRequestException.php",
+ "FileImporter\\Generic\\Exceptions\\ImportException":
"src/Generic/Exceptions/ImportException.php",
+ "FileImporter\\Generic\\Exceptions\\ImportTargetException":
"src/Generic/Exceptions/ImportTargetException.php",
"FileImporter\\Generic\\ImportAdjustments":
"src/Generic/ImportAdjustments.php",
"FileImporter\\Generic\\ImportDetails":
"src/Generic/ImportDetails.php",
"FileImporter\\Generic\\Importer": "src/Generic/Importer.php",
- "FileImporter\\Generic\\ImportTargetException":
"src/Generic/ImportTargetException.php",
+ "FileImporter\\Generic\\HttpRequestExecutor":
"src/Generic/HttpRequestExecutor.php",
"FileImporter\\Generic\\TargetUrl": "src/Generic/TargetUrl.php",
- "FileImporter\\MediaWiki\\HostBasedSiteTableLookup":
"src/MediaWiki/HostBasedSiteTableLookup.php",
- "FileImporter\\MediaWiki\\MediaWikiImporter":
"src/MediaWiki/MediaWikiImporter.php",
+ "FileImporter\\MediaWiki\\ApiImporter":
"src/MediaWiki/ApiImporter.php",
+ "FileImporter\\MediaWiki\\HttpApiLookup":
"src/MediaWiki/HttpApiLookup.php",
+ "FileImporter\\MediaWiki\\SiteTableSiteLookup":
"src/MediaWiki/SiteTableSiteLookup.php",
"FileImporter\\FileImporterHooks": "src/FileImporterHooks.php",
"FileImporter\\SpecialImportFile": "src/SpecialImportFile.php"
},
@@ -35,7 +39,7 @@
],
"config": {
"FileImporterImporterServices": [
- "FileImporterMediaWikiImporter"
+ "FileImporterMediaWikiApiImporter"
]
},
"ResourceModules": {
diff --git a/src/Generic/DispatchingImporter.php
b/src/Generic/DispatchingImporter.php
index 453cc78..a75764d 100644
--- a/src/Generic/DispatchingImporter.php
+++ b/src/Generic/DispatchingImporter.php
@@ -2,6 +2,8 @@
namespace FileImporter\Generic;
+use FileImporter\Generic\Exceptions\ImportTargetException;
+
class DispatchingImporter implements Importer {
/**
diff --git a/src/Generic/Exceptions/HttpRequestException.php
b/src/Generic/Exceptions/HttpRequestException.php
new file mode 100644
index 0000000..b965ee6
--- /dev/null
+++ b/src/Generic/Exceptions/HttpRequestException.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace FileImporter\Generic\Exceptions;
+
+class HttpRequestException extends ImportException {
+
+}
diff --git a/src/Generic/Exceptions/ImportException.php
b/src/Generic/Exceptions/ImportException.php
new file mode 100644
index 0000000..a8700af
--- /dev/null
+++ b/src/Generic/Exceptions/ImportException.php
@@ -0,0 +1,12 @@
+<?php
+
+namespace FileImporter\Generic\Exceptions;
+
+use RuntimeException;
+
+/**
+ * Generic Import exception
+ */
+class ImportException extends RuntimeException{
+
+}
diff --git a/src/Generic/Exceptions/ImportTargetException.php
b/src/Generic/Exceptions/ImportTargetException.php
new file mode 100644
index 0000000..5e857fb
--- /dev/null
+++ b/src/Generic/Exceptions/ImportTargetException.php
@@ -0,0 +1,12 @@
+<?php
+
+namespace FileImporter\Generic\Exceptions;
+
+use RuntimeException;
+
+/**
+ * Thrown in cases that the ImportTarget is not deemed to be acceptable
+ */
+class ImportTargetException extends ImportException{
+
+}
diff --git a/src/Generic/HttpRequestExecutor.php
b/src/Generic/HttpRequestExecutor.php
new file mode 100644
index 0000000..d6b8d9a
--- /dev/null
+++ b/src/Generic/HttpRequestExecutor.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace FileImporter\Generic;
+
+use FileImporter\Generic\Exceptions\HttpRequestException;
+use MWException;
+use MWHttpRequest;
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+use Psr\Log\NullLogger;
+
+class HttpRequestExecutor implements LoggerAwareInterface {
+
+ /**
+ * @var LoggerInterface
+ */
+ private $logger;
+
+ /**
+ * @var callable
+ */
+ private $requestFactoryCallable;
+
+ public function __construct() {
+ $this->requestFactoryCallable = [ MWHttpRequest::class,
'factory' ];
+ $this->logger = new NullLogger();
+ }
+
+ public function setLogger( LoggerInterface $logger ) {
+ $this->logger = $logger;
+ }
+
+ public function overrideRequestFactory( callable $callable ) {
+ if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+ throw new MWException(
+ 'Cannot override MWHttpRequest::factory
callback in operation.'
+ );
+ }
+ $this->requestFactoryCallable = $callable;
+ }
+
+ /**
+ * @param string $url
+ *
+ * @return MWHttpRequest
+ * @throws HttpRequestException
+ */
+ public function execute( $url ) {
+ /** @var MWHttpRequest $request */
+ $request = call_user_func(
+ $this->requestFactoryCallable,
+ $url,
+ [
+ 'logger' => $this->logger,
+ 'followRedirects' => true,
+ ],
+ __METHOD__
+ );
+
+ $status = $request->execute();
+ if ( !$status->isOK() ) {
+ throw new HttpRequestException();
+ }
+
+ return $request;
+ }
+
+}
diff --git a/src/Generic/ImportTargetException.php
b/src/Generic/ImportTargetException.php
deleted file mode 100644
index ce93391..0000000
--- a/src/Generic/ImportTargetException.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-
-namespace FileImporter\Generic;
-
-use RuntimeException;
-
-class ImportTargetException extends RuntimeException{
-
-}
diff --git a/src/Generic/Importer.php b/src/Generic/Importer.php
index e012c43..f5fe74b 100644
--- a/src/Generic/Importer.php
+++ b/src/Generic/Importer.php
@@ -2,6 +2,8 @@
namespace FileImporter\Generic;
+use FileImporter\Generic\Exceptions\ImportTargetException;
+
interface Importer {
/**
diff --git a/src/MediaWiki/ApiImporter.php b/src/MediaWiki/ApiImporter.php
new file mode 100644
index 0000000..e41ec00
--- /dev/null
+++ b/src/MediaWiki/ApiImporter.php
@@ -0,0 +1,145 @@
+<?php
+
+namespace FileImporter\MediaWiki;
+
+use FileImporter\Generic\HttpRequestExecutor;
+use FileImporter\Generic\ImportAdjustments;
+use FileImporter\Generic\ImportDetails;
+use FileImporter\Generic\Importer;
+use FileImporter\Generic\TargetUrl;
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+use Psr\Log\NullLogger;
+
+class ApiImporter implements Importer, LoggerAwareInterface {
+
+ /**
+ * @var SiteTableSiteLookup
+ */
+ private $siteTableSiteLookup;
+
+ /**
+ * @var HttpApiLookup
+ */
+ private $httpApiLookup;
+
+ /**
+ * @var HttpRequestExecutor
+ */
+ private $httpRequestExecutor;
+
+ /**
+ * @var LoggerInterface
+ */
+ private $logger;
+
+ public function __construct(
+ SiteTableSiteLookup $siteTableSiteLookup,
+ HttpApiLookup $httpApiLookup,
+ HttpRequestExecutor $httpRequestExecutor
+ ) {
+ $this->siteTableSiteLookup = $siteTableSiteLookup;
+ $this->httpApiLookup = $httpApiLookup;
+ $this->httpRequestExecutor = $httpRequestExecutor;
+ $this->logger = new NullLogger();
+ }
+
+ public function setLogger( LoggerInterface $logger ) {
+ $this->logger = $logger;
+ }
+
+ /**
+ * @param TargetUrl $targetUrl
+ *
+ * @return bool
+ */
+ public function canImport( TargetUrl $targetUrl ) {
+ return $this->siteTableSiteLookup->getSite(
$targetUrl->getParsedUrl()['host'] ) !== null;
+ }
+
+ /**
+ * @param TargetUrl $targetUrl
+ *
+ * @return ImportDetails
+ */
+ public function getImportDetails( TargetUrl $targetUrl ) {
+ $apiUrl = $this->httpApiLookup->getApiUrl( $targetUrl );
+
+ // TODO catch and do something with exceptions?
+ $imageInfoRequest = $this->httpRequestExecutor->execute(
+ $apiUrl . '?' . http_build_query(
$this->getImageInfoParams( $targetUrl ) )
+ );
+ $imageInfoData = json_decode( $imageInfoRequest->getContent(),
true );
+
+ if ( count( $imageInfoData['query']['pages'] ) !== 1 ) {
+ // TODO log and exception
+ die( 'unexpected number of pages returned?' );
+ }
+
+ $pageInfoData = array_pop( $imageInfoData['query']['pages'] );
+ $normalizationData = array_pop(
$imageInfoData['query']['normalized'] );
+ $latestImageData = array_pop( $pageInfoData['imageinfo'] );
+
+ $importDetails = new ImportDetails(
+ $targetUrl,
+ $normalizationData['to'],
+ $latestImageData['thumburl']
+ );
+
+ return $importDetails;
+ }
+
+ private function getImageInfoParams( TargetUrl $targetUrl ) {
+ $parsed = $targetUrl->getParsedUrl();
+ // TODO what if the url is title=XXX?
+ $bits = explode( '/', $parsed['path'] );
+ $fullTitle = array_pop( $bits );
+
+ return [
+ 'action' => 'query',
+ 'format' => 'json',
+ 'prop' => 'imageinfo',
+ 'titles' => $fullTitle,
+ 'iilimit' => '500',
+ 'iiurlwidth' => '500',
+ 'iiprop' => implode(
+ '|',
+ [
+ // TODO are all of these actually
needed?
+ 'timestamp',
+ 'user',
+ 'userid',
+ 'comment',
+ 'parsedcomment',
+ 'canonicaltitle',
+ 'url',
+ 'size',
+ 'dimensions',
+ 'sha1',
+ 'mime',
+ 'thumbmime',
+ 'mediatype',
+ 'metadata',
+ 'commonmetadata',
+ 'extmetadata',
+ 'archivename',
+ 'bitdepth',
+ 'uploadwarning',
+ 'badfile',
+ ]
+ ),
+ ];
+ }
+
+ /**
+ * @param TargetUrl $targetUrl
+ * @param ImportAdjustments $importAdjustments
+ *
+ * @return bool success
+ */
+ public function import( TargetUrl $targetUrl, ImportAdjustments
$importAdjustments ) {
+ // TODO implement
+ return false;
+ }
+
+}
diff --git a/src/MediaWiki/HostBasedSiteTableLookup.php
b/src/MediaWiki/HostBasedSiteTableLookup.php
deleted file mode 100644
index 01c32cc..0000000
--- a/src/MediaWiki/HostBasedSiteTableLookup.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-namespace FileImporter\MediaWiki;
-
-use Site;
-use SiteLookup;
-
-class HostBasedSiteTableLookup {
-
- /**
- * @var SiteLookup
- */
- private $siteLookup;
-
- public function __construct( SiteLookup $siteLookup ) {
- $this->siteLookup = $siteLookup;
- }
-
- /**
- * @param string $host e.g. en.wikipedia.org or commons.wikimedia.org
- *
- * @return Site|null
- */
- public function getSite( $host ) {
- /** @var Site[] $sites */
- $sites = $this->siteLookup->getSites();
- foreach ( $sites as $site ) {
- if ( $site->getDomain() === $host ) {
- return $site;
- }
- }
-
- return null;
- }
-
-}
diff --git a/src/MediaWiki/HttpApiLookup.php b/src/MediaWiki/HttpApiLookup.php
new file mode 100644
index 0000000..d556b4c
--- /dev/null
+++ b/src/MediaWiki/HttpApiLookup.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace FileImporter\MediaWiki;
+
+use DOMDocument;
+use DOMElement;
+use FileImporter\Generic\Exceptions\ImportException;
+use FileImporter\Generic\HttpRequestExecutor;
+use FileImporter\Generic\TargetUrl;
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+use Psr\Log\NullLogger;
+
+class HttpApiLookup implements LoggerAwareInterface{
+
+ /**
+ * @var LoggerInterface
+ */
+ private $logger;
+
+ /**
+ * @var HttpRequestExecutor
+ */
+ private $httpRequestExecutor;
+
+ public function __construct( HttpRequestExecutor $httpRequestExecutor )
{
+ $this->httpRequestExecutor = $httpRequestExecutor;
+ $this->logger = new NullLogger();
+ }
+
+ public function setLogger( LoggerInterface $logger ) {
+ $this->logger = $logger;
+ }
+
+ /**
+ * @param string $message
+ * @throws ImportException
+ */
+ private function logAndException( $message ) {
+ $this->logger->error( 'Request to get MediaWiki API from
TargetUrl failed' );
+ throw new ImportException( 'Request to get MediaWiki API from
TargetUrl failed' );
+ }
+
+ /**
+ * @param TargetUrl $targetUrl
+ * @return string URL of api.php or null
+ */
+ public function getApiUrl( TargetUrl $targetUrl ) {
+ // TODO catch exceptions and do something
+ $req = $this->httpRequestExecutor->execute(
$targetUrl->getUrl() );
+
+ $document = new DOMDocument();
+
+ libxml_use_internal_errors( true );
+ $document->loadHTML( $req->getContent() );
+ libxml_clear_errors();
+
+ $elements = $document->getElementsByTagName( 'link' );
+ foreach ( $elements as $element ) {
+ /** @var DOMElement $element */
+ if ( $element->getAttribute( 'rel' ) === 'EditURI' ) {
+ $editUri = $element->getAttribute( 'href' );
+ return str_replace( '?action=rsd', '', $editUri
);
+ }
+ }
+
+ $this->logAndException( 'Failed to get MediaWiki API from
TargetUrl' );
+ return null; // never reached
+ }
+
+}
diff --git a/src/MediaWiki/MediaWikiImporter.php
b/src/MediaWiki/MediaWikiImporter.php
deleted file mode 100644
index e3ffda4..0000000
--- a/src/MediaWiki/MediaWikiImporter.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-namespace FileImporter\MediaWiki;
-
-use FileImporter\Generic\ImportAdjustments;
-use FileImporter\Generic\ImportDetails;
-use FileImporter\Generic\Importer;
-use FileImporter\Generic\TargetUrl;
-use MediaWiki\MediaWikiServices;
-use NaiveForeignTitleFactory;
-
-class MediaWikiImporter implements Importer {
-
- /**
- * @param TargetUrl $targetUrl
- *
- * @return bool
- */
- public function canImport( TargetUrl $targetUrl ) {
- // TODO inject
- /** @var HostBasedSiteTableLookup $lookup */
- $lookup = MediaWikiServices::getInstance()->getService(
'FileImporterUrlBasedSiteLookup' );
- return $lookup->getSite( $targetUrl->getParsedUrl()['host'] )
!== null;
- }
-
- /**
- * @param TargetUrl $targetUrl
- *
- * @return ImportDetails
- */
- public function getImportDetails( TargetUrl $targetUrl ) {
-
- $parsed = $targetUrl->getParsedUrl();
- $bits = explode( '/', $parsed['path'] );
- $fullTitle = array_pop( $bits );
-
- // TODO inject?
- // TODO use NamespaceAwareForeignTitleFactory using api /db of
the foreign / local site
- $titleFactory = new NaiveForeignTitleFactory();
- $foreignTitle = $titleFactory->createForeignTitle( $fullTitle,
NS_FILE );
-
- return new ImportDetails(
- $targetUrl,
- $foreignTitle->getText(),
- // TODO actually get real file url
-
'https://upload.wikimedia.org/wikipedia/commons/5/52/Berlin_Montage_4.jpg'
- );
- }
-
- /**
- * @param TargetUrl $targetUrl
- * @param ImportAdjustments $importAdjustments
- *
- * @return bool success
- */
- public function import( TargetUrl $targetUrl, ImportAdjustments
$importAdjustments ) {
- // TODO implement
- return false;
- }
-
-}
diff --git a/src/MediaWiki/SiteTableSiteLookup.php
b/src/MediaWiki/SiteTableSiteLookup.php
new file mode 100644
index 0000000..b934e05
--- /dev/null
+++ b/src/MediaWiki/SiteTableSiteLookup.php
@@ -0,0 +1,79 @@
+<?php
+
+namespace FileImporter\MediaWiki;
+
+use Site;
+use SiteLookup;
+
+class SiteTableSiteLookup {
+
+ /**
+ * @var SiteLookup
+ */
+ private $siteLookup;
+
+ /**
+ * @var array
+ */
+ private $hostGlobalIdMap = [];
+
+ public function __construct( SiteLookup $siteLookup ) {
+ $this->siteLookup = $siteLookup;
+ }
+
+ /**
+ * @param string $host e.g. en.wikipedia.org or commons.wikimedia.org
+ *
+ * @return Site|null
+ */
+ public function getSite( $host ) {
+ $site = $this->getSiteFromHostMap( $host );
+ if ( !$site ) {
+ $site = $this->getSiteFromSitesLoop( $host );
+ }
+
+ return $site;
+ }
+
+ /**
+ * @param string $host
+ *
+ * @return Site|null
+ */
+ private function getSiteFromSitesLoop( $host ) {
+ /** @var Site[] $sites */
+ $sites = $this->siteLookup->getSites();
+ foreach ( $sites as $site ) {
+ if ( $site->getDomain() === $host ) {
+ $this->addSiteToHostMap( $site, $host );
+ return $site;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * @param string $host
+ *
+ * @return Site|null
+ */
+ private function getSiteFromHostMap( $host ) {
+ if ( array_key_exists( $host, $this->hostGlobalIdMap ) ) {
+ return $this->siteLookup->getSite(
$this->hostGlobalIdMap[$host] );
+ }
+
+ return null;
+ }
+
+ /**
+ * @param Site $site
+ * @param string $host
+ */
+ private function addSiteToHostMap( Site $site, $host ) {
+ if ( $site->getGlobalId() ) {
+ $this->hostGlobalIdMap[$host] = $site->getGlobalId();
+ }
+ }
+
+}
diff --git a/src/ServiceWiring.php b/src/ServiceWiring.php
index cd34dff..ae408c1 100644
--- a/src/ServiceWiring.php
+++ b/src/ServiceWiring.php
@@ -3,16 +3,14 @@
namespace FileImporter;
use FileImporter\Generic\DispatchingImporter;
-use FileImporter\MediaWiki\MediaWikiImporter;
-use FileImporter\MediaWiki\HostBasedSiteTableLookup;
+use FileImporter\Generic\HttpRequestExecutor;
+use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
use Psr\Log\LoggerInterface;
return [
- 'FileImporterUrlBasedSiteLookup' => function( MediaWikiServices
$services ) {
- return new HostBasedSiteTableLookup( $services->getSiteLookup()
);
- },
+ // Generic
'FileImporterDispatchingImporter' => function( MediaWikiServices
$services ) {
$config = $services->getMainConfig();
@@ -25,8 +23,49 @@
return new DispatchingImporter( $importers );
},
- 'FileImporterMediaWikiImporter' => function( MediaWikiServices
$services ) {
- return new MediaWikiImporter();
+ 'FileImporterHttpRequestExecutor' => function( MediaWikiServices
$services ) {
+ $service = new HttpRequestExecutor();
+ $service->setLogger( LoggerFactory::getInstance( 'FileImporter'
) );
+ return $service;
+ },
+
+ // MediaWiki
+
+ 'FileImporterMediaWikiHttpApiLookup' => function( MediaWikiServices
$services ) {
+ /** @var HttpRequestExecutor $httpRequestExecutor */
+ $httpRequestExecutor = $services->getService(
'FileImporterHttpRequestExecutor' );
+
+ $service = new \FileImporter\MediaWiki\HttpApiLookup(
+ $httpRequestExecutor
+ );
+ $service->setLogger( LoggerFactory::getInstance( 'FileImporter'
) );
+ return $service;
+ },
+
+ 'FileImporterMediaWikiSiteTableSiteLookup' => function(
MediaWikiServices $services ) {
+ return new \FileImporter\MediaWiki\SiteTableSiteLookup(
$services->getSiteLookup() );
+ },
+
+ // Importers
+
+ 'FileImporterMediaWikiApiImporter' => function( MediaWikiServices
$services ) {
+ /**
+ * @var \FileImporter\MediaWiki\SiteTableSiteLookup
$siteTableSiteLookup
+ * @var \FileImporter\MediaWiki\HttpApiLookup $httpApiLookup
+ * @var HttpRequestExecutor $httpRequestExecutor
+ */
+ $siteTableSiteLookup = $services->getService(
'FileImporterMediaWikiSiteTableSiteLookup' );
+ $httpApiLookup = $services->getService(
'FileImporterMediaWikiHttpApiLookup' );
+ $httpRequestExecutor = $services->getService(
'FileImporterHttpRequestExecutor' );
+
+ $service = new \FileImporter\MediaWiki\ApiImporter(
+ $siteTableSiteLookup,
+ $httpApiLookup,
+ $httpRequestExecutor
+ );
+ $service->setLogger( LoggerFactory::getInstance( 'FileImporter'
) );
+
+ return $service;
}
];
diff --git a/tests/Generic/HttpRequestExecutorTest.php
b/tests/Generic/HttpRequestExecutorTest.php
new file mode 100644
index 0000000..966e315
--- /dev/null
+++ b/tests/Generic/HttpRequestExecutorTest.php
@@ -0,0 +1,63 @@
+<?php
+
+namespace FileImporter\Generic\Test;
+
+use FileImporter\Generic\Exceptions\HttpRequestException;
+use FileImporter\Generic\HttpRequestExecutor;
+use MWHttpRequest;
+use PHPUnit_Framework_TestCase;
+use Psr\Log\LoggerInterface;
+use Status;
+
+class HttpRequestExecutorTest extends PHPUnit_Framework_TestCase {
+
+ public function provideTestExecute() {
+ return [
+ [ 'http://example.com', false ],
+ [ 'http://example.com', 'Some Real Content' ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideTestExecute
+ */
+ public function testExecute( $testUrl, $expectedResult ) {
+ $executor = new HttpRequestExecutor();
+ $factoryOverride = function ( $url, $options = null, $caller =
__METHOD__ )
+ use ( $testUrl, $expectedResult ) {
+
+ $this->assertEquals( $testUrl, $url );
+ $this->assertArrayHasKey( 'logger', $options );
+ $this->assertArrayHasKey( 'followRedirects', $options );
+ $this->assertInstanceOf( LoggerInterface::class,
$options['logger'] );
+ $this->assertTrue( $options['followRedirects'] );
+ $this->assertEquals( $caller,
HttpRequestExecutor::class . '::execute' );
+
+ $request = $this->getMockBuilder( MWHttpRequest::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+ $status = Status::newGood();
+ if ( !$expectedResult ) {
+ $status->fatal( 'SomeFatal' );
+ } else {
+ $request->expects( $this->any() )
+ ->method( 'getContent' )
+ ->will( $this->returnValue(
$expectedResult ) );
+ }
+ $request->expects( $this->any() )
+ ->method( 'execute' )
+ ->will( $this->returnValue( $status ) );
+
+ return $request;
+ };
+ $executor->overrideRequestFactory( $factoryOverride );
+
+ if ( !$expectedResult ) {
+ $this->setExpectedException(
HttpRequestException::class );
+ }
+
+ $request = $executor->execute( $testUrl );
+ $this->assertEquals( $expectedResult, $request->getContent() );
+ }
+
+}
diff --git a/tests/MediaWiki/HostBasedSiteTableLookupTest.php
b/tests/MediaWiki/SiteTableSiteLookupTest.php
similarity index 88%
rename from tests/MediaWiki/HostBasedSiteTableLookupTest.php
rename to tests/MediaWiki/SiteTableSiteLookupTest.php
index 0ad1cf2..9b86023 100644
--- a/tests/MediaWiki/HostBasedSiteTableLookupTest.php
+++ b/tests/MediaWiki/SiteTableSiteLookupTest.php
@@ -2,13 +2,13 @@
namespace FileImporter\MediaWiki\Test;
-use FileImporter\MediaWiki\HostBasedSiteTableLookup;
+use FileImporter\MediaWiki\SiteTableSiteLookup;
use HashSiteStore;
use MediaWikiSite;
use PHPUnit_Framework_TestCase;
use Site;
-class HostBasedSiteTableLookupTest extends PHPUnit_Framework_TestCase {
+class SiteTableSiteLookupTest extends PHPUnit_Framework_TestCase {
private function getSite( $globalId, $domain ) {
$mockSite = $this->getMock( Site::class );
@@ -44,7 +44,7 @@
$this->getSite( 'commonswiki', 'commons.wikimedia.org'
),
] );
- $lookup = new HostBasedSiteTableLookup( $hashSiteStore );
+ $lookup = new SiteTableSiteLookup( $hashSiteStore );
$result = $lookup->getSite( $host );
if ( $expected === null ) {
--
To view, visit https://gerrit.wikimedia.org/r/337857
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I2a9c9c7fe04b6940ec76d8cdfe0938826114dedc
Gerrit-PatchSet: 9
Gerrit-Project: mediawiki/extensions/FileImporter
Gerrit-Branch: master
Gerrit-Owner: Addshore <[email protected]>
Gerrit-Reviewer: Andrew-WMDE <[email protected]>
Gerrit-Reviewer: Tobias Gritschacher <[email protected]>
Gerrit-Reviewer: WMDE-Fisch <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits