diff --git a/app/code/Magento/Downloadable/Model/Link/Builder.php b/app/code/Magento/Downloadable/Model/Link/Builder.php index e51ff1d76f6d2..b0cdfc3589d49 100644 --- a/app/code/Magento/Downloadable/Model/Link/Builder.php +++ b/app/code/Magento/Downloadable/Model/Link/Builder.php @@ -88,17 +88,11 @@ public function build(\Magento\Downloadable\Api\Data\LinkInterface $link) 'to_link', $this->data ); - $downloadableLinkSampleData = $this->objectCopyService->getDataFromFieldset( - 'downloadable_link_sample_data', - 'to_link_sample', - $this->data['sample'] - ); $this->dataObjectHelper->populateWithArray( $link, array_merge( $this->data, - $downloadableData, - $downloadableLinkSampleData + $downloadableData ), \Magento\Downloadable\Api\Data\LinkInterface::class ); @@ -114,8 +108,10 @@ public function build(\Magento\Downloadable\Api\Data\LinkInterface $link) $link->setLinkFile($linkFileName); $link->setLinkUrl(null); } - - $link = $this->buildSample($link, $this->data['sample']); + + if (isset($this->data['sample'])) { + $link = $this->buildSample($link, $this->data['sample']); + } if (!$link->getSortOrder()) { $link->setSortOrder(1); @@ -161,6 +157,19 @@ private function getComponent() private function buildSample(\Magento\Downloadable\Api\Data\LinkInterface $link, array $sample) { if (!empty($sample['url']) || !empty($sample['file'])) { + $downloadableLinkSampleData = $this->objectCopyService->getDataFromFieldset( + 'downloadable_link_sample_data', + 'to_link_sample', + $this->data['sample'] + ); + $this->dataObjectHelper->populateWithArray( + $link, + array_merge( + $this->data, + $downloadableLinkSampleData + ), + \Magento\Downloadable\Api\Data\LinkInterface::class + ); if ($link->getSampleType() === \Magento\Downloadable\Helper\Download::LINK_TYPE_FILE) { $linkSampleFileName = $this->downloadableFile->moveFileFromTmp( $this->getComponent()->getBaseSampleTmpPath(), diff --git a/app/code/Magento/Downloadable/Test/Unit/Model/Link/BuilderTest.php b/app/code/Magento/Downloadable/Test/Unit/Model/Link/BuilderTest.php index d22a736bdf3c0..97c3eb438a8d9 100644 --- a/app/code/Magento/Downloadable/Test/Unit/Model/Link/BuilderTest.php +++ b/app/code/Magento/Downloadable/Test/Unit/Model/Link/BuilderTest.php @@ -108,13 +108,24 @@ public function testBuild($data, $expectedPrice) )->willReturn($downloadableData); $this->service->setData($data); $this->dataObjectHelperMock->method('populateWithArray') - ->with( - $this->linkMock, - array_merge( - $data, - $downloadableData - ), - LinkInterface::class + ->withConsecutive( + [ + $this->linkMock, + array_merge( + $data, + $downloadableData + ), + LinkInterface::class + ], + [ + $this->linkMock, + array_merge( + $data, + $downloadableData, + $data['sample'] + ), + LinkInterface::class + ] )->willReturn($this->linkMock); $this->linkMock->expects($this->once())->method('getLinkType')->willReturn(Download::LINK_TYPE_FILE); $linkModel = $this->getMockBuilder(Link::class) @@ -172,16 +183,11 @@ public function testBuildFileNotProvided() ] ]; $downloadableData = ['sort_order' => 1]; - $this->objectCopyServiceMock->expects($this->exactly(2))->method('getDataFromFieldset')->withConsecutive( + $this->objectCopyServiceMock->expects($this->once())->method('getDataFromFieldset')->withConsecutive( [ 'downloadable_data', 'to_link', $data - ], - [ - 'downloadable_link_sample_data', - 'to_link_sample', - $data['sample'] ] )->willReturn($downloadableData); $this->service->setData($data);