Phuedx has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/315499

Change subject: Fully test MobileContext#shouldDisplayMobileView
......................................................................

Fully test MobileContext#shouldDisplayMobileView

Changes:
* Remove unnecessary MobileContextTest#setUp.
* Locate suites of test cases for MobileContext methods near one another
  in tests/phpunit/context/.
* Extract MobileContextTest#testIsFauxMobileDevice and
  #testShouldDisplayMobileView to
  MobileContextShouldDisplayMobileViewIntegrationTest and merge them

Bug: T143891
Change-Id: I9512c455e56edecf94737249c4848d6578e8124c
---
M tests/phpunit/MobileContextTest.php
A tests/phpunit/context/MobileContextShouldDisplayMobileViewIntegrationTest.php
R tests/phpunit/context/MobileContextWikibaseDescriptionsTest.php
3 files changed, 130 insertions(+), 77 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MobileFrontend 
refs/changes/99/315499/1

diff --git a/tests/phpunit/MobileContextTest.php 
b/tests/phpunit/MobileContextTest.php
index 15a87e2..7331e6b 100644
--- a/tests/phpunit/MobileContextTest.php
+++ b/tests/phpunit/MobileContextTest.php
@@ -19,10 +19,6 @@
                return $method;
        }
 
-       protected function setUp() {
-               parent::setUp();
-       }
-
        protected function tearDown() {
                parent::tearDown();
 
@@ -265,76 +261,6 @@
                        "http://en.wikipedia.org/wiki/mobile/Gustavus_Airport";,
                        wfAssembleUrl( $parsedUrl )
                );
-       }
-
-       /**
-        * @dataProvider isFauxMobileDeviceProvider
-        * @covers MobileContext::isFauxMobileDevice
-        */
-       public function testIsFauxMobileDevice( $isFauxDevice, $msg, $useformat 
= null ) {
-               $isFauxMobileDevice = self::getMethod( 'isFauxMobileDevice' );
-
-               $testMethod = ( $isFauxDevice ) ? 'assertTrue' : 'assertFalse';
-
-               $context = $this->makeContext();
-               $context->setUseFormat( $useformat );
-               $this->$testMethod(
-                       $isFauxMobileDevice->invokeArgs( $context, [] ),
-                       $msg
-               );
-       }
-
-       public function isFauxMobileDeviceProvider() {
-               return [
-                       [ false, 'Nothing set' ],
-                       [ true, 'useformat=mobile', 'mobile' ],
-                       [ true, 'useformat=mobile-wap', 'mobile-wap' ],
-                       [ false, 'useformat=yourmom', 'yourmom' ],
-               ];
-       }
-
-       /**
-        * @dataProvider shouldDisplayMobileViewProvider
-        * @covers MobileContext::shouldDisplayMobileView
-        */
-       public function testShouldDisplayMobileView( $shouldDisplay, $xWap = 
null,
-               $requestVal = [], $msg = null
-       ) {
-               $testMethod = ( $shouldDisplay ) ? 'assertTrue' : 'assertFalse';
-
-               $this->setMwGlobals( [
-                       'wgMFMobileHeader' => 'X-WAP',
-                       'wgMobileUrlTemplate' => '%h0.m.%h1.%h2',
-               ] );
-               $context = $this->makeContext();
-               $request = $context->getRequest();
-               if ( count( $requestVal ) ) {
-                       foreach ( $requestVal as $key => $val ) {
-                               if ( $key == 'useformat' ) {
-                                       $context->setUseFormat( $val );
-                               } else {
-                                       $request->setVal( $key, $val );
-                               }
-                       }
-               }
-
-               if ( !is_null( $xWap ) ) {
-                       $request->setHeader( 'X-WAP', $xWap );
-               }
-
-               $this->$testMethod( $context->shouldDisplayMobileView(), $msg );
-       }
-
-       public function shouldDisplayMobileViewProvider() {
-               return [
-                       [ false, null, [] ],
-                       [ true, 'yes', [] ],
-                       [ true, 'no', [] ],
-                       [ false, 'yes', [ 'useformat' => 'desktop' ] ],
-                       [ true, null, [ 'useformat' => 'mobile-wap' ] ],
-                       [ false, null, [ 'useformat' => 'desktop' ] ],
-                       [ true, null, [ 'useformat' => 'mobile' ] ],
-               ];
        }
 
        /**
diff --git 
a/tests/phpunit/context/MobileContextShouldDisplayMobileViewIntegrationTest.php 
b/tests/phpunit/context/MobileContextShouldDisplayMobileViewIntegrationTest.php
new file mode 100644
index 0000000..b561b1a
--- /dev/null
+++ 
b/tests/phpunit/context/MobileContextShouldDisplayMobileViewIntegrationTest.php
@@ -0,0 +1,128 @@
+<?php
+
+namespace Tests\MobileFrontend\Context;
+
+use MediaWikiTestCase;
+use MobileContext;
+
+/**
+ * This suite of tests cases tests the behaviour of
+ * `MobileContext#shouldDisplayMobileView` and 
`#shoudDisplayMobileViewInternal`
+ * with no stubbed dependencies.
+ *
+ * @group integration
+ */
+class MobileContextShouldDisplayMobileViewIntegrationTest extends 
MediaWikiTestCase {
+
+       /**
+        * @var MobileContext
+        */
+       private $context;
+
+       protected function setUp() {
+               parent::setUp();
+
+               MobileContext::resetInstanceForTesting();
+               $this->context = MobileContext::singleton();
+       }
+
+       /**
+        * @covers MobileContext::shouldDisplayMobileView
+        */
+       public function test_it_can_be_overridden() {
+               $this->context->setForceMobileView( true );
+
+               $this->assertTrue( $this->context->shouldDisplayMobileView() );
+       }
+
+       /**
+        * @dataProvider shouldDisplayMobileViewProvider
+        * @covers MobileContext::shouldDisplayMobileView
+        */
+       public function testShouldDisplayMobileView(
+               $expected,
+               $customHeader,
+               $format,
+               $formatCookie = null,
+               $stopMobileRedirectCookie = null,
+               $isMobileUA = false
+       ) {
+               $this->setMwGlobals( [
+                       'wgMFMobileHeader' => 'X-Subdomain',
+                       'wgMobileUrlTemplate' => '%h0.m.%h1.%h2',
+               ] );
+
+               $request = $this->context->getRequest();
+
+               if ( $customHeader !== null ) {
+                               $request->setHeader( 'X-Subdomain', 
$customHeader );
+               }
+
+               if ( $format !== null ) {
+                       $this->context->setUseFormat( $format );
+               }
+
+               if ( $formatCookie !== null ) {
+
+                       // N.B. that the format and the "stop mobile redirect" 
cookies
+                       // ("mf_useformat" and "stopMobileRedirect" 
respectively) aren't prefix
+                       // with MediaWiki's cookie prefix ($wgCookiePrefix).
+                       $request->setCookie( 'mf_useformat', $formatCookie, '' 
);
+               }
+
+               if ( $stopMobileRedirectCookie !== null ) {
+                       $request->setCookie( 'stopMobileRedirect', 
$stopMobileRedirectCookie, '' );
+               }
+
+               if ( $isMobileUA ) {
+                       $request->setHeader(
+                               'User-Agent',
+
+                               // An iPhone running iOS 8.0.
+                               // @codingStandardsIgnoreStart
+                               'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like 
Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e 
Safari/8536.25'
+                               // @codingStandardsIgnoreEnd
+                       );
+               }
+
+               $this->assertEquals( $expected, 
$this->context->shouldDisplayMobileView() );
+       }
+
+       public function shouldDisplayMobileViewProvider() {
+               return [
+
+                       // By default, the mobile view shouldn't be displayed.
+                       [ false, null, null ],
+
+                       // When the custom header (by default, "X-Subdomain") 
is set, then the
+                       // mobile view should be displayed.
+                       [ true, 'M', null ],
+
+                       // The format (the useformat=<$format> query parameter 
in the URL)
+                       // overrides the custom header.
+                       [ false, 'M', 'desktop' ],
+
+                       // If the format is either "mobile-wap" or "mobile", 
then the mobile view
+                       // should be displayed.
+                       [ true, null, 'mobile-wap' ],
+                       [ true, null, 'mobile' ],
+                       [ false, null, 'foo' ],
+
+                       // If the format cookie ("mf_useformat") is "true", 
then the mobile view
+                       // should be displayed.
+                       [ true, null, null, 'true' ],
+                       [ false, null, null, 'bar' ],
+
+                       // The custom header overrides the "stop mobile 
redirect" cookie
+                       // ("stopMobileRedirect").
+                       [ true, 'M', null, null, 'true' ],
+
+                       // When the request is sent from a mobile UA, then the 
mobile view should
+                       // be displayed.
+                       [ true, null, null, null, null, true ],
+
+                       // stopMobileRedirect overrides device detection.
+                       [ false, null, null, null, 'true', true ],
+               ];
+       }
+}
diff --git a/tests/phpunit/MobileContextWikibaseDescriptionsTest.php 
b/tests/phpunit/context/MobileContextWikibaseDescriptionsTest.php
similarity index 98%
rename from tests/phpunit/MobileContextWikibaseDescriptionsTest.php
rename to tests/phpunit/context/MobileContextWikibaseDescriptionsTest.php
index bd00754..b5f85d2 100644
--- a/tests/phpunit/MobileContextWikibaseDescriptionsTest.php
+++ b/tests/phpunit/context/MobileContextWikibaseDescriptionsTest.php
@@ -1,8 +1,7 @@
 <?php
 
-/**
- * @group MobileFrontend
- */
+use Tests\MobileFrontend\Context;
+
 class MobileContextWikibaseDescriptionsTest extends MediaWikiTestCase {
 
        /**

-- 
To view, visit https://gerrit.wikimedia.org/r/315499
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I9512c455e56edecf94737249c4848d6578e8124c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Phuedx <g...@samsmith.io>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to