Skip to content
Snippets Groups Projects
Commit bbe231c6 authored by Stanislav Lopukhov's avatar Stanislav Lopukhov
Browse files

MAGETWO-62357: Change serializer for metadata in UrlRewrite model and unit tests

parent bbb180fa
No related merge requests found
Showing
with 441 additions and 32 deletions
......@@ -11,6 +11,8 @@ use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
use Magento\UrlRewrite\Model\UrlPersistInterface;
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\Serialize\SerializerInterface;
class Remove
{
......@@ -23,26 +25,32 @@ class Remove
/** @var ChildrenCategoriesProvider */
protected $childrenCategoriesProvider;
/** @var SerializerInterface */
private $serializer;
/**
* @param UrlPersistInterface $urlPersist
* @param ProductUrlRewriteGenerator $productUrlRewriteGenerator
* @param ChildrenCategoriesProvider $childrenCategoriesProvider
* @param SerializerInterface|null $serializer
*/
public function __construct(
UrlPersistInterface $urlPersist,
ProductUrlRewriteGenerator $productUrlRewriteGenerator,
ChildrenCategoriesProvider $childrenCategoriesProvider
ChildrenCategoriesProvider $childrenCategoriesProvider,
SerializerInterface $serializer = null
) {
$this->urlPersist = $urlPersist;
$this->productUrlRewriteGenerator = $productUrlRewriteGenerator;
$this->childrenCategoriesProvider = $childrenCategoriesProvider;
$this->serializer = $serializer ?: ObjectManager::getInstance()->get(SerializerInterface::class);
}
/**
* Remove product urls from storage
*
* @param \Magento\Catalog\Model\ResourceModel\Category $subject
* @param callable $proceed
* @param \Closure $proceed
* @param CategoryInterface $category
* @return mixed
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
......@@ -77,7 +85,7 @@ class Remove
);
$this->urlPersist->deleteByData(
[
UrlRewrite::METADATA => serialize(['category_id' => $categoryId]),
UrlRewrite::METADATA => $this->serializer->serialize(['category_id' => $categoryId]),
UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
]
);
......
......@@ -13,6 +13,7 @@ use Magento\Framework\App\ObjectManager;
use Magento\Framework\Event\Observer as EventObserver;
use Magento\UrlRewrite\Model\UrlPersistInterface;
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
use Magento\Framework\Serialize\SerializerInterface;
class UrlRewriteHandler
{
......@@ -34,30 +35,34 @@ class UrlRewriteHandler
/** @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory */
protected $productCollectionFactory;
/**
* @var CategoryBasedProductRewriteGenerator
*/
/** @var CategoryBasedProductRewriteGenerator */
private $categoryBasedProductRewriteGenerator;
/** @var SerializerInterface */
private $serializer;
/**
* @param \Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider $childrenCategoriesProvider
* @param CategoryUrlRewriteGenerator $categoryUrlRewriteGenerator
* @param ProductUrlRewriteGenerator $productUrlRewriteGenerator
* @param UrlPersistInterface $urlPersist
* @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
* @param SerializerInterface|null $serializer
*/
public function __construct(
\Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider $childrenCategoriesProvider,
CategoryUrlRewriteGenerator $categoryUrlRewriteGenerator,
ProductUrlRewriteGenerator $productUrlRewriteGenerator,
UrlPersistInterface $urlPersist,
\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
SerializerInterface $serializer = null
) {
$this->childrenCategoriesProvider = $childrenCategoriesProvider;
$this->categoryUrlRewriteGenerator = $categoryUrlRewriteGenerator;
$this->productUrlRewriteGenerator = $productUrlRewriteGenerator;
$this->urlPersist = $urlPersist;
$this->productCollectionFactory = $productCollectionFactory;
$this->serializer = $serializer ?: ObjectManager::getInstance()->get(SerializerInterface::class);
}
/**
......@@ -164,7 +169,7 @@ class UrlRewriteHandler
);
$this->urlPersist->deleteByData(
[
UrlRewrite::METADATA => serialize(['category_id' => $categoryId]),
UrlRewrite::METADATA => $this->serializer->serialize(['category_id' => $categoryId]),
UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
]
);
......
......@@ -39,6 +39,9 @@ class RemoveTest extends \PHPUnit_Framework_TestCase
*/
private $objectMock;
/** @var \Magento\Framework\Serialize\SerializerInterface|\PHPUnit_Framework_MockObject_MockObject */
private $serializerMock;
protected function setUp()
{
$this->objectManager = new ObjectManager($this);
......@@ -52,6 +55,7 @@ class RemoveTest extends \PHPUnit_Framework_TestCase
$this->objectMock = $this->getMockBuilder(Category::class)
->disableOriginalConstructor()
->getMock();
$this->serializerMock = $this->getMock(\Magento\Framework\Serialize\SerializerInterface::class, [], [], '', false);
}
public function testAroundDelete()
......@@ -64,7 +68,8 @@ class RemoveTest extends \PHPUnit_Framework_TestCase
CategoryRemovePlugin::class,
[
'urlPersist' => $this->urlPersistMock,
'childrenCategoriesProvider' => $this->childrenCategoriesProviderMock
'childrenCategoriesProvider' => $this->childrenCategoriesProviderMock,
'serializer' => $this->serializerMock
]
);
$this->childrenCategoriesProviderMock->expects($this->once())
......@@ -76,6 +81,9 @@ class RemoveTest extends \PHPUnit_Framework_TestCase
->willReturn(1);
$this->urlPersistMock->expects($this->exactly(2))
->method('deleteByData');
$this->serializerMock->expects($this->once())
->method('serialize')
->with(['category_id' => 1]);
$this->assertSame(
$this->subjectMock,
$plugin->aroundDelete($this->subjectMock, $proceed, $this->objectMock)
......
......@@ -34,18 +34,37 @@ class CategoryUrlRewriteGeneratorTest extends \PHPUnit_Framework_TestCase
/** @var \Magento\Catalog\Api\CategoryRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject */
protected $categoryRepository;
/** @var \Magento\Framework\Serialize\SerializerInterface|\PHPUnit_Framework_MockObject_MockObject */
protected $serializer;
/**
* Test method
*/
protected function setUp()
{
$this->currentUrlRewritesRegenerator = $this->getMockBuilder(
$this->serializer = $this->getMock(\Magento\Framework\Serialize\SerializerInterface::class, [], [], '', false);
$this->serializer->expects($this->any())
->method('serialize')
->willReturnCallback(
function ($value) {
return json_encode($value);
}
);
$this->serializer->expects($this->any())
->method('unserialize')
->willReturnCallback(
function ($value) {
return json_decode($value, true);
}
);
$this->currentUrlRewritesRegenerator = $this->getMockBuilder(
\Magento\CatalogUrlRewrite\Model\Category\CurrentUrlRewritesRegenerator::class
)->disableOriginalConstructor()->getMock();
$this->canonicalUrlRewriteGenerator = $this->getMockBuilder(
$this->canonicalUrlRewriteGenerator = $this->getMockBuilder(
\Magento\CatalogUrlRewrite\Model\Category\CanonicalUrlRewriteGenerator::class
)->disableOriginalConstructor()->getMock();
$this->childrenUrlRewriteGenerator = $this->getMockBuilder(
$this->childrenUrlRewriteGenerator = $this->getMockBuilder(
\Magento\CatalogUrlRewrite\Model\Category\ChildrenUrlRewriteGenerator::class
)->disableOriginalConstructor()->getMock();
$this->storeViewService = $this->getMockBuilder(\Magento\CatalogUrlRewrite\Service\V1\StoreViewService::class)
......@@ -53,7 +72,7 @@ class CategoryUrlRewriteGeneratorTest extends \PHPUnit_Framework_TestCase
$this->category = $this->getMock(\Magento\Catalog\Model\Category::class, [], [], '', false);
$this->categoryRepository = $this->getMock(\Magento\Catalog\Api\CategoryRepositoryInterface::class);
$this->categoryUrlRewriteGenerator = (new ObjectManager($this))->getObject(
$this->categoryUrlRewriteGenerator = (new ObjectManager($this))->getObject(
\Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator::class,
[
'canonicalUrlRewriteGenerator' => $this->canonicalUrlRewriteGenerator,
......@@ -74,22 +93,22 @@ class CategoryUrlRewriteGeneratorTest extends \PHPUnit_Framework_TestCase
$this->category->expects($this->any())->method('getStoreIds')->will($this->returnValue([1]));
$this->storeViewService->expects($this->once())->method('doesEntityHaveOverriddenUrlKeyForStore')
->will($this->returnValue(false));
$canonical = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite();
$canonical = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializer);
$canonical->setTargetPath('category-1')
->setStoreId(1);
$this->canonicalUrlRewriteGenerator->expects($this->any())->method('generate')
->will($this->returnValue([$canonical]));
$children = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite();
$children = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializer);
$children->setTargetPath('category-2')
->setStoreId(2);
$this->childrenUrlRewriteGenerator->expects($this->any())->method('generate')
->will($this->returnValue([$children]));
$current = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite();
$current = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializer);
$current->setTargetPath('category-3')
->setStoreId(3);
$this->currentUrlRewritesRegenerator->expects($this->any())->method('generate')
->will($this->returnValue([$current]));
$categoryForSpecificStore = $this->getMock(
$categoryForSpecificStore = $this->getMock(
\Magento\Catalog\Model\Category::class,
['getUrlKey', 'getUrlPath'],
[],
......@@ -111,7 +130,7 @@ class CategoryUrlRewriteGeneratorTest extends \PHPUnit_Framework_TestCase
{
$this->category->expects($this->any())->method('getStoreId')->will($this->returnValue(1));
$this->category->expects($this->never())->method('getStoreIds');
$canonical = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite();
$canonical = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializer);
$canonical->setTargetPath('category-1')
->setStoreId(1);
$this->canonicalUrlRewriteGenerator->expects($this->any())->method('generate')
......
......@@ -41,8 +41,27 @@ class ProductScopeRewriteGeneratorTest extends \PHPUnit_Framework_TestCase
/** @var ProductScopeRewriteGenerator */
private $productScopeGenerator;
/** @var \Magento\Framework\Serialize\SerializerInterface|\PHPUnit_Framework_MockObject_MockObject */
private $serializer;
public function setUp()
{
$this->serializer = $this->getMock(\Magento\Framework\Serialize\SerializerInterface::class, [], [], '', false);
$this->serializer->expects($this->any())
->method('serialize')
->willReturnCallback(
function ($value) {
return json_encode($value);
}
);
$this->serializer->expects($this->any())
->method('unserialize')
->willReturnCallback(
function ($value) {
return json_decode($value, true);
}
);
$this->currentUrlRewritesRegenerator = $this->getMockBuilder(
\Magento\CatalogUrlRewrite\Model\Product\CurrentUrlRewritesRegenerator::class
)->disableOriginalConstructor()->getMock();
......@@ -90,22 +109,22 @@ class ProductScopeRewriteGeneratorTest extends \PHPUnit_Framework_TestCase
->method('getParentId')
->willReturn(1);
$this->initObjectRegistryFactory([]);
$canonical = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite();
$canonical = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializer);
$canonical->setTargetPath('category-1')
->setStoreId(1);
$this->canonicalUrlRewriteGenerator->expects($this->any())->method('generate')
->will($this->returnValue([$canonical]));
$categories = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite();
$categories = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializer);
$categories->setTargetPath('category-2')
->setStoreId(2);
$this->categoriesUrlRewriteGenerator->expects($this->any())->method('generate')
->will($this->returnValue([$categories]));
$current = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite();
$current = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializer);
$current->setTargetPath('category-3')
->setStoreId(3);
$this->currentUrlRewritesRegenerator->expects($this->any())->method('generate')
->will($this->returnValue([$current]));
$anchorCategories = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite();
$anchorCategories = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializer);
$anchorCategories->setTargetPath('category-4')
->setStoreId(4);
$this->anchorUrlRewriteGenerator->expects($this->any())->method('generate')
......@@ -137,7 +156,7 @@ class ProductScopeRewriteGeneratorTest extends \PHPUnit_Framework_TestCase
$store->expects($this->any())->method('getRootCategoryId')->will($this->returnValue($storeRootCategoryId));
$this->storeManager->expects($this->any())->method('getStore')->will($this->returnValue($store));
$this->initObjectRegistryFactory([$category]);
$canonical = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite();
$canonical = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializer);
$canonical->setTargetPath('category-1')
->setStoreId(1);
$this->canonicalUrlRewriteGenerator->expects($this->any())->method('generate')
......
<?php
/**
* Copyright © 2017 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\CatalogUrlRewrite\Test\Unit\Observer;
use Magento\CatalogUrlRewrite\Observer\UrlRewriteHandler;
use Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider;
use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
use Magento\UrlRewrite\Model\UrlPersistInterface;
use Magento\Framework\Serialize\SerializerInterface;
class UrlRewriteHandlerTest extends \PHPUnit_Framework_TestCase
{
/**
* @var \Magento\CatalogUrlRewrite\Observer\UrlRewriteHandler
*/
protected $urlRewriteHandler;
/**
* @var \Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider|\PHPUnit_Framework_MockObject_MockObject
*/
protected $childrenCategoriesProviderMock;
/**
* @var \Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator|\PHPUnit_Framework_MockObject_MockObject
*/
protected $categoryUrlRewriteGeneratorMock;
/**
* @var \Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator|\PHPUnit_Framework_MockObject_MockObject
*/
protected $productUrlRewriteGeneratorMock;
/**
* @var \Magento\UrlRewrite\Model\UrlPersistInterface|\PHPUnit_Framework_MockObject_MockObject
*/
protected $urlPersistMock;
/**
* @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
*/
protected $collectionFactoryMock;
/**
* @var \Magento\Framework\Serialize\SerializerInterface|\PHPUnit_Framework_MockObject_MockObject
*/
private $serializerMock;
/**
* {@inheritDoc}
*/
protected function setUp()
{
$this->childrenCategoriesProviderMock = $this->getMockBuilder(ChildrenCategoriesProvider::class)
->getMock();
$this->categoryUrlRewriteGeneratorMock = $this->getMockBuilder(CategoryUrlRewriteGenerator::class)
->disableOriginalConstructor()
->getMock();
$this->productUrlRewriteGeneratorMock = $this->getMockBuilder(ProductUrlRewriteGenerator::class)
->disableOriginalConstructor()
->getMock();
$this->urlPersistMock = $this->getMockBuilder(UrlPersistInterface::class)
->getMock();
$this->collectionFactoryMock = $this->getMockBuilder(CollectionFactory::class)
->disableOriginalConstructor()
->getMock();
$this->serializerMock = $this->getMockBuilder(SerializerInterface::class)
->disableOriginalConstructor()
->getMock();
$this->urlRewriteHandler = new UrlRewriteHandler(
$this->childrenCategoriesProviderMock,
$this->categoryUrlRewriteGeneratorMock,
$this->productUrlRewriteGeneratorMock,
$this->urlPersistMock,
$this->collectionFactoryMock,
$this->serializerMock
);
}
public function testDeleteCategoryRewritesForChildren()
{
$category = $this->getMockBuilder(\Magento\Catalog\Model\Category::class)
->disableOriginalConstructor()
->getMock();
$category->expects($this->once())
->method('getId')
->willReturn(2);
$this->childrenCategoriesProviderMock->expects($this->once())
->method('getChildrenIds')
->with($category, true)
->willReturn([3, 4]);
$this->serializerMock->expects($this->exactly(3))
->method('serialize');
$this->urlRewriteHandler->deleteCategoryRewritesForChildren($category);
}
}
......@@ -7,5 +7,8 @@
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Magento_SampleData" setup_version="2.0.0">
<sequence>
<module name="Magento_UrlRewrite"/>
</sequence>
</module>
</config>
......@@ -6,8 +6,6 @@
*/
namespace Magento\UrlRewrite\Controller\Adminhtml\Url\Rewrite;
use Magento\Catalog\Model\Category;
use Magento\Catalog\Model\Product;
use Magento\Framework\Exception\LocalizedException;
use Magento\UrlRewrite\Model\UrlFinderInterface;
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
......@@ -63,7 +61,7 @@ class Save extends \Magento\UrlRewrite\Controller\Adminhtml\Url\Rewrite
$model->setEntityType($productId ? self::ENTITY_TYPE_PRODUCT : self::ENTITY_TYPE_CATEGORY)
->setEntityId($productId ?: $categoryId);
if ($productId && $categoryId) {
$model->setMetadata(serialize(['category_id' => $categoryId]));
$model->setMetadata(['category_id' => $categoryId]);
}
}
$model->setTargetPath($this->getTargetPath($model));
......
......@@ -5,6 +5,9 @@
*/
namespace Magento\UrlRewrite\Model;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\Serialize\SerializerInterface;
/**
* @method int getEntityId()
* @method string getEntityType()
......@@ -14,7 +17,6 @@ namespace Magento\UrlRewrite\Model;
* @method string getTargetPath()
* @method UrlRewrite setEntityId(int $value)
* @method UrlRewrite setEntityType(string $value)
* @method UrlRewrite setMetadata($value)
* @method UrlRewrite setRequestPath($value)
* @method UrlRewrite setTargetPath($value)
* @method UrlRewrite setRedirectType($value)
......@@ -23,6 +25,32 @@ namespace Magento\UrlRewrite\Model;
*/
class UrlRewrite extends \Magento\Framework\Model\AbstractModel
{
/**
* @var SerializerInterface
*/
private $serializer;
/**
* UrlRewrite constructor.
* @param \Magento\Framework\Model\Context $context
* @param \Magento\Framework\Registry $registry
* @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
* @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
* @param array $data
* @param SerializerInterface $serializer
*/
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = [],
SerializerInterface $serializer = null
) {
$this->serializer = $serializer ?: ObjectManager::getInstance()->get(SerializerInterface::class);
parent::__construct($context, $registry, $resource, $resourceCollection, $data);
}
/**
* Initialize corresponding resource model
*
......@@ -41,6 +69,21 @@ class UrlRewrite extends \Magento\Framework\Model\AbstractModel
public function getMetadata()
{
$metadata = $this->getData(\Magento\UrlRewrite\Service\V1\Data\UrlRewrite::METADATA);
return !empty($metadata) ? unserialize($metadata) : [];
return !empty($metadata) ? $this->serializer->unserialize($metadata) : [];
}
/**
* Overwrite Metadata in the object.
*
* @param array|string $metadata
*
* @return $this
*/
public function setMetadata($metadata)
{
if (is_array($metadata)) {
$metadata = $this->serializer->serialize($metadata);
}
return $this->setData(\Magento\UrlRewrite\Service\V1\Data\UrlRewrite::METADATA, $metadata);
}
}
......@@ -6,6 +6,8 @@
namespace Magento\UrlRewrite\Service\V1\Data;
use Magento\Framework\Api\AbstractSimpleObject;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\Serialize\SerializerInterface;
/**
* Data abstract class for url storage
......@@ -37,6 +39,25 @@ class UrlRewrite extends AbstractSimpleObject
self::DESCRIPTION => null,
];
/**
* @var SerializerInterface
*/
private $serializer;
/**
* UrlRewrite constructor.
*
* @param array $data
* @param SerializerInterface $serializer
*/
public function __construct(
$data = [],
SerializerInterface $serializer = null
) {
$this->serializer = $serializer ?: ObjectManager::getInstance()->get(SerializerInterface::class);
parent::__construct($data);
}
/**
* Get data by key
*
......@@ -216,7 +237,7 @@ class UrlRewrite extends AbstractSimpleObject
public function getMetadata()
{
$metadata = $this->_get(self::METADATA);
return !empty($metadata) ? unserialize($metadata) : [];
return !empty($metadata) ? $this->serializer->unserialize($metadata) : [];
}
/**
......@@ -227,7 +248,7 @@ class UrlRewrite extends AbstractSimpleObject
public function setMetadata($metadata)
{
if (is_array($metadata)) {
$metadata = serialize($metadata);
$metadata = $this->serializer->serialize($metadata);
}
return $this->setData(UrlRewrite::METADATA, $metadata);
}
......
<?php
/**
* Copyright © 2017 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\UrlRewrite\Setup;
use Magento\Framework\DB\FieldDataConverterFactory;
use Magento\Framework\DB\DataConverter\SerializedToJson;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\UpgradeDataInterface;
class UpgradeData implements UpgradeDataInterface
{
/**
* @var FieldDataConverterFactory
*/
private $fieldDataConverterFactory;
/**
* Constructor
*
* @param FieldDataConverterFactory $fieldDataConverterFactory
*/
public function __construct(
FieldDataConverterFactory $fieldDataConverterFactory
) {
$this->fieldDataConverterFactory = $fieldDataConverterFactory;
}
/**
* @inheritdoc
*/
public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
$setup->startSetup();
if (version_compare($context->getVersion(), '2.0.1', '<')) {
$this->convertSerializedDataToJson($setup);
}
$setup->endSetup();
}
/**
* Convert metadata from serialized to JSON format:
*
* @param ModuleDataSetupInterface $setup
*
* @return void
*/
public function convertSerializedDataToJson($setup)
{
$fieldDataConverter = $this->fieldDataConverterFactory->create(SerializedToJson::class);
$fieldDataConverter->convert(
$setup->getConnection(),
$setup->getTable('url_rewrite'),
'url_rewrite_id',
'metadata'
);
}
}
......@@ -81,7 +81,7 @@ class SetRedirectUrlTest extends \PHPUnit_Framework_TestCase
public function testGetTargetStorePostData()
{
$urlRewrite = $this->getMock(\Magento\UrlRewrite\Service\V1\Data\UrlRewrite::class);
$urlRewrite = $this->getMock(\Magento\UrlRewrite\Service\V1\Data\UrlRewrite::class, [], [], '', false);
$urlRewrite->expects($this->once())->method('getRequestPath')->willReturn('path');
$this->request->expects($this->once())->method('getPathInfo')->willReturn('path');
......
<?php
/**
* Copyright © 2017 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\UrlRewrite\Test\Unit\Model;
class UrlRewriteTest extends \PHPUnit_Framework_TestCase
{
/**
* @var \Magento\UrlRewrite\Model\UrlRewrite
*/
protected $model;
protected function setUp()
{
$objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
$context = $this->getMock(\Magento\Framework\Model\Context::class, [], [], '', false);
$registry = $this->getMock(\Magento\Framework\Registry::class, [], [], '', false);
$resource = $this->getMock(
\Magento\Framework\Model\ResourceModel\AbstractResource::class,
['getIdFieldName', '_construct', 'getConnection'],
[],
'',
false
);
$resourceCollection = $this->getMock(\Magento\Framework\Data\Collection\AbstractDb::class, [], [], '', false);
$serializer = $this->getMock(\Magento\Framework\Serialize\SerializerInterface::class, [], [], '', false);
$serializer->expects($this->any())
->method('serialize')
->willReturnCallback(
function ($value) {
return json_encode($value);
}
);
$serializer->expects($this->any())
->method('unserialize')
->willReturnCallback(
function ($value) {
return json_decode($value, true);
}
);
$this->model = $objectManager->getObject(
\Magento\UrlRewrite\Model\UrlRewrite::class,
[
'context' => $context,
'registry' => $registry,
'resource' => $resource,
'resourceCollection' => $resourceCollection,
'data' => [],
'serializer' => $serializer,
]
);
}
public function testSetAndGetMetadata()
{
$testData = [1, 2, 3];
$this->model->setMetadata($testData);
$this->assertEquals($testData, $this->model->getMetadata());
}
}
<?php
/**
* Copyright © 2017 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\UrlRewrite\Test\Unit\Service\V1\Data;
class UrlRewriteTest extends \PHPUnit_Framework_TestCase
{
/**
* @var \Magento\UrlRewrite\Model\UrlRewrite
*/
protected $model;
protected function setUp()
{
$objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
$serializer = $this->getMock(\Magento\Framework\Serialize\SerializerInterface::class, [], [], '', false);
$serializer->expects($this->any())
->method('serialize')
->willReturnCallback(
function ($value) {
return json_encode($value);
}
);
$serializer->expects($this->any())
->method('unserialize')
->willReturnCallback(
function ($value) {
return json_decode($value, true);
}
);
$this->model = $objectManager->getObject(
\Magento\UrlRewrite\Service\V1\Data\UrlRewrite::class,
[
'data' => [],
'serializer' => $serializer,
]
);
}
public function testSetAndGetMetadata()
{
$testData = [1, 2, 3];
$this->model->setMetadata($testData);
$this->assertEquals($testData, $this->model->getMetadata());
}
}
......@@ -6,6 +6,6 @@
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Magento_UrlRewrite" setup_version="2.0.0">
<module name="Magento_UrlRewrite" setup_version="2.0.1">
</module>
</config>
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment