FauxRequest: Remove influence from $wgRequest on getFullRequestURL()
It inherited the method from WebRequest, which in turn uses PROTO_CURRENT, which indirectly makes it then look up $wgRequest->protocol to decide how to expand the url. This global state isn't expected from FauxRequest and makes its result less than predictable. Change-Id: Ia616e0bfa00c35f78d27db55f26b336a7d0c7606
This commit is contained in:
parent
86c13ba3ad
commit
9d225ee603
2 changed files with 61 additions and 1 deletions
|
|
@ -170,6 +170,17 @@ class FauxRequest extends WebRequest {
|
|||
return $this->requestUrl;
|
||||
}
|
||||
|
||||
public function getFullRequestURL() {
|
||||
// Pass an explicit PROTO constant instead of PROTO_CURRENT so that we
|
||||
// do not rely on state from the global $wgRequest object (which it would,
|
||||
// via wfGetServerUrl/wfExpandUrl/$wgRequest->protocol).
|
||||
if ( $this->protocol === 'http' ) {
|
||||
return wfGetServerUrl( PROTO_HTTP ) . $this->getRequestURL();
|
||||
} else {
|
||||
return wfGetServerUrl( PROTO_HTTPS ) . $this->getRequestURL();
|
||||
}
|
||||
}
|
||||
|
||||
public function getProtocol() {
|
||||
return $this->protocol;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,16 @@ class FauxRequestTest extends PHPUnit\Framework\TestCase {
|
|||
use MediaWikiCoversValidator;
|
||||
use PHPUnit4And6Compat;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
$this->orgWgServer = $GLOBALS['wgServer'];
|
||||
}
|
||||
|
||||
public function tearDown() {
|
||||
$GLOBALS['wgServer'] = $this->orgWgServer;
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FauxRequest::__construct
|
||||
*/
|
||||
|
|
@ -148,7 +158,7 @@ class FauxRequestTest extends PHPUnit\Framework\TestCase {
|
|||
/**
|
||||
* @covers FauxRequest::getRequestURL
|
||||
*/
|
||||
public function testGetRequestURL() {
|
||||
public function testGetRequestURL_disallowed() {
|
||||
$req = new FauxRequest();
|
||||
$this->setExpectedException( MWException::class );
|
||||
$req->getRequestURL();
|
||||
|
|
@ -164,6 +174,45 @@ class FauxRequestTest extends PHPUnit\Framework\TestCase {
|
|||
$this->assertEquals( 'https://example.org', $req->getRequestURL() );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FauxRequest::getFullRequestURL
|
||||
*/
|
||||
public function testGetFullRequestURL_disallowed() {
|
||||
$GLOBALS['wgServer'] = '//wiki.test';
|
||||
$req = new FauxRequest();
|
||||
|
||||
$this->setExpectedException( MWException::class );
|
||||
$req->getFullRequestURL();
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FauxRequest::getFullRequestURL
|
||||
*/
|
||||
public function testGetFullRequestURL_http() {
|
||||
$GLOBALS['wgServer'] = '//wiki.test';
|
||||
$req = new FauxRequest();
|
||||
$req->setRequestURL( '/path' );
|
||||
|
||||
$this->assertSame(
|
||||
'http://wiki.test/path',
|
||||
$req->getFullRequestURL()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FauxRequest::getFullRequestURL
|
||||
*/
|
||||
public function testGetFullRequestURL_https() {
|
||||
$GLOBALS['wgServer'] = '//wiki.test';
|
||||
$req = new FauxRequest( [], false, null, 'https' );
|
||||
$req->setRequestURL( '/path' );
|
||||
|
||||
$this->assertSame(
|
||||
'https://wiki.test/path',
|
||||
$req->getFullRequestURL()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FauxRequest::__construct
|
||||
* @covers FauxRequest::getProtocol
|
||||
|
|
|
|||
Loading…
Reference in a new issue