linkeddata: Simplity PageDataRequestHandler test setup
authorThiemo Kreuz <thiemo.kreuz@wikimedia.de>
Wed, 27 Mar 2019 17:37:39 +0000 (18:37 +0100)
committerDaniel Kinzler <dkinzler@wikimedia.org>
Mon, 1 Apr 2019 14:20:19 +0000 (14:20 +0000)
Most notably this gets rid of all regular expressions and replaces them
with straight string comparisons. This is mostly done for readability,
but also makes the test more independend from the setup of the server
that is running the test.

Change-Id: I8c34cf1756c8e6c126b95b3eda163561d53186b9

tests/phpunit/includes/linkeddata/PageDataRequestHandlerTest.php

index e2616c8..e3a200b 100644 (file)
@@ -4,7 +4,7 @@
  * @covers PageDataRequestHandler
  * @group PageData
  */
-class PageDataRequestHandlerTest extends \MediaWikiTestCase {
+class PageDataRequestHandlerTest extends \MediaWikiLangTestCase {
 
        /**
         * @var Title
@@ -19,9 +19,10 @@ class PageDataRequestHandlerTest extends \MediaWikiTestCase {
        protected function setUp() {
                parent::setUp();
 
-               $this->interfaceTitle = Title::newFromText( "Special:PageDataRequestHandlerTest" );
-
+               $this->interfaceTitle = Title::newFromText( __CLASS__ );
                $this->obLevel = ob_get_level();
+
+               $this->setMwGlobals( 'wgArticlePath', '/wiki/$1' );
        }
 
        protected function tearDown() {
@@ -44,7 +45,7 @@ class PageDataRequestHandlerTest extends \MediaWikiTestCase {
         * @return PageDataRequestHandler
         */
        protected function newHandler() {
-               return new PageDataRequestHandler( 'json' );
+               return new PageDataRequestHandler();
        }
 
        /**
@@ -76,9 +77,16 @@ class PageDataRequestHandlerTest extends \MediaWikiTestCase {
        public function handleRequestProvider() {
                $cases = [];
 
-               $cases[] = [ '', [], [], '!!', 400 ];
+               $cases[] = [ '', [], [], 'Invalid title', 400 ];
 
-               $cases[] = [ '', [ 'target' => 'Helsinki' ], [], '!!', 303,  [ 'Location' => '!.+!' ] ];
+               $cases[] = [
+                       '',
+                       [ 'target' => 'Helsinki' ],
+                       [],
+                       '',
+                       303,
+                       [ 'Location' => '?title=Helsinki&action=raw' ]
+               ];
 
                $subpageCases = [];
                foreach ( $cases as $c ) {
@@ -99,9 +107,9 @@ class PageDataRequestHandlerTest extends \MediaWikiTestCase {
                        '',
                        [ 'target' => 'Helsinki' ],
                        [ 'Accept' => 'text/HTML' ],
-                       '!^$!',
+                       '',
                        303,
-                       [ 'Location' => '!Helsinki$!' ]
+                       [ 'Location' => '/wiki/Helsinki' ]
                ];
 
                $cases[] = [
@@ -111,18 +119,18 @@ class PageDataRequestHandlerTest extends \MediaWikiTestCase {
                                'revision' => '4242',
                        ],
                        [ 'Accept' => 'text/HTML' ],
-                       '!^$!',
+                       '',
                        303,
-                       [ 'Location' => '!Helsinki(\?|&)oldid=4242!' ]
+                       [ 'Location' => '?title=Helsinki&oldid=4242' ]
                ];
 
                $cases[] = [
                        '/Helsinki',
                        [],
                        [],
-                       '!^$!',
+                       '',
                        303,
-                       [ 'Location' => '!Helsinki&action=raw!' ]
+                       [ 'Location' => '?title=Helsinki&action=raw' ]
                ];
 
                // #31: /Q5 with "Accept: text/foobar" triggers a 406
@@ -130,63 +138,59 @@ class PageDataRequestHandlerTest extends \MediaWikiTestCase {
                        'main/Helsinki',
                        [],
                        [ 'Accept' => 'text/foobar' ],
-                       '!!',
+                       'No matching format found',
                        406,
-                       [],
                ];
 
                $cases[] = [
                        'no slash',
                        [],
                        [ 'Accept' => 'text/HTML' ],
-                       '!!',
+                       'Invalid title',
                        400,
-                       []
                ];
 
                $cases[] = [
                        'main',
                        [],
                        [ 'Accept' => 'text/HTML' ],
-                       '!!',
+                       'Invalid title',
                        400,
-                       []
                ];
 
                $cases[] = [
                        'xyz/Helsinki',
                        [],
                        [ 'Accept' => 'text/HTML' ],
-                       '!!',
+                       'Invalid title',
                        400,
-                       []
                ];
 
                $cases[] = [
                        'main/Helsinki',
                        [],
                        [ 'Accept' => 'text/HTML' ],
-                       '!^$!',
+                       '',
                        303,
-                       [ 'Location' => '!Helsinki$!' ]
+                       [ 'Location' => '/wiki/Helsinki' ]
                ];
 
                $cases[] = [
                        '/Helsinki',
                        [],
                        [ 'Accept' => 'text/HTML' ],
-                       '!^$!',
+                       '',
                        303,
-                       [ 'Location' => '!Helsinki$!' ]
+                       [ 'Location' => '/wiki/Helsinki' ]
                ];
 
                $cases[] = [
                        'main/AC/DC',
                        [],
                        [ 'Accept' => 'text/HTML' ],
-                       '!^$!',
+                       '',
                        303,
-                       [ 'Location' => '!AC/DC$!' ]
+                       [ 'Location' => '/wiki/AC/DC' ]
                ];
 
                return $cases;
@@ -198,7 +202,7 @@ class PageDataRequestHandlerTest extends \MediaWikiTestCase {
         * @param string $subpage The subpage to request (or '')
         * @param array  $params  Request parameters
         * @param array  $headers  Request headers
-        * @param string $expectedOutput Regex to match the output against.
+        * @param string $expectedOutput
         * @param int $expectedStatusCode Expected HTTP status code.
         * @param string[] $expectedHeaders Expected HTTP response headers.
         */
@@ -206,7 +210,7 @@ class PageDataRequestHandlerTest extends \MediaWikiTestCase {
                $subpage,
                array $params,
                array $headers,
-               $expectedOutput,
+               $expectedOutput = '',
                $expectedStatusCode = 200,
                array $expectedHeaders = []
        ) {
@@ -228,22 +232,21 @@ class PageDataRequestHandlerTest extends \MediaWikiTestCase {
                                $output->output();
                        }
 
-                       $text = ob_get_contents();
-                       ob_end_clean();
+                       $text = ob_get_clean();
 
                        $this->assertEquals( $expectedStatusCode, $response->getStatusCode(), 'status code' );
-                       $this->assertRegExp( $expectedOutput, $text, 'output' );
+                       $this->assertSame( $expectedOutput, $text, 'output' );
 
                        foreach ( $expectedHeaders as $name => $exp ) {
                                $value = $response->getHeader( $name );
                                $this->assertNotNull( $value, "header: $name" );
                                $this->assertInternalType( 'string', $value, "header: $name" );
-                               $this->assertRegExp( $exp, $value, "header: $name" );
+                               $this->assertStringEndsWith( $exp, $value, "header: $name" );
                        }
                } catch ( HttpError $e ) {
                        ob_end_clean();
                        $this->assertEquals( $expectedStatusCode, $e->getStatusCode(), 'status code' );
-                       $this->assertRegExp( $expectedOutput, $e->getHTML(), 'error output' );
+                       $this->assertContains( $expectedOutput, $e->getHTML(), 'error output' );
                }
 
                // We always set "Access-Control-Allow-Origin: *"