Skip to content

Commit e3f5953

Browse files
author
Oleksii Korshenko
authored
MAGETWO-87477: issue magento#13497 - Method getUrl in Magento\Catalog\Model\Product\Attribu… magento#13498
2 parents 5c2b4a1 + ca296c6 commit e3f5953

File tree

2 files changed

+56
-25
lines changed
  • app/code/Magento/Catalog

2 files changed

+56
-25
lines changed

app/code/Magento/Catalog/Model/Product/Attribute/Frontend/Image.php

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,28 @@
99
*
1010
* @author Magento Core Team <[email protected]>
1111
*/
12+
1213
namespace Magento\Catalog\Model\Product\Attribute\Frontend;
1314

14-
class Image extends \Magento\Eav\Model\Entity\Attribute\Frontend\AbstractFrontend
15+
use Magento\Eav\Model\Entity\Attribute\Frontend\AbstractFrontend;
16+
use Magento\Framework\UrlInterface;
17+
use Magento\Store\Model\StoreManagerInterface;
18+
19+
class Image extends AbstractFrontend
1520
{
1621
/**
1722
* Store manager
1823
*
19-
* @var \Magento\Store\Model\StoreManagerInterface
24+
* @var StoreManagerInterface
2025
*/
2126
protected $_storeManager;
2227

2328
/**
2429
* Construct
2530
*
26-
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
31+
* @param StoreManagerInterface $storeManager
2732
*/
28-
public function __construct(\Magento\Store\Model\StoreManagerInterface $storeManager)
33+
public function __construct(StoreManagerInterface $storeManager)
2934
{
3035
$this->_storeManager = $storeManager;
3136
}
@@ -42,9 +47,9 @@ public function getUrl($product)
4247
$image = $product->getData($this->getAttribute()->getAttributeCode());
4348
$url = false;
4449
if (!empty($image)) {
45-
$url = $this->_storeManager->getStore($product->getStore())
46-
->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA)
47-
. 'catalog/product/' . $image;
50+
$url = $this->_storeManager
51+
->getStore($product->getStore())
52+
->getBaseUrl(UrlInterface::URL_TYPE_MEDIA) . 'catalog/product/' . ltrim($image, '/');
4853
}
4954
return $url;
5055
}

app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Frontend/ImageTest.php

Lines changed: 44 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,45 +3,71 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
67
namespace Magento\Catalog\Test\Unit\Model\Product\Attribute\Frontend;
78

9+
use Magento\Catalog\Model\Product;
10+
use Magento\Catalog\Model\Product\Attribute\Frontend\Image;
11+
use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
812
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
13+
use Magento\Store\Model\Store;
14+
use Magento\Store\Model\StoreManagerInterface;
15+
use PHPUnit\Framework\TestCase;
916

10-
class ImageTest extends \PHPUnit\Framework\TestCase
17+
class ImageTest extends TestCase
1118
{
1219
/**
13-
* @var \Magento\Catalog\Model\Product\Attribute\Frontend\Image
20+
* @var Image
1421
*/
1522
private $model;
1623

17-
public function testGetUrl()
24+
/**
25+
* @dataProvider getUrlDataProvider
26+
* @param string $expectedImage
27+
* @param string $productImage
28+
*/
29+
public function testGetUrl(string $expectedImage, string $productImage)
30+
{
31+
$this->assertEquals($expectedImage, $this->model->getUrl($this->getMockedProduct($productImage)));
32+
}
33+
34+
/**
35+
* Data provider for testGetUrl
36+
*
37+
* @return array
38+
*/
39+
public function getUrlDataProvider(): array
1840
{
19-
$this->assertEquals('catalog/product/img.jpg', $this->model->getUrl($this->getMockedProduct()));
41+
return [
42+
['catalog/product/img.jpg', 'img.jpg'],
43+
['catalog/product/img.jpg', '/img.jpg'],
44+
];
2045
}
2146

2247
protected function setUp()
2348
{
2449
$helper = new ObjectManager($this);
2550
$this->model = $helper->getObject(
26-
\Magento\Catalog\Model\Product\Attribute\Frontend\Image::class,
51+
Image::class,
2752
['storeManager' => $this->getMockedStoreManager()]
2853
);
2954
$this->model->setAttribute($this->getMockedAttribute());
3055
}
3156

3257
/**
33-
* @return \Magento\Catalog\Model\Product
58+
* @param string $productImage
59+
* @return Product
3460
*/
35-
private function getMockedProduct()
61+
private function getMockedProduct(string $productImage): Product
3662
{
37-
$mockBuilder = $this->getMockBuilder(\Magento\Catalog\Model\Product::class);
63+
$mockBuilder = $this->getMockBuilder(Product::class);
3864
$mock = $mockBuilder->setMethods(['getData', 'getStore', '__wakeup'])
3965
->disableOriginalConstructor()
4066
->getMock();
4167

4268
$mock->expects($this->any())
4369
->method('getData')
44-
->will($this->returnValue('img.jpg'));
70+
->will($this->returnValue($productImage));
4571

4672
$mock->expects($this->any())
4773
->method('getStore');
@@ -50,13 +76,13 @@ private function getMockedProduct()
5076
}
5177

5278
/**
53-
* @return \Magento\Store\Model\StoreManagerInterface
79+
* @return StoreManagerInterface
5480
*/
55-
private function getMockedStoreManager()
81+
private function getMockedStoreManager(): StoreManagerInterface
5682
{
5783
$mockedStore = $this->getMockedStore();
5884

59-
$mockBuilder = $this->getMockBuilder(\Magento\Store\Model\StoreManagerInterface::class);
85+
$mockBuilder = $this->getMockBuilder(StoreManagerInterface::class);
6086
$mock = $mockBuilder->setMethods(['getStore'])
6187
->disableOriginalConstructor()
6288
->getMockForAbstractClass();
@@ -69,11 +95,11 @@ private function getMockedStoreManager()
6995
}
7096

7197
/**
72-
* @return \Magento\Store\Model\Store
98+
* @return Store
7399
*/
74-
private function getMockedStore()
100+
private function getMockedStore(): Store
75101
{
76-
$mockBuilder = $this->getMockBuilder(\Magento\Store\Model\Store::class);
102+
$mockBuilder = $this->getMockBuilder(Store::class);
77103
$mock = $mockBuilder->setMethods(['getBaseUrl', '__wakeup'])
78104
->disableOriginalConstructor()
79105
->getMockForAbstractClass();
@@ -86,11 +112,11 @@ private function getMockedStore()
86112
}
87113

88114
/**
89-
* @return \Magento\Eav\Model\Entity\Attribute\AbstractAttribute
115+
* @return AbstractAttribute
90116
*/
91-
private function getMockedAttribute()
117+
private function getMockedAttribute(): AbstractAttribute
92118
{
93-
$mockBuilder = $this->getMockBuilder(\Magento\Eav\Model\Entity\Attribute\AbstractAttribute::class);
119+
$mockBuilder = $this->getMockBuilder(AbstractAttribute::class);
94120
$mockBuilder->setMethods(['getAttributeCode', '__wakeup']);
95121
$mockBuilder->disableOriginalConstructor();
96122
$mock = $mockBuilder->getMockForAbstractClass();

0 commit comments

Comments
 (0)