Fix IP handling in DerivativeRequest
authorGergő Tisza <tgr.huwiki@gmail.com>
Tue, 30 Oct 2018 05:32:13 +0000 (22:32 -0700)
committerKunal Mehta <legoktm@member.fsf.org>
Thu, 1 Nov 2018 03:34:58 +0000 (20:34 -0700)
$r->getIP() should return what was set by $r->setIP(); currently
that breaks for DerivativeRequest as get reads from the base but
set writes on the derivative.

Change-Id: If30c233931ceb1ca05da8866da3c3ab78de1a339

includes/DerivativeRequest.php
tests/phpunit/includes/DerivativeRequestTest.php [new file with mode: 0644]

index 487e86c..e2d59b0 100644 (file)
@@ -33,6 +33,7 @@
  */
 class DerivativeRequest extends FauxRequest {
        private $base;
+       private $ip;
 
        /**
         * @param WebRequest $base
@@ -74,7 +75,11 @@ class DerivativeRequest extends FauxRequest {
        }
 
        public function getIP() {
-               return $this->base->getIP();
+               return $this->ip ?: $this->base->getIP();
+       }
+
+       public function setIP( $ip ) {
+               $this->ip = $ip;
        }
 
        public function getProtocol() {
diff --git a/tests/phpunit/includes/DerivativeRequestTest.php b/tests/phpunit/includes/DerivativeRequestTest.php
new file mode 100644 (file)
index 0000000..f33022b
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+
+/**
+ * @covers DerivativeRequest
+ */
+class DerivativeRequestTest extends PHPUnit\Framework\TestCase {
+
+       public function testSetIp() {
+               $original = new WebRequest();
+               $original->setIP( '1.2.3.4' );
+               $derivative = new DerivativeRequest( $original, [] );
+
+               $this->assertEquals( '1.2.3.4', $derivative->getIP() );
+
+               $derivative->setIP( '5.6.7.8' );
+
+               $this->assertEquals( '5.6.7.8', $derivative->getIP() );
+               $this->assertEquals( '1.2.3.4', $original->getIP() );
+       }
+
+}