Update formatting
[lhc/web/wiklou.git] / tests / phpunit / includes / specials / SpecialSearchTest.php
index b1c06cd..f5ef0fb 100644 (file)
 class SpecialSearchTest extends MediaWikiTestCase {
        private $search;
 
-       function setUp() { }
-       function tearDown() { }
-
        /**
+        * @covers SpecialSearch::load
         * @dataProvider provideSearchOptionsTests
         * @param $requested Array Request parameters. For example array( 'ns5' => true, 'ns6' => true). NULL to use default options.
         * @param $userOptions Array User options to test with. For example array('searchNs5' => 1 );. NULL to use default options.
+        * @param $expectedProfile An expected search profile name
+        * @param $expectedNs Array Expected namespaces
         */
-       function testFoobar(
+       function testProfileAndNamespaceLoading(
                $requested, $userOptions, $expectedProfile, $expectedNS,
-               $message = 'Profile name andnamespaces mismatches!'
+               $message = 'Profile name and namespaces mismatches!'
        ) {
                $context = new RequestContext;
                $context->setUser(
@@ -32,7 +32,7 @@ class SpecialSearchTest extends MediaWikiTestCase {
                        'ns6'=>true,
                ) ));
                 */
-               $context->setRequest( new FauxRequest( $requested ));
+               $context->setRequest( new FauxRequest( $requested ) );
                $search = new SpecialSearch();
                $search->setContext( $context );
                $search->load();
@@ -45,11 +45,11 @@ class SpecialSearchTest extends MediaWikiTestCase {
                $this->assertEquals(
                        array( /** Expected: */
                                'ProfileName' => $expectedProfile,
-                               'Namespaces'  => $expectedNS,
+                               'Namespaces' => $expectedNS,
                        )
                        , array( /** Actual: */
                                'ProfileName' => $search->getProfile(),
-                               'Namespaces'  => $search->getNamespaces(),
+                               'Namespaces' => $search->getNamespaces(),
                        )
                        , $message
                );
@@ -59,14 +59,14 @@ class SpecialSearchTest extends MediaWikiTestCase {
        function provideSearchOptionsTests() {
                $defaultNS = SearchEngine::defaultNamespaces();
                $EMPTY_REQUEST = array();
-               $NO_USER_PREF  = null;
+               $NO_USER_PREF = null;
 
                return array(
                        /**
                         * Parameters:
-                        *      <Web Request>, <User options>
+                        *     <Web Request>, <User options>
                         * Followed by expected values:
-                        *      <ProfileName>, <NSList>
+                        *     <ProfileName>, <NSList>
                         * Then an optional message.
                         */
                        array(
@@ -76,17 +76,20 @@ class SpecialSearchTest extends MediaWikiTestCase {
                        ),
                        array(
                                array( 'ns5' => 1 ), $NO_USER_PREF,
-                               'advanced', array(  5),
+                               'advanced', array( ),
                                'Web request with specific NS should override user preference'
                        ),
-               /* FIXME this test is for bug 33583
-               array(
-                       $EMPTY_REQUEST, array( 'searchNs2' ),
-                       'advanced', array( 2 ),
-                       'Bug 33583: search with no option should honor User search preferences'
-               ),
-                */
-
+                       array(
+                               $EMPTY_REQUEST, array(
+                               'searchNs2' => 1,
+                               'searchNs14' => 1,
+                       ) + array_fill_keys( array_map( function ( $ns ) {
+                               return "searchNs$ns";
+                       }, $defaultNS ), 0 ),
+                               'advanced', array( 2, 14 ),
+                               'Bug 33583: search with no option should honor User search preferences'
+                                       . ' and have all other namespace disabled'
+                       ),
                );
        }
 
@@ -95,14 +98,43 @@ class SpecialSearchTest extends MediaWikiTestCase {
         * User remains anonymous though
         */
        function newUserWithSearchNS( $opt = null ) {
-               $u = User::newFromId(0);
-               if( $opt === null ) {
+               $u = User::newFromId( 0 );
+               if ( $opt === null ) {
                        return $u;
                }
-               foreach($opt as $name => $value) {
+               foreach ( $opt as $name => $value ) {
                        $u->setOption( $name, $value );
                }
                return $u;
        }
-}
 
+       /**
+        * Verify we do not expand search term in <title> on search result page
+        * https://gerrit.wikimedia.org/r/4841
+        */
+       function testSearchTermIsNotExpanded() {
+
+               # Initialize [[Special::Search]]
+               $search = new SpecialSearch();
+               $search->getContext()->setTitle( Title::newFromText( 'Special:Search' ) );
+               $search->load();
+
+               # Simulate a user searching for a given term
+               $term = '{{SITENAME}}';
+               $search->showResults( $term );
+
+               # Lookup the HTML page title set for that page
+               $pageTitle = $search
+                       ->getContext()
+                       ->getOutput()
+                       ->getHTMLTitle();
+
+               # Compare :-]
+               $this->assertRegExp(
+                       '/' . preg_quote( $term ) . '/',
+                       $pageTitle,
+                       "Search term '{$term}' should not be expanded in Special:Search <title>"
+               );
+
+       }
+}