9 use \Magento\Catalog\Model\Product\Copier;
48 $this->copyConstructorMock = $this->createMock(\
Magento\Catalog\Model\
Product\CopyConstructorInterface::class);
49 $this->productFactoryMock = $this->createPartialMock(
50 \
Magento\Catalog\Model\ProductFactory::class,
53 $this->optionRepositoryMock = $this->createMock(
57 $this->productMock = $this->createMock(\
Magento\Catalog\Model\Product::class);
58 $this->productMock->expects($this->any())->method(
'getEntityId')->willReturn(1);
60 $this->metadata = $this->getMockBuilder(\
Magento\Framework\EntityManager\EntityMetadata::class)
61 ->disableOriginalConstructor()
63 $metadataPool = $this->getMockBuilder(\
Magento\Framework\EntityManager\MetadataPool::class)
64 ->disableOriginalConstructor()
66 $metadataPool->expects($this->any())->method(
'getMetadata')->willReturn($this->metadata);
67 $this->_model =
new Copier(
68 $this->copyConstructorMock,
69 $this->productFactoryMock
72 $this->setProperties($this->_model, [
73 'optionRepository' => $this->optionRepositoryMock,
74 'metadataPool' => $metadataPool,
80 $stockItem = $this->getMockBuilder(\
Magento\CatalogInventory\Api\Data\StockItemInterface::class)
83 ->setMethods([
'getStockItem',
'setData'])
86 ->expects($this->once())
87 ->method(
'getStockItem')
90 ->expects($this->once())
92 ->with(
'stock_item',
null);
95 'product data' => [
'product data'],
98 $this->productMock->expects($this->atLeastOnce())->method(
'getWebsiteIds');
99 $this->productMock->expects($this->atLeastOnce())->method(
'getCategoryIds');
100 $this->productMock->expects($this->any())->method(
'getData')->willReturnMap([
102 [
'linkField',
null,
'1'],
106 $this->productMock->expects($this->once())->method(
'getResource')->will($this->returnValue($resourceMock));
108 $duplicateMock = $this->createPartialMock(
109 \
Magento\Catalog\Model\Product::class,
128 $this->productFactoryMock->expects($this->once())->method(
'create')->will($this->returnValue($duplicateMock));
130 $duplicateMock->expects($this->once())->method(
'setOptions')->with([]);
131 $duplicateMock->expects($this->once())->method(
'setIsDuplicate')->with(
true);
132 $duplicateMock->expects($this->once())->method(
'setOriginalLinkId')->with(1);
133 $duplicateMock->expects(
140 $duplicateMock->expects($this->once())->method(
'setCreatedAt')->with(
null);
141 $duplicateMock->expects($this->once())->method(
'setUpdatedAt')->with(
null);
142 $duplicateMock->expects($this->once())->method(
'setId')->with(
null);
143 $duplicateMock->expects(
150 $duplicateMock->expects($this->once())->method(
'setData')->with(
$productData);
151 $this->copyConstructorMock->expects($this->once())->method(
'build')->with($this->productMock, $duplicateMock);
152 $duplicateMock->expects($this->once())->method(
'getUrlKey')->willReturn(
'urk-key-1');
153 $duplicateMock->expects($this->once())->method(
'setUrlKey')->with(
'urk-key-2');
154 $duplicateMock->expects($this->once())->method(
'save');
156 $this->metadata->expects($this->any())->method(
'getLinkField')->willReturn(
'linkField');
158 $duplicateMock->expects($this->any())->method(
'getData')->willReturnMap([
159 [
'linkField',
null,
'2'],
160 ]); $this->optionRepositoryMock->expects($this->once())
161 ->method(
'duplicate')
162 ->with($this->productMock, $duplicateMock);
163 $resourceMock->expects($this->once())->method(
'duplicate')->with(1, 2);
165 $this->assertEquals($duplicateMock, $this->_model->copy($this->productMock));
172 private function setProperties($object,
$properties = [])
178 $reflectionProperty->setAccessible(
true);
179 $reflectionProperty->setValue($object,
$value);
const EXTENSION_ATTRIBUTES_KEY