jenkins-bot has submitted this change and it was merged.
Change subject: Add unit tests and fix some failures
......................................................................
Add unit tests and fix some failures
Add basic phpunit tests for basic functions.
Fix setFirstResult, that would try to create a new title, if the given title
object does not exist (which would result in an exception, titles can be crafted
from strings only).
Fix deprecation warning for ApiBase::getResultData and use
ApiBase::getResult()->getResultData() instead. Also, add metadata only,
if the result data contains a page id.
Change-Id: I7aca81842e627af0bc03f9594956ca085df32be5
---
M extension.json
M includes/QuickSearchLookup.hooks.php
M includes/QuickSearchLookup.php
A tests/phpunit/QuickSearchLookupTest.php
4 files changed, 107 insertions(+), 5 deletions(-)
Approvals:
Legoktm: Looks good to me, approved
jenkins-bot: Verified
diff --git a/extension.json b/extension.json
index c31af1a..a44d5cf 100644
--- a/extension.json
+++ b/extension.json
@@ -21,6 +21,9 @@
],
"SpecialSearchResultsAppend": [
"QuickSearchLookupHooks::onSpecialSearchResultsAppend"
+ ],
+ "UnitTestsList": [
+ "QuickSearchLookupHooks::onUnitTestsList"
]
},
"ResourceModules": {
diff --git a/includes/QuickSearchLookup.hooks.php
b/includes/QuickSearchLookup.hooks.php
index e311aca..9f2a53a 100644
--- a/includes/QuickSearchLookup.hooks.php
+++ b/includes/QuickSearchLookup.hooks.php
@@ -38,4 +38,16 @@
public static function onSpecialSearchResultsAppend( SpecialSearch
$specialSearch, OutputPage $output ) {
QuickSearchLookup::getMain()->outputLookup( $output );
}
+
+ /**
+ * UnitTestsList hook handler
+ * @see https://www.mediawiki.org/wiki/Manual:Hooks/UnitTestsList
+ *
+ * @param array $files
+ * @return bool
+ */
+ public static function onUnitTestsList( &$files ) {
+ $files[] = __DIR__ . '/../tests/phpunit';
+ return true;
+ }
}
\ No newline at end of file
diff --git a/includes/QuickSearchLookup.php b/includes/QuickSearchLookup.php
index 0bca366..b1e78b6 100644
--- a/includes/QuickSearchLookup.php
+++ b/includes/QuickSearchLookup.php
@@ -17,7 +17,7 @@
*
* @param RequestContext $context
*/
- public function __construct( RequestContext $context ) {
+ public function __construct( IContextSource $context ) {
$this->context = $context;
}
@@ -31,6 +31,14 @@
self::$instance = new self( RequestContext::getMain() );
}
return self::$instance;
+ }
+
+ /**
+ * Set a main instance.
+ * @param QuickSearchLookup|null $instance
+ */
+ public static function setInstance( $instance ) {
+ self::$instance = $instance;
}
/**
@@ -60,13 +68,16 @@
public function setFirstResult( $titleTerm ) {
if ( $titleTerm instanceof Title && $titleTerm->exists() ) {
$this->setTitle( $titleTerm );
- } else {
+ return true;
+ } elseif ( is_string( $titleTerm ) ) {
// check, if the term is the exact name of a title in
this wiki
$title = Title::newFromText( $titleTerm );
if ( $title && $title->exists() ) {
$this->setTitle( $title );
+ return true;
}
}
+ return false;
}
/**
@@ -275,9 +286,11 @@
);
$api = new ApiMain( $params );
$api->execute();
- $data = $api->getResultData();
+ $data = $api->getResult()->getResultData();
foreach ( $data['query']['pages'] as $id => $d ) {
- $this->metadata = $d;
+ if ( isset( $d['pageid'] ) ) {
+ $this->metadata = $d;
+ }
}
}
return $this->metadata;
@@ -293,7 +306,7 @@
private function getTextExtract( $title ) {
// try to get text from TextExtracts
$page = $this->getPageMeta( $title );
- if ( $page && isset( $page['extract'] ) ) {
+ if ( $page && isset( $page['extract']['*'] ) ) {
return $page['extract']['*'];
}
diff --git a/tests/phpunit/QuickSearchLookupTest.php
b/tests/phpunit/QuickSearchLookupTest.php
new file mode 100644
index 0000000..a9c0d55
--- /dev/null
+++ b/tests/phpunit/QuickSearchLookupTest.php
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * @group Extensions
+ */
+class QuickSearchLooupTest extends MediaWikiTestCase {
+ protected function setUp() {
+ parent::setUp();
+ QuickSearchLookup::setInstance( new MockQuickLookupTest() );
+ }
+
+ protected function tearDown() {
+ QuickSearchLookup::setInstance( null );
+ parent::tearDown();
+ }
+
+ private function makeQSL( $url = '/' ) {
+ $params = wfParseUrl( wfExpandUrl( $url ) );
+ $q = array();
+ if ( isset( $params['query'] ) ) {
+ $q = wfCgiToArray( $params['query'] );
+ }
+ $request = new FauxRequest( $q );
+ $request->setRequestURL( $url );
+ $context = new DerivativeContext( RequestContext::getMain() );
+ $context->setRequest( $request );
+ $context->setOutput( new OutputPage( $context ) );
+ return new QuickSearchLookup( $context );
+ }
+
+ /**
+ * @dataProvider getTitleResults
+ */
+ public function testSetFirstResult( $title, $result ) {
+ $qsl = $this->makeQSL();
+ $this->assertEquals( $qsl->setFirstResult( $title ), $result );
+ }
+
+ /**
+ * @dataProvider getTitleResults
+ */
+ public function testNeedsFirstResult( $title, $result ) {
+ $qsl = $this->makeQSL();
+ $qsl->setFirstResult( $title );
+ $this->assertEquals( $qsl->needsFirstResult(), !$result );
+ }
+
+ /**
+ * @dataProvider getTitleResults
+ */
+ public function testOutputLookup( $title, $result ) {
+ $qsl = $this->makeQSL();
+ $request = new RequestContext();
+ $out = $request->getOutput();
+ $qsl->setFirstResult( $title );
+ $qsl->outputLookup( $out );
+ $this->assertEquals( $result, (bool)$out->getHTML() );
+ }
+
+ public function getTitleResults() {
+ return array(
+ array( 'BogusTest', false ),
+ array( 'Main_Page', true ),
+ array( Title::newFromText( 'BogusTest' ), false ),
+ array( Title::newMainPage(), true ),
+ );
+ }
+}
+
+class MockQuickLookupTest {
+ public function __call( $name, $args ) {
+ throw new Exception( 'Functions shouldn\'t call the singleton
itself.' );
+ }
+}
\ No newline at end of file
--
To view, visit https://gerrit.wikimedia.org/r/230474
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I7aca81842e627af0bc03f9594956ca085df32be5
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/QuickSearchLookup
Gerrit-Branch: master
Gerrit-Owner: Florianschmidtwelzow <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits