routeParamsResolverMock = $this->createPartialMock(
\Magento\Framework\Url\RouteParamsResolver::class,
['getType', 'hasData', 'getData', 'getRouteParams', 'unsetData']
);
$escaperMock = $this->createMock(\Magento\Framework\ZendEscaper::class);
$objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
$objectManager->setBackwardCompatibleProperty($this->routeParamsResolverMock, 'escaper', $escaperMock);
$this->routeParamsPreprocessorMock = $this->getMockForAbstractClass(
\Magento\Framework\Url\RouteParamsPreprocessorInterface::class,
['unsetData'],
'',
false,
true,
true,
[]
);
$this->scopeResolverMock = $this->createMock(\Magento\Framework\Url\ScopeResolverInterface::class);
$this->scopeMock = $this->createMock(\Magento\Framework\Url\ScopeInterface::class);
$this->queryParamsResolverMock = $this->createMock(\Magento\Framework\Url\QueryParamsResolverInterface::class);
$this->sidResolverMock = $this->createMock(\Magento\Framework\Session\SidResolverInterface::class);
$this->sessionMock = $this->createMock(\Magento\Framework\Session\Generic::class);
$this->scopeConfig = $this->createMock(\Magento\Framework\App\Config\ScopeConfigInterface::class);
$this->urlModifier = $this->createMock(\Magento\Framework\Url\ModifierInterface::class);
$this->urlModifier->expects($this->any())
->method('execute')
->willReturnArgument(0);
}
/**
* @param bool $resolve
* @return \Magento\Framework\Url\RouteParamsResolverFactory|\PHPUnit_Framework_MockObject_MockObject
*/
protected function getRouteParamsResolverFactory($resolve = true)
{
$routeParamsResolverFactoryMock = $this->createMock(\Magento\Framework\Url\RouteParamsResolverFactory::class);
if ($resolve) {
$routeParamsResolverFactoryMock->expects($this->once())->method('create')
->will($this->returnValue($this->routeParamsResolverMock));
}
return $routeParamsResolverFactoryMock;
}
/**
* @param array $mockMethods
* @return \Magento\Framework\App\Request\Http|\PHPUnit_Framework_MockObject_MockObject
*/
protected function getRequestMock()
{
return $this->getMockBuilder(\Magento\Framework\App\Request\Http::class)
->disableOriginalConstructor()->getMock();
}
/**
* @param array $arguments
* @return \Magento\Framework\Url
*/
protected function getUrlModel($arguments = [])
{
$arguments = array_merge($arguments, ['scopeType' => \Magento\Store\Model\ScopeInterface::SCOPE_STORE]);
$objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
$model = $objectManager->getObject(\Magento\Framework\Url::class, $arguments);
$modelProperty = (new \ReflectionClass(get_class($model)))
->getProperty('urlModifier');
$modelProperty->setAccessible(true);
$modelProperty->setValue($model, $this->urlModifier);
$zendEscaper = new \Magento\Framework\ZendEscaper();
$escaper = new \Magento\Framework\Escaper();
$objectManager->setBackwardCompatibleProperty($escaper, 'escaper', $zendEscaper);
$objectManager->setBackwardCompatibleProperty($model, 'escaper', $escaper);
return $model;
}
/**
* @param string $httpHost
* @param string $url
* @dataProvider getCurrentUrlProvider
*/
public function testGetCurrentUrl($httpHost, $url)
{
$requestMock = $this->getRequestMock();
$requestMock->expects($this->once())->method('getRequestUri')->willReturn('/fancy_uri');
$requestMock->expects($this->once())->method('getScheme')->will($this->returnValue('http'));
$requestMock->expects($this->once())->method('getHttpHost')->will($this->returnValue($httpHost));
$model = $this->getUrlModel(['request' => $requestMock]);
$this->assertEquals($url, $model->getCurrentUrl());
}
/**
* @return array
*/
public function getCurrentUrlProvider()
{
return [
'without_port' => ['example.com', 'http://example.com/fancy_uri'],
'default_port' => ['example.com:80', 'http://example.com/fancy_uri'],
'custom_port' => ['example.com:8080', 'http://example.com:8080/fancy_uri']
];
}
public function testGetUseSession()
{
$model = $this->getUrlModel();
$model->setUseSession(false);
$this->assertFalse((bool)$model->getUseSession());
$model->setUseSession(true);
$this->assertTrue($model->getUseSession());
}
public function testGetBaseUrlNotLinkType()
{
$model = $this->getUrlModel(
[
'scopeResolver' => $this->scopeResolverMock,
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory()
]
);
$baseUrl = 'base-url';
$urlType = 'not-link';
$this->routeParamsResolverMock->expects($this->any())->method('getType')->will($this->returnValue($urlType));
$this->scopeMock->expects($this->once())->method('getBaseUrl')->will($this->returnValue($baseUrl));
$this->scopeResolverMock->expects($this->any())
->method('getScope')
->will($this->returnValue($this->scopeMock));
$baseUrlParams = ['_scope' => $this->scopeMock, '_type' => $urlType, '_secure' => true];
$this->assertEquals($baseUrl, $model->getBaseUrl($baseUrlParams));
}
public function testGetUrlValidateFilter()
{
$model = $this->getUrlModel();
$this->assertEquals('http://test.com', $model->getUrl('http://test.com'));
}
/**
* @param string|array|bool $query
* @param string $queryResult
* @param string $returnUri
* @dataProvider getUrlDataProvider
*/
public function testGetUrl($query, $queryResult, $returnUri)
{
$requestMock = $this->getRequestMock();
$routeConfigMock = $this->createMock(\Magento\Framework\App\Route\ConfigInterface::class);
$model = $this->getUrlModel(
[
'scopeResolver' => $this->scopeResolverMock,
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(),
'queryParamsResolver' => $this->queryParamsResolverMock,
'request' => $requestMock,
'routeConfig' => $routeConfigMock,
'routeParamsPreprocessor' => $this->routeParamsPreprocessorMock
]
);
$baseUrl = 'http://localhost/index.php/';
$urlType = \Magento\Framework\UrlInterface::URL_TYPE_LINK;
$this->scopeMock->expects($this->once())->method('getBaseUrl')->will($this->returnValue($baseUrl));
$this->scopeResolverMock->expects($this->any())
->method('getScope')
->will($this->returnValue($this->scopeMock));
$this->routeParamsResolverMock->expects($this->any())->method('getType')->will($this->returnValue($urlType));
$this->routeParamsResolverMock->expects($this->any())->method('getRouteParams')
->will($this->returnValue(['id' => 100]));
$this->routeParamsPreprocessorMock->expects($this->once())
->method('execute')
->willReturnArgument(2);
$requestMock->expects($this->once())->method('isDirectAccessFrontendName')->will($this->returnValue(true));
$routeConfigMock->expects($this->once())->method('getRouteFrontName')->will($this->returnValue('catalog'));
$this->queryParamsResolverMock->expects($this->once())->method('getQuery')
->will($this->returnValue($queryResult));
$url = $model->getUrl('catalog/product/view', [
'_scope' => $this->getMockForAbstractClass(\Magento\Store\Api\Data\StoreInterface::class),
'_fragment' => 'anchor',
'_escape' => 1,
'_query' => $query,
'_nosid' => 0,
'id' => 100
]);
$this->assertEquals($returnUri, $url);
}
public function testGetUrlIdempotentSetRoutePath()
{
$model = $this->getUrlModel([
'scopeResolver' => $this->scopeResolverMock,
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(),
]);
$model->setData('route_path', 'catalog/product/view');
$this->scopeResolverMock->expects($this->any())
->method('getScope')
->will($this->returnValue($this->scopeMock));
$this->urlModifier->expects($this->exactly(1))->method('execute');
$this->assertEquals('catalog/product/view', $model->getUrl('catalog/product/view'));
}
public function testGetUrlIdempotentSetRouteName()
{
$model = $this->getUrlModel([
'scopeResolver' => $this->scopeResolverMock,
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(),
'request' => $this->getRequestMock()
]);
$model->setData('route_name', 'catalog');
$this->scopeResolverMock->expects($this->any())
->method('getScope')
->will($this->returnValue($this->scopeMock));
$this->assertEquals('/product/view/', $model->getUrl('catalog/product/view'));
}
public function testGetUrlRouteHasParams()
{
$this->routeParamsResolverMock->expects($this->any())->method('getRouteParams')
->will($this->returnValue(['foo' => 'bar', 'true' => false]));
$model = $this->getUrlModel([
'scopeResolver' => $this->scopeResolverMock,
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(),
'request' => $this->getRequestMock()
]);
$this->scopeResolverMock->expects($this->any())
->method('getScope')
->will($this->returnValue($this->scopeMock));
$this->assertEquals('/index/index/foo/bar/', $model->getUrl('catalog'));
}
public function testGetUrlRouteUseRewrite()
{
$this->routeParamsResolverMock->expects($this->any())->method('getRouteParams')
->will($this->returnValue(['foo' => 'bar']));
$this->routeParamsPreprocessorMock->expects($this->once())
->method('execute')
->willReturnArgument(2);
$request = $this->getRequestMock();
$request->expects($this->once())->method('getAlias')->will($this->returnValue('/catalog/product/view/'));
$model = $this->getUrlModel([
'scopeResolver' => $this->scopeResolverMock,
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(),
'request' => $request,
'routeParamsPreprocessor' => $this->routeParamsPreprocessorMock
]);
$this->scopeResolverMock->expects($this->any())
->method('getScope')
->will($this->returnValue($this->scopeMock));
$this->assertEquals('/catalog/product/view/', $model->getUrl('catalog', ['_use_rewrite' => 1]));
}
/**
* @return array
*/
public function getUrlDataProvider()
{
return [
'string query' => [
'foo=bar',
'foo=bar',
'http://localhost/index.php/catalog/product/view/id/100/?foo=bar#anchor',
],
'array query' => [
['foo' => 'bar'],
'foo=bar',
'http://localhost/index.php/catalog/product/view/id/100/?foo=bar#anchor',
],
'without query' => [
false,
'',
'http://localhost/index.php/catalog/product/view/id/100/#anchor'
],
];
}
public function testGetUrlWithAsterisksPath()
{
$requestMock = $this->getRequestMock();
$routeConfigMock = $this->createMock(\Magento\Framework\App\Route\ConfigInterface::class);
$model = $this->getUrlModel(
[
'scopeResolver' => $this->scopeResolverMock,
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(),
'queryParamsResolver' => $this->queryParamsResolverMock,
'request' => $requestMock, 'routeConfig' => $routeConfigMock,
]
);
$baseUrl = 'http://localhost/index.php/';
$urlType = \Magento\Framework\UrlInterface::URL_TYPE_LINK;
$this->scopeMock->expects($this->once())->method('getBaseUrl')->will($this->returnValue($baseUrl));
$this->scopeResolverMock->expects($this->any())
->method('getScope')
->will($this->returnValue($this->scopeMock));
$this->routeParamsResolverMock->expects($this->any())->method('getType')->will($this->returnValue($urlType));
$this->routeParamsResolverMock->expects($this->any())->method('getRouteParams')
->will($this->returnValue(['key' => 'value']));
$requestMock->expects($this->once())->method('isDirectAccessFrontendName')->will($this->returnValue(true));
$requestMock->expects($this->once())->method('getRouteName')->will($this->returnValue('catalog'));
$requestMock->expects($this->once())
->method('getControllerName')
->will($this->returnValue('product'));
$requestMock->expects($this->once())->method('getActionName')->will($this->returnValue('view'));
$routeConfigMock->expects($this->once())->method('getRouteFrontName')->will($this->returnValue('catalog'));
$url = $model->getUrl('*/*/*/key/value');
$this->assertEquals('http://localhost/index.php/catalog/product/view/key/value/', $url);
}
public function testGetDirectUrl()
{
$requestMock = $this->getRequestMock();
$routeConfigMock = $this->createMock(\Magento\Framework\App\Route\ConfigInterface::class);
$model = $this->getUrlModel(
[
'scopeResolver' => $this->scopeResolverMock,
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(),
'queryParamsResolver' => $this->queryParamsResolverMock,
'request' => $requestMock,
'routeConfig' => $routeConfigMock,
'routeParamsPreprocessor' => $this->routeParamsPreprocessorMock
]
);
$baseUrl = 'http://localhost/index.php/';
$urlType = \Magento\Framework\UrlInterface::URL_TYPE_LINK;
$this->scopeMock->expects($this->once())->method('getBaseUrl')->will($this->returnValue($baseUrl));
$this->scopeResolverMock->expects($this->any())
->method('getScope')
->will($this->returnValue($this->scopeMock));
$this->routeParamsResolverMock->expects($this->any())->method('getType')->will($this->returnValue($urlType));
$this->routeParamsPreprocessorMock->expects($this->once())
->method('execute')
->willReturnArgument(2);
$requestMock->expects($this->once())->method('isDirectAccessFrontendName')->will($this->returnValue(true));
$url = $model->getDirectUrl('direct-url');
$this->assertEquals('http://localhost/index.php/direct-url', $url);
}
/**
* @param string $inputUrl
* @dataProvider getRebuiltUrlDataProvider
*/
public function testGetRebuiltUrl($inputUrl, $outputUrl)
{
$requestMock = $this->getRequestMock();
$model = $this->getUrlModel([
'session' => $this->sessionMock,
'request' => $requestMock,
'sidResolver' => $this->sidResolverMock,
'scopeResolver' => $this->scopeResolverMock,
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(false),
'queryParamsResolver' => $this->queryParamsResolverMock,
]);
$this->queryParamsResolverMock->expects($this->once())->method('getQuery')
->will($this->returnValue('query=123'));
$this->assertEquals($outputUrl, $model->getRebuiltUrl($inputUrl));
}
public function testGetRedirectUrl()
{
$model = $this->getUrlModel(
[
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(),
'session' => $this->sessionMock,
'sidResolver' => $this->sidResolverMock,
'queryParamsResolver' => $this->queryParamsResolverMock,
]
);
$this->sidResolverMock->expects($this->once())->method('getUseSessionInUrl')->will($this->returnValue(true));
$this->sessionMock->expects($this->once())->method('getSessionIdForHost')->will($this->returnValue(false));
$this->sidResolverMock->expects($this->once())->method('getUseSessionVar')->will($this->returnValue(true));
$this->routeParamsResolverMock->expects($this->once())->method('hasData')->with('secure_is_forced')
->will($this->returnValue(true));
$this->sidResolverMock->expects($this->never())->method('getSessionIdQueryParam');
$this->queryParamsResolverMock->expects($this->once())
->method('getQuery')
->will($this->returnValue('foo=bar'));
$this->assertEquals('http://example.com/?foo=bar', $model->getRedirectUrl('http://example.com/'));
}
public function testGetRedirectUrlWithSessionId()
{
$model = $this->getUrlModel(
[
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(false),
'session' => $this->sessionMock,
'sidResolver' => $this->sidResolverMock,
'queryParamsResolver' => $this->queryParamsResolverMock,
]
);
$this->sidResolverMock->expects($this->once())->method('getUseSessionInUrl')->will($this->returnValue(true));
$this->sessionMock->expects($this->once())->method('getSessionIdForHost')
->will($this->returnValue('session-id'));
$this->sidResolverMock->expects($this->once())->method('getUseSessionVar')->will($this->returnValue(false));
$this->sidResolverMock->expects($this->once())->method('getSessionIdQueryParam');
$this->queryParamsResolverMock->expects($this->once())
->method('getQuery')
->will($this->returnValue('foo=bar'));
$this->assertEquals('http://example.com/?foo=bar', $model->getRedirectUrl('http://example.com/'));
}
/**
* @return array
*/
public function getRebuiltUrlDataProvider()
{
return [
'with port' => [
'https://example.com:88/index.php/catalog/index/view?query=123#hash',
'https://example.com:88/index.php/catalog/index/view?query=123#hash'
],
'without port' => [
'https://example.com/index.php/catalog/index/view?query=123#hash',
'https://example.com/index.php/catalog/index/view?query=123#hash'
],
'http' => [
'http://example.com/index.php/catalog/index/view?query=123#hash',
'http://example.com/index.php/catalog/index/view?query=123#hash'
]
];
}
public function testGetRouteUrlWithValidUrl()
{
$model = $this->getUrlModel(['routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(false)]);
$this->routeParamsResolverMock->expects($this->never())->method('unsetData');
$this->assertEquals('http://example.com', $model->getRouteUrl('http://example.com'));
}
public function testAddSessionParam()
{
$model = $this->getUrlModel([
'session' => $this->sessionMock,
'sidResolver' => $this->sidResolverMock,
'queryParamsResolver' => $this->queryParamsResolverMock,
]);
$this->sidResolverMock->expects($this->once())->method('getSessionIdQueryParam')->with($this->sessionMock)
->will($this->returnValue('sid'));
$this->sessionMock->expects($this->once())->method('getSessionId')->will($this->returnValue('session-id'));
$this->queryParamsResolverMock->expects($this->once())->method('setQueryParam')->with('sid', 'session-id');
$model->addSessionParam();
}
/**
* @param bool $result
* @param string $referrer
* @dataProvider isOwnOriginUrlDataProvider
*/
public function testIsOwnOriginUrl($result, $referrer)
{
$requestMock = $this->getRequestMock();
$this->hostChecker = $this->getMockBuilder(HostChecker::class)
->disableOriginalConstructor()->getMock();
$this->hostChecker->expects($this->once())->method('isOwnOrigin')->with($referrer)->willReturn($result);
$model = $this->getUrlModel(['hostChecker' => $this->hostChecker, 'request' => $requestMock]);
$requestMock->expects($this->once())->method('getServer')->with('HTTP_REFERER')
->will($this->returnValue($referrer));
$this->assertEquals($result, $model->isOwnOriginUrl());
}
/**
* @return array
*/
public function isOwnOriginUrlDataProvider()
{
return [
'is origin url' => [true, 'http://localhost/'],
'is not origin url' => [false, 'http://example.com/'],
];
}
/**
* @param string $urlType
* @param string $configPath
* @param bool $isSecure
* @param int $isSecureCallCount
* @param string $key
* @dataProvider getConfigDataDataProvider
*/
public function testGetConfigData($urlType, $configPath, $isSecure, $isSecureCallCount, $key)
{
$urlSecurityInfoMock = $this->createMock(\Magento\Framework\Url\SecurityInfoInterface::class);
$model = $this->getUrlModel([
'urlSecurityInfo' => $urlSecurityInfoMock,
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(),
'scopeResolver' => $this->scopeResolverMock,
'scopeConfig' => $this->scopeConfig,
]);
$this->scopeConfig->expects($this->any())
->method('getValue')
->with($this->equalTo($configPath), \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $this->scopeMock)
->will($this->returnValue('http://localhost/'));
$this->routeParamsResolverMock->expects($this->at(0))->method('hasData')->with('secure_is_forced')
->will($this->returnValue(false));
$this->scopeResolverMock->expects($this->any())
->method('getScope')
->will($this->returnValue($this->scopeMock));
$this->scopeMock->expects($this->once())->method('isUrlSecure')->will($this->returnValue(true));
$this->routeParamsResolverMock->expects($this->at(1))->method('hasData')->with('secure')
->will($this->returnValue(false));
$this->routeParamsResolverMock->expects($this->any())->method('getType')
->will($this->returnValue($urlType));
$this->routeParamsResolverMock->expects($this->once())
->method('getData')
->will($this->returnValue($isSecure));
$urlSecurityInfoMock->expects($this->exactly($isSecureCallCount))->method('isSecure')
->will($this->returnValue(false));
$this->assertEquals('http://localhost/', $model->getConfigData($key));
}
/**
* @return array
*/
public function getConfigDataDataProvider()
{
return [
'secure url' => ['some-type', 'web/secure/base_url_secure', true, 0, 'base_url_secure'],
'unsecure url' => [
\Magento\Framework\UrlInterface::URL_TYPE_LINK,
'web/unsecure/base_url_unsecure',
false,
1,
'base_url_unsecure',
],
];
}
public function testGetConfigDataWithSecureIsForcedParam()
{
$model = $this->getUrlModel([
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(),
'scopeResolver' => $this->scopeResolverMock,
'scopeConfig' => $this->scopeConfig,
]);
$this->scopeConfig->expects($this->any())
->method('getValue')
->with(
'web/secure/base_url_secure_forced',
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$this->scopeMock
)
->will($this->returnValue('http://localhost/'));
$this->routeParamsResolverMock->expects($this->once())->method('hasData')->with('secure_is_forced')
->will($this->returnValue(true));
$this->routeParamsResolverMock->expects($this->once())->method('getData')->with('secure')
->will($this->returnValue(true));
$this->scopeResolverMock->expects($this->any())
->method('getScope')
->will($this->returnValue($this->scopeMock));
$this->assertEquals('http://localhost/', $model->getConfigData('base_url_secure_forced'));
}
/**
* @param string $html
* @param string $result
* @dataProvider sessionUrlVarWithMatchedHostsAndBaseUrlDataProvider
*/
public function testSessionUrlVarWithMatchedHostsAndBaseUrl($html, $result)
{
$requestMock = $this->getRequestMock();
$model = $this->getUrlModel(
[
'session' => $this->sessionMock,
'request' => $requestMock,
'sidResolver' => $this->sidResolverMock,
'scopeResolver' => $this->scopeResolverMock,
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(),
]
);
$requestMock->expects($this->once())
->method('getHttpHost')
->will($this->returnValue('localhost'));
$this->scopeMock->expects($this->once())
->method('getBaseUrl')
->will($this->returnValue('http://localhost'));
$this->scopeResolverMock->expects($this->any())
->method('getScope')
->will($this->returnValue($this->scopeMock));
$this->sidResolverMock->expects($this->never())
->method('getSessionIdQueryParam');
$this->assertEquals($result, $model->sessionUrlVar($html));
}
public function testSessionUrlVarWithoutMatchedHostsAndBaseUrl()
{
$requestMock = $this->getRequestMock();
$model = $this->getUrlModel(
[
'session' => $this->sessionMock,
'request' => $requestMock,
'sidResolver' => $this->sidResolverMock,
'scopeResolver' => $this->scopeResolverMock,
'routeParamsResolverFactory' => $this->getRouteParamsResolverFactory(),
]
);
$requestMock->expects($this->once())->method('getHttpHost')->will($this->returnValue('localhost'));
$this->scopeMock->expects($this->once())
->method('getBaseUrl')
->will($this->returnValue('http://example.com'));
$this->scopeResolverMock->expects($this->any())
->method('getScope')
->will($this->returnValue($this->scopeMock));
$this->sidResolverMock->expects($this->once())->method('getSessionIdQueryParam')
->will($this->returnValue('SID'));
$this->sessionMock->expects($this->once())->method('getSessionId')
->will($this->returnValue('session-id'));
$this->assertEquals(
'www.example.com',
$model->sessionUrlVar('www.example.com')
);
}
/**
* @return array
*/
public function sessionUrlVarWithMatchedHostsAndBaseUrlDataProvider()
{
return [
[
'www.example.com',
'www.example.com',
],
[
'www.example.com',
'www.example.com',
],
[
'www.example.com',
'www.example.com',
],
[
'www.example.com',
'www.example.com',
],
];
}
public function testSetRequest()
{
$initRequestMock = $this->getRequestMock();
$requestMock = $this->getRequestMock();
$initRequestMock->expects($this->any())->method('getScheme')->will($this->returnValue('fake'));
$initRequestMock->expects($this->any())->method('getHttpHost')->will($this->returnValue('fake-host'));
$requestMock->expects($this->any())->method('getScheme')->will($this->returnValue('http'));
$requestMock->expects($this->any())->method('getHttpHost')->will($this->returnValue('example.com'));
$model = $this->getUrlModel(['request' => $initRequestMock]);
$model->setRequest($requestMock);
$this->assertEquals('http://example.com', $model->getCurrentUrl());
}
}