Fix-up for I949fc289d: handle falsy cookie values correctly
authorOri Livneh <ori@wikimedia.org>
Thu, 8 Oct 2015 04:45:26 +0000 (21:45 -0700)
committerOri Livneh <ori@wikimedia.org>
Thu, 8 Oct 2015 05:19:47 +0000 (22:19 -0700)
Ensure that OutputPage::haveVaryCacheCookies() handles falsey values correctly,
and that it requires a cookie to have a nonempty value before it declares a
match.

Change-Id: I2afe54b62c940187a427498cb4037e1dd0e78dd9

includes/OutputPage.php
tests/phpunit/includes/OutputPageTest.php

index 755b165..f48497f 100644 (file)
@@ -2004,7 +2004,7 @@ class OutputPage extends ContextSource {
        function haveCacheVaryCookies() {
                $request = $this->getRequest();
                foreach ( $this->getCacheVaryCookies() as $cookieName ) {
-                       if ( $request->getCookie( $cookieName, '' ) ) {
+                       if ( $request->getCookie( $cookieName, '', '' ) !== '' ) {
                                wfDebug( __METHOD__ . ": found $cookieName\n" );
                                return true;
                        }
index aa6655d..5f21e07 100644 (file)
@@ -339,6 +339,27 @@ class OutputPageTest extends MediaWikiTestCase {
                        ),
                );
        }
+
+       /**
+        * @covers OutputPage::haveCacheVaryCookies
+        */
+       function testHaveCacheVaryCookies() {
+               $request = new FauxRequest();
+               $context = new RequestContext();
+               $context->setRequest( $request );
+               $outputPage = new OutputPage( $context );
+
+               // No cookies are set.
+               $this->assertFalse( $outputPage->haveCacheVaryCookies() );
+
+               // 'Token' is present but empty, so it shouldn't count.
+               $request->setCookie( 'Token', '' );
+               $this->assertFalse( $outputPage->haveCacheVaryCookies() );
+
+               // 'Token' present and nonempty.
+               $request->setCookie( 'Token', '123' );
+               $this->assertTrue( $outputPage->haveCacheVaryCookies() );
+       }
 }
 
 /**