From b42cd08984fe9f16b5c9e87e4035f4e1f5b8122c Mon Sep 17 00:00:00 2001 From: oradchenko Date: Thu, 7 Apr 2016 16:16:48 +0300 Subject: [PATCH 01/21] MAGETWO-49485: Incorrect field in carriers --- app/code/Magento/Dhl/etc/adminhtml/system.xml | 4 ---- app/code/Magento/Dhl/i18n/en_US.csv | 1 - app/code/Magento/Fedex/etc/adminhtml/system.xml | 4 ---- app/code/Magento/Fedex/i18n/en_US.csv | 1 - app/code/Magento/Ups/etc/adminhtml/system.xml | 4 ---- app/code/Magento/Ups/i18n/en_US.csv | 1 - app/code/Magento/Usps/etc/adminhtml/system.xml | 4 ---- app/code/Magento/Usps/i18n/en_US.csv | 1 - 8 files changed, 20 deletions(-) diff --git a/app/code/Magento/Dhl/etc/adminhtml/system.xml b/app/code/Magento/Dhl/etc/adminhtml/system.xml index ef25049850964..876666c75501a 100644 --- a/app/code/Magento/Dhl/etc/adminhtml/system.xml +++ b/app/code/Magento/Dhl/etc/adminhtml/system.xml @@ -14,10 +14,6 @@ Magento\Config\Model\Config\Source\Yesno - - - Magento\Config\Model\Config\Source\Yesno - diff --git a/app/code/Magento/Dhl/i18n/en_US.csv b/app/code/Magento/Dhl/i18n/en_US.csv index 168d1a3838758..cfd9478301032 100644 --- a/app/code/Magento/Dhl/i18n/en_US.csv +++ b/app/code/Magento/Dhl/i18n/en_US.csv @@ -57,7 +57,6 @@ None,None "Field ","Field " " is required."," is required." "Enabled for Checkout","Enabled for Checkout" -"Enabled for RMA","Enabled for RMA" "Gateway URL","Gateway URL" Title,Title "Access ID","Access ID" diff --git a/app/code/Magento/Fedex/etc/adminhtml/system.xml b/app/code/Magento/Fedex/etc/adminhtml/system.xml index 74e4931724903..241e8b2226854 100644 --- a/app/code/Magento/Fedex/etc/adminhtml/system.xml +++ b/app/code/Magento/Fedex/etc/adminhtml/system.xml @@ -14,10 +14,6 @@ Magento\Config\Model\Config\Source\Yesno - - - Magento\Config\Model\Config\Source\Yesno - diff --git a/app/code/Magento/Fedex/i18n/en_US.csv b/app/code/Magento/Fedex/i18n/en_US.csv index e7ce008576eaa..ae2868b580c61 100644 --- a/app/code/Magento/Fedex/i18n/en_US.csv +++ b/app/code/Magento/Fedex/i18n/en_US.csv @@ -45,7 +45,6 @@ None,None " is required."," is required." FedEx,FedEx "Enabled for Checkout","Enabled for Checkout" -"Enabled for RMA","Enabled for RMA" Title,Title "Account ID","Account ID" "Please make sure to use only digits here. No dashes are allowed.","Please make sure to use only digits here. No dashes are allowed." diff --git a/app/code/Magento/Ups/etc/adminhtml/system.xml b/app/code/Magento/Ups/etc/adminhtml/system.xml index 6bb65b23d1e02..4d5a816f5f598 100644 --- a/app/code/Magento/Ups/etc/adminhtml/system.xml +++ b/app/code/Magento/Ups/etc/adminhtml/system.xml @@ -18,10 +18,6 @@ Magento\Config\Model\Config\Source\Yesno - - - Magento\Config\Model\Config\Source\Yesno - Magento\Ups\Model\Config\Source\Method diff --git a/app/code/Magento/Ups/i18n/en_US.csv b/app/code/Magento/Ups/i18n/en_US.csv index ea6c0800846c3..10a30440262e5 100644 --- a/app/code/Magento/Ups/i18n/en_US.csv +++ b/app/code/Magento/Ups/i18n/en_US.csv @@ -78,7 +78,6 @@ label,label UPS,UPS "Access License Number","Access License Number" "Enabled for Checkout","Enabled for Checkout" -"Enabled for RMA","Enabled for RMA" "Allowed Methods","Allowed Methods" "Packages Request Type","Packages Request Type" Container,Container diff --git a/app/code/Magento/Usps/etc/adminhtml/system.xml b/app/code/Magento/Usps/etc/adminhtml/system.xml index 5bba5fab9637b..91c6a8a7d4d1c 100644 --- a/app/code/Magento/Usps/etc/adminhtml/system.xml +++ b/app/code/Magento/Usps/etc/adminhtml/system.xml @@ -14,10 +14,6 @@ Magento\Config\Model\Config\Source\Yesno - - - Magento\Config\Model\Config\Source\Yesno - diff --git a/app/code/Magento/Usps/i18n/en_US.csv b/app/code/Magento/Usps/i18n/en_US.csv index a39c283149673..9c3a0caccdd91 100644 --- a/app/code/Magento/Usps/i18n/en_US.csv +++ b/app/code/Magento/Usps/i18n/en_US.csv @@ -102,7 +102,6 @@ None,None " is required."," is required." USPS,USPS "Enabled for Checkout","Enabled for Checkout" -"Enabled for RMA","Enabled for RMA" "Gateway URL","Gateway URL" "Secure Gateway URL","Secure Gateway URL" Title,Title From 5caca3adb7b0f70df107d2db3602222b705300e8 Mon Sep 17 00:00:00 2001 From: oradchenko Date: Tue, 12 Apr 2016 15:32:00 +0300 Subject: [PATCH 02/21] MAGETWO-50718: [GITHUB] PDF Invoice issue #3807 --- app/code/Magento/Ui/view/base/web/js/grid/massactions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Ui/view/base/web/js/grid/massactions.js b/app/code/Magento/Ui/view/base/web/js/grid/massactions.js index fda02be219b58..70371ff2ac955 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/massactions.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/massactions.js @@ -147,7 +147,7 @@ define([ * @param {Object} data - Selections data. */ defaultCallback: function (action, data) { - var itemsType = data.excludeMode ? 'excluded' : 'selected', + var itemsType = data.excludeMode && data.excluded.length !== 0 ? 'excluded' : 'selected', selections = {}; selections[itemsType] = data[itemsType]; From d35db23476acb9ded935119868b4d3749cfa4041 Mon Sep 17 00:00:00 2001 From: oradchenko Date: Wed, 13 Apr 2016 16:14:14 +0300 Subject: [PATCH 03/21] MAGETWO-51620: Incorrect date is set for Cart Price Rule while creating using API --- app/code/Magento/SalesRule/Model/Converter/ToModel.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/code/Magento/SalesRule/Model/Converter/ToModel.php b/app/code/Magento/SalesRule/Model/Converter/ToModel.php index 54db86bcf0525..28b0b9765e6b1 100644 --- a/app/code/Magento/SalesRule/Model/Converter/ToModel.php +++ b/app/code/Magento/SalesRule/Model/Converter/ToModel.php @@ -169,6 +169,7 @@ public function toModel(RuleDataModel $dataModel) } } else { $ruleModel = $this->ruleFactory->create(); + $this->formattingDate($dataModel); } $modelData = $ruleModel->getData(); @@ -197,4 +198,12 @@ public function toModel(RuleDataModel $dataModel) return $ruleModel; } + + public function formattingDate(RuleDataModel $dataModel) + { + $fromDate = new \DateTime($dataModel->getFromDate()); + $toDate = new \DateTime($dataModel->getToDate()); + $dataModel->setFromDate($fromDate->format(\DateTime::ISO8601)); + $dataModel->setToDate($toDate->format(\DateTime::ISO8601)); + } } From ac6688a5a4e4eeee150143b5e35084aecb070596 Mon Sep 17 00:00:00 2001 From: oradchenko Date: Wed, 13 Apr 2016 16:22:44 +0300 Subject: [PATCH 04/21] MAGETWO-51620: Incorrect date is set for Cart Price Rule while creating using API --- app/code/Magento/SalesRule/Model/Converter/ToModel.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/code/Magento/SalesRule/Model/Converter/ToModel.php b/app/code/Magento/SalesRule/Model/Converter/ToModel.php index 28b0b9765e6b1..3929be29a8df9 100644 --- a/app/code/Magento/SalesRule/Model/Converter/ToModel.php +++ b/app/code/Magento/SalesRule/Model/Converter/ToModel.php @@ -199,6 +199,11 @@ public function toModel(RuleDataModel $dataModel) return $ruleModel; } + /** + * Convert date to ISO8601 + * + * @param RuleDataModel $dataModel + */ public function formattingDate(RuleDataModel $dataModel) { $fromDate = new \DateTime($dataModel->getFromDate()); From 5efdc7ff4fcbf5ceaa4e2e2326f3cf4684271adb Mon Sep 17 00:00:00 2001 From: oradchenko Date: Fri, 22 Apr 2016 11:58:45 +0300 Subject: [PATCH 05/21] MAGETWO-50718: [GITHUB] PDF Invoice issue #3807 --- app/code/Magento/Ui/view/base/web/js/grid/massactions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Ui/view/base/web/js/grid/massactions.js b/app/code/Magento/Ui/view/base/web/js/grid/massactions.js index 70371ff2ac955..15d9db49a215b 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/massactions.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/massactions.js @@ -147,7 +147,7 @@ define([ * @param {Object} data - Selections data. */ defaultCallback: function (action, data) { - var itemsType = data.excludeMode && data.excluded.length !== 0 ? 'excluded' : 'selected', + var itemsType = (data.excludeMode && data.excluded.length !== 0) ? 'excluded' : 'selected', selections = {}; selections[itemsType] = data[itemsType]; From dcd4dcaf59d4748b55e8ba845a0933bfa8bde4a8 Mon Sep 17 00:00:00 2001 From: oradchenko Date: Mon, 25 Apr 2016 18:22:46 +0300 Subject: [PATCH 06/21] MAGETWO-52079: [GITHUB] Order Repository GetList Method always returns the same shipping address for all orders #4019 --- .../Magento/Sales/Model/OrderRepository.php | 30 +++++-------------- .../Test/Unit/Model/OrderRepositoryTest.php | 6 ++-- 2 files changed, 11 insertions(+), 25 deletions(-) diff --git a/app/code/Magento/Sales/Model/OrderRepository.php b/app/code/Magento/Sales/Model/OrderRepository.php index 35f4f7b809c6b..8e9454bbf74f0 100644 --- a/app/code/Magento/Sales/Model/OrderRepository.php +++ b/app/code/Magento/Sales/Model/OrderRepository.php @@ -16,6 +16,7 @@ use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\Exception\InputException; use Magento\Framework\Api\SortOrder; +use Magento\Framework\App\ObjectManager; /** * Repository class for @see OrderInterface @@ -33,16 +34,6 @@ class OrderRepository implements \Magento\Sales\Api\OrderRepositoryInterface */ protected $searchResultFactory = null; - /** - * @var OrderExtension - */ - private $orderExtension; - - /** - * @var ShippingAssignmentBuilder - */ - private $shippingAssignmentBuilder; - /** * OrderInterface[] * @@ -191,12 +182,10 @@ private function setShippingAssignments(OrderInterface $order) */ private function getOrderExtensionDependency() { - if (!$this->orderExtension instanceof OrderExtension) { - $this->orderExtension = \Magento\Framework\App\ObjectManager::getInstance()->get( - '\Magento\Sales\Api\Data\OrderExtension' - ); - } - return $this->orderExtension; + + return ObjectManager::getInstance()->create( + '\Magento\Sales\Api\Data\OrderExtension' + ); } /** @@ -207,12 +196,9 @@ private function getOrderExtensionDependency() */ private function getShippingAssignmentBuilderDependency() { - if (!$this->shippingAssignmentBuilder instanceof ShippingAssignmentBuilder) { - $this->shippingAssignmentBuilder = \Magento\Framework\App\ObjectManager::getInstance()->get( - '\Magento\Sales\Model\Order\ShippingAssignmentBuilder' - ); - } - return $this->shippingAssignmentBuilder; + return ObjectManager::getInstance()->create( + '\Magento\Sales\Model\Order\ShippingAssignmentBuilder' + ); } /** diff --git a/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php index 90b11f6e7fd2b..1d39fdc60baf6 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php @@ -64,14 +64,14 @@ protected function setUp() public function testGetList() { $fieldName = 'field'; - $searchCriteriaMock = $this->getMock('Magento\Framework\Api\SearchCriteria', [], [], '', false); + $searchCriteriaMock = $this->getMock('\Magento\Framework\Api\SearchCriteria', [], [], '', false); - $collectionMock = $this->getMock('Magento\Sales\Model\ResourceModel\Order\Collection', [], [], '', false); + $collectionMock = $this->getMock('\Magento\Sales\Model\ResourceModel\Order\Collection', [], [], '', false); $filterGroupMock = $this->getMock('\Magento\Framework\Api\Search\FilterGroup', [], [], '', false); $filterGroupFilterMock = $this->getMock('\Magento\Framework\Api\Filter', [], [], '', false); $sortOrderMock = $this->getMock('\Magento\Framework\Api\SortOrder', [], [], '', false); - $itemsMock = $this->getMock('Magento\Sales\Model\Order', [], [], '', false); + $itemsMock = $this->getMock('\Magento\Sales\Model\Order', ['getExtensionAttributes'], [], '', false); $extensionAttributes = $this->getMock( '\Magento\Sales\Api\Data\OrderExtension', From 3584a615c5b0b891011767550bbd426c938f2366 Mon Sep 17 00:00:00 2001 From: oradchenko Date: Tue, 26 Apr 2016 16:16:49 +0300 Subject: [PATCH 07/21] MAGETWO-52103: Exception message on page admin/mui/index/render/ --- app/code/Magento/Ui/Controller/Adminhtml/Index/Render.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/code/Magento/Ui/Controller/Adminhtml/Index/Render.php b/app/code/Magento/Ui/Controller/Adminhtml/Index/Render.php index ba433ed43da83..83c1862d6a254 100644 --- a/app/code/Magento/Ui/Controller/Adminhtml/Index/Render.php +++ b/app/code/Magento/Ui/Controller/Adminhtml/Index/Render.php @@ -22,6 +22,11 @@ class Render extends AbstractAction */ public function execute() { + if ($this->_request->getParam('namespace') === null) { + $this->_redirect('admin/noroute'); + return; + } + $component = $this->factory->create($this->_request->getParam('namespace')); $this->prepareComponent($component); $this->_response->appendBody((string) $component->render()); From 11baefd0d1276b9bf40c876fb0e5242bfde6dcb0 Mon Sep 17 00:00:00 2001 From: oradchenko Date: Wed, 27 Apr 2016 10:50:41 +0300 Subject: [PATCH 08/21] MAGETWO-52079: [GITHUB] Order Repository GetList Method always returns the same shipping address for all orders #4019 --- .../Sales/Test/Unit/Model/OrderRepositoryTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php index 1d39fdc60baf6..79cbac9e804db 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php @@ -5,6 +5,8 @@ */ namespace Magento\Sales\Test\Unit\Model; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\Sales\Api\Data\OrderInterface; use Magento\Sales\Model\OrderRepository; use Magento\Sales\Model\ResourceModel\Metadata; use Magento\Sales\Api\Data\OrderSearchResultInterfaceFactory as SearchResultFactory; @@ -31,7 +33,7 @@ class OrderRepositoryTest extends \PHPUnit_Framework_TestCase protected $searchResultFactory; /** - * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager + * @var ObjectManager */ protected $objectManager; @@ -40,7 +42,7 @@ class OrderRepositoryTest extends \PHPUnit_Framework_TestCase */ protected function setUp() { - $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $this->objectManager = new ObjectManager($this); $className = 'Magento\Sales\Model\ResourceModel\Metadata'; $this->metadata = $this->getMock($className, [], [], '', false); @@ -65,13 +67,11 @@ public function testGetList() { $fieldName = 'field'; $searchCriteriaMock = $this->getMock('\Magento\Framework\Api\SearchCriteria', [], [], '', false); - $collectionMock = $this->getMock('\Magento\Sales\Model\ResourceModel\Order\Collection', [], [], '', false); - $filterGroupMock = $this->getMock('\Magento\Framework\Api\Search\FilterGroup', [], [], '', false); $filterGroupFilterMock = $this->getMock('\Magento\Framework\Api\Filter', [], [], '', false); $sortOrderMock = $this->getMock('\Magento\Framework\Api\SortOrder', [], [], '', false); - $itemsMock = $this->getMock('\Magento\Sales\Model\Order', ['getExtensionAttributes'], [], '', false); + $itemsMock = $this->getMockBuilder(OrderInterface::class)->disableOriginalConstructor()->getMock(); $extensionAttributes = $this->getMock( '\Magento\Sales\Api\Data\OrderExtension', From d7b1a04398768298a0f595f7ee43743e68c87b97 Mon Sep 17 00:00:00 2001 From: oradchenko Date: Wed, 27 Apr 2016 11:26:09 +0300 Subject: [PATCH 09/21] MAGETWO-51620: Incorrect date is set for Cart Price Rule while creating using API --- .../Test/Unit/Model/Converter/ToModelTest.php | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php index 37e0076851c4c..10848f63ceb72 100644 --- a/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php +++ b/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php @@ -187,4 +187,70 @@ public function testToModel() $result = $this->model->toModel($dataModel); $this->assertEquals($ruleModel, $result); } + + /** + * @dataProvider expectedDatesProvider + */ + public function testFormattingDate($data) + { + /** + * @var \Magento\SalesRule\Model\Data\Rule $dataModel + */ + $dataModel = $this->getMockBuilder('\Magento\SalesRule\Model\Data\Rule') + ->disableOriginalConstructor() + ->getMock(); + + $dataModel + ->expects($this->atLeastOnce()) + ->method('getFromDate') + ->willReturn($data['from_date']); + + $dataModel + ->expects($this->atLeastOnce()) + ->method('getToDate') + ->willReturn($data['to_date']); + + $dataModel + ->expects($this->atLeastOnce()) + ->method('setFromDate') + ->with($data['expected_from_date']); + + $dataModel + ->expects($this->atLeastOnce()) + ->method('setToDate') + ->with($data['expected_to_date']); + + $this->model->formattingDate($dataModel); + + } + + public function expectedDatesProvider() + { + return [ + 'mm/dd/yyyy to yyyy-mm-dd' => [ + [ + 'from_date' => '03/24/2016', + 'to_date' => '03/25/2016', + 'expected_from_date' => '2016-03-24T00:00:00-0700', + 'expected_to_date' => '2016-03-25T00:00:00-0700', + ] + ], + 'yyyy-mm-dd to yyyy-mm-dd' => [ + [ + 'from_date' => '2016-03-24', + 'to_date' => '2016-03-25', + 'expected_from_date' => '2016-03-24T00:00:00-0700', + 'expected_to_date' => '2016-03-25T00:00:00-0700', + ] + ], + 'yymmdd to yyyy-mm-dd' => [ + [ + 'from_date' => '20160324', + 'to_date' => '20160325', + 'expected_from_date' => '2016-03-24T00:00:00-0700', + 'expected_to_date' => '2016-03-25T00:00:00-0700', + ] + ], + ]; + } } From 493fd15722cf481cfea2dbe547b03a879db97386 Mon Sep 17 00:00:00 2001 From: Vladyslav Shcherbyna Date: Thu, 28 Apr 2016 19:09:24 +0300 Subject: [PATCH 10/21] MAGETWO-51620: Incorrect date is set for Cart Price Rule while creating using API --- .../SalesRule/Model/Converter/ToModel.php | 22 ++-- .../Test/Unit/Model/Converter/ToModelTest.php | 115 ++++++++++++++++++ 2 files changed, 130 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/SalesRule/Model/Converter/ToModel.php b/app/code/Magento/SalesRule/Model/Converter/ToModel.php index 3929be29a8df9..bfcd30ecf445c 100644 --- a/app/code/Magento/SalesRule/Model/Converter/ToModel.php +++ b/app/code/Magento/SalesRule/Model/Converter/ToModel.php @@ -169,7 +169,12 @@ public function toModel(RuleDataModel $dataModel) } } else { $ruleModel = $this->ruleFactory->create(); - $this->formattingDate($dataModel); + $dataModel->setFromDate( + $this->formattingDate($dataModel->getFromDate()) + ); + $dataModel->setToDate( + $this->formattingDate($dataModel->getToDate()) + ); } $modelData = $ruleModel->getData(); @@ -202,13 +207,16 @@ public function toModel(RuleDataModel $dataModel) /** * Convert date to ISO8601 * - * @param RuleDataModel $dataModel + * @param string|null $date + * @return string|null */ - public function formattingDate(RuleDataModel $dataModel) + private function formattingDate($date) { - $fromDate = new \DateTime($dataModel->getFromDate()); - $toDate = new \DateTime($dataModel->getToDate()); - $dataModel->setFromDate($fromDate->format(\DateTime::ISO8601)); - $dataModel->setToDate($toDate->format(\DateTime::ISO8601)); + if ($date) { + $fromDate = new \DateTime($date); + $date = $fromDate->format(\DateTime::ISO8601); + } + + return $date; } } diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php index 37e0076851c4c..2e2d7cd5eac10 100644 --- a/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php +++ b/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php @@ -187,4 +187,119 @@ public function testToModel() $result = $this->model->toModel($dataModel); $this->assertEquals($ruleModel, $result); } + + /** + * @dataProvider expectedDatesProvider + */ + public function testFormattingDate($data) + { + /** + * @var \Magento\SalesRule\Model\Data\Rule|\PHPUnit_Framework_MockObject_MockObject $dataModel + */ + $dataModel = $this->getMockBuilder(\Magento\SalesRule\Model\Data\Rule::class) + ->disableOriginalConstructor() + ->setMethods( + [ + 'create', + 'load', + 'getData', + 'getRuleId', + 'getCondition', + 'getActionCondition', + 'getStoreLabels', + 'getFromDate', + 'setFromDate', + 'getToDate', + 'setToDate', + ]) + ->getMock(); + $dataModel + ->expects($this->atLeastOnce()) + ->method('getRuleId') + ->willReturn(null); + + $dataModel + ->expects($this->atLeastOnce()) + ->method('getCondition') + ->willReturn(false); + + $dataModel + ->expects($this->atLeastOnce()) + ->method('getActionCondition') + ->willReturn(false); + $dataModel + ->expects($this->atLeastOnce()) + ->method('getStoreLabels') + ->willReturn([]); + $ruleModel = $this->getMockBuilder('\Magento\SalesRule\Model\Rule') + ->disableOriginalConstructor() + ->setMethods(['create', 'load', 'getId', 'getData']) + ->getMock(); + $ruleModel + ->expects($this->atLeastOnce()) + ->method('getData') + ->willReturn(['data_1'=>1]); + + $this->dataObjectProcessor + ->expects($this->any()) + ->method('buildOutputDataArray') + ->willReturn(['data_2'=>2]); + + $this->ruleFactory + ->expects($this->any()) + ->method('create') + ->willReturn($ruleModel); + + $dataModel + ->expects($this->atLeastOnce()) + ->method('getFromDate') + ->willReturn($data['from_date']); + + $dataModel + ->expects($this->atLeastOnce()) + ->method('getToDate') + ->willReturn($data['to_date']); + + $dataModel + ->expects($this->atLeastOnce()) + ->method('setFromDate') + ->with($data['expected_from_date']); + + $dataModel + ->expects($this->atLeastOnce()) + ->method('setToDate') + ->with($data['expected_to_date']); + + $this->model->toModel($dataModel); + } + + public function expectedDatesProvider() + { + return [ + 'mm/dd/yyyy to yyyy-mm-dd' => [ + [ + 'from_date' => '03/24/2016', + 'to_date' => '03/25/2016', + 'expected_from_date' => '2016-03-24T00:00:00-0700', + 'expected_to_date' => '2016-03-25T00:00:00-0700', + ] + ], + 'yyyy-mm-dd to yyyy-mm-dd' => [ + [ + 'from_date' => '2016-03-24', + 'to_date' => '2016-03-25', + 'expected_from_date' => '2016-03-24T00:00:00-0700', + 'expected_to_date' => '2016-03-25T00:00:00-0700', + ] + ], + 'yymmdd to yyyy-mm-dd' => [ + [ + 'from_date' => '20160324', + 'to_date' => '20160325', + 'expected_from_date' => '2016-03-24T00:00:00-0700', + 'expected_to_date' => '2016-03-25T00:00:00-0700', + ] + ], + ]; + } } From 83b1af3a1e53dc60ad80d503f314dacb579a6da3 Mon Sep 17 00:00:00 2001 From: Michael Logvin Date: Fri, 29 Apr 2016 14:30:52 +0300 Subject: [PATCH 11/21] MAGETWO-52374: Pull request preparation --- .../Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php index 2e2d7cd5eac10..f46557205c91b 100644 --- a/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php +++ b/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php @@ -102,7 +102,6 @@ public function testDataModelToArray() ->method('getAggregatorType') ->willReturn('getAggregatorType'); - $dataCondition1 = $this->getMockBuilder('\Magento\SalesRule\Model\Data\Condition') ->disableOriginalConstructor() ->setMethods(['create', 'load', 'getConditionType', 'getValue', 'getAttributeName', 'getOperator', From 4267884d68fe4cfcdc274bfc91799a3edd369c89 Mon Sep 17 00:00:00 2001 From: Michael Logvin Date: Fri, 29 Apr 2016 14:40:42 +0300 Subject: [PATCH 12/21] MAGETWO-52374: Pull request preparation --- app/code/Magento/SalesRule/Model/Converter/ToModel.php | 2 +- .../SalesRule/Test/Unit/Model/Converter/ToModelTest.php | 8 ++++---- app/code/Magento/Ui/view/base/web/js/grid/massactions.js | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/SalesRule/Model/Converter/ToModel.php b/app/code/Magento/SalesRule/Model/Converter/ToModel.php index bfcd30ecf445c..1b36d19fb4160 100644 --- a/app/code/Magento/SalesRule/Model/Converter/ToModel.php +++ b/app/code/Magento/SalesRule/Model/Converter/ToModel.php @@ -206,7 +206,7 @@ public function toModel(RuleDataModel $dataModel) /** * Convert date to ISO8601 - * + * * @param string|null $date * @return string|null */ diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php index f46557205c91b..ec6122fc3a9b1 100644 --- a/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php +++ b/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php @@ -173,10 +173,10 @@ public function testToModel() ->method('getData') ->willReturn(['data_1'=>1]); - $this->dataObjectProcessor - ->expects($this->any()) - ->method('buildOutputDataArray') - ->willReturn(['data_2'=>2]); + $this->dataObjectProcessor + ->expects($this->any()) + ->method('buildOutputDataArray') + ->willReturn(['data_2'=>2]); $this->ruleFactory ->expects($this->any()) diff --git a/app/code/Magento/Ui/view/base/web/js/grid/massactions.js b/app/code/Magento/Ui/view/base/web/js/grid/massactions.js index 15d9db49a215b..70371ff2ac955 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/massactions.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/massactions.js @@ -147,7 +147,7 @@ define([ * @param {Object} data - Selections data. */ defaultCallback: function (action, data) { - var itemsType = (data.excludeMode && data.excluded.length !== 0) ? 'excluded' : 'selected', + var itemsType = data.excludeMode && data.excluded.length !== 0 ? 'excluded' : 'selected', selections = {}; selections[itemsType] = data[itemsType]; From e10ecc570f9b5ff8bc7d42db934d875c06c7e82f Mon Sep 17 00:00:00 2001 From: Nadiya Syvokonenko Date: Fri, 29 Apr 2016 15:34:23 +0300 Subject: [PATCH 13/21] MAGETWO-52374: Pull request preparation - Fix phpcs psr2 --- .../SalesRule/Test/Unit/Model/Converter/ToModelTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php index ec6122fc3a9b1..fef12ffb4dade 100644 --- a/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php +++ b/app/code/Magento/SalesRule/Test/Unit/Model/Converter/ToModelTest.php @@ -210,7 +210,8 @@ public function testFormattingDate($data) 'setFromDate', 'getToDate', 'setToDate', - ]) + ] + ) ->getMock(); $dataModel ->expects($this->atLeastOnce()) From 39651fba43f03e751962d8a116581d44a6d57bbc Mon Sep 17 00:00:00 2001 From: Vladyslav Shcherbyna Date: Wed, 4 May 2016 15:03:04 +0300 Subject: [PATCH 14/21] MAGETWO-52170: Impossible to create Downloadable Product --- .../Helper/Plugin/Downloadable.php | 159 ++++++------ .../Downloadable/Model/Link/Builder.php | 176 ++++++++++++++ .../Downloadable/Model/LinkRepository.php | 34 ++- .../Downloadable/Model/Sample/Builder.php | 135 +++++++++++ .../Downloadable/Model/SampleRepository.php | 9 +- .../Test/Unit/Model/Link/BuilderTest.php | 227 ++++++++++++++++++ .../Test/Unit/Model/Sample/BuilderTest.php | 129 ++++++++++ .../Magento/Downloadable/etc/fieldset.xml | 20 ++ .../Api/ProductRepositoryTest.php | 4 +- 9 files changed, 801 insertions(+), 92 deletions(-) create mode 100644 app/code/Magento/Downloadable/Model/Link/Builder.php create mode 100644 app/code/Magento/Downloadable/Model/Sample/Builder.php create mode 100644 app/code/Magento/Downloadable/Test/Unit/Model/Link/BuilderTest.php create mode 100644 app/code/Magento/Downloadable/Test/Unit/Model/Sample/BuilderTest.php diff --git a/app/code/Magento/Downloadable/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Downloadable.php b/app/code/Magento/Downloadable/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Downloadable.php index 81d69e51bb9cd..c3d6aa581f135 100644 --- a/app/code/Magento/Downloadable/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Downloadable.php +++ b/app/code/Magento/Downloadable/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Downloadable.php @@ -7,8 +7,8 @@ use Magento\Downloadable\Api\Data\SampleInterfaceFactory as SampleFactory; use Magento\Downloadable\Api\Data\LinkInterfaceFactory as LinkFactory; +use Magento\Framework\App\ObjectManager; use Magento\Framework\App\RequestInterface; -use Magento\Framework\Json\Helper\Data as JsonHelper; /** * Class Downloadable @@ -23,34 +23,30 @@ class Downloadable /** * @var SampleFactory */ - protected $sampleFactory; + private $sampleFactory; /** * @var LinkFactory */ - protected $linkFactory; + private $linkFactory; /** - * @var JsonHelper + * @var \Magento\Downloadable\Model\Sample\Builder */ - protected $jsonHelper; + private $sampleBuilder; + + /** + * @var \Magento\Downloadable\Model\Link\Builder + */ + private $linkBuilder; /** * @param RequestInterface $request - * @param SampleFactory $sampleFactory - * @param LinkFactory $linkFactory - * @param JsonHelper $jsonHelper */ public function __construct( - RequestInterface $request, - SampleFactory $sampleFactory, - LinkFactory $linkFactory, - JsonHelper $jsonHelper + RequestInterface $request ) { $this->request = $request; - $this->linkFactory = $linkFactory; - $this->sampleFactory = $sampleFactory; - $this->jsonHelper = $jsonHelper; } /** @@ -74,49 +70,14 @@ public function afterInitialize( if (isset($downloadable['link']) && is_array($downloadable['link'])) { $links = []; foreach ($downloadable['link'] as $linkData) { - if (!$linkData || (isset($linkData['is_delete']) && (bool)$linkData['is_delete'])) { + if (!$linkData || (isset($linkData['is_delete']) && $linkData['is_delete'])) { continue; } else { - // TODO: need to implement setLinkFileContent() - $link = $this->linkFactory->create(['data' => $linkData]); - if (isset($linkData['type'])) { - $link->setLinkType($linkData['type']); - } - if (isset($linkData['file'])) { - $link->setFile($this->jsonHelper->jsonEncode($linkData['file'])); - } - if (isset($linkData['file_content'])) { - $link->setLinkFileContent($linkData['file_content']); - } - $link->setId(null); - if (isset($linkData['link_id'])) { - $link->setId($linkData['link_id']); - } - if (isset($linkData['sample']['type'])) { - $link->setSampleType($linkData['sample']['type']); - } - if (isset($linkData['sample']['file'])) { - $link->setSampleFileData($this->jsonHelper->jsonEncode($linkData['sample']['file'])); - } - if (isset($linkData['sample']['url'])) { - $link->setSampleUrl($linkData['sample']['url']); - } - if (isset($linkData['sample']['file_content'])) { - $link->setSampleFileContent($linkData['file_content']); - } - $link->setStoreId($product->getStoreId()); - $link->setWebsiteId($product->getStore()->getWebsiteId()); - $link->setProductWebsiteIds($product->getWebsiteIds()); - if (!$link->getSortOrder()) { - $link->setSortOrder(1); - } - if (null === $link->getPrice()) { - $link->setPrice(0); - } - if ($link->getIsUnlimited()) { - $link->setNumberOfDownloads(0); - } - $links[] = $link; + $links[] = $this->getLinkBuilder()->setData( + $linkData + )->build( + $this->getLinkFactory()->create() + ); } } $extension->setDownloadableProductLinks($links); @@ -127,25 +88,11 @@ public function afterInitialize( if (!$sampleData || (isset($sampleData['is_delete']) && (bool)$sampleData['is_delete'])) { continue; } else { - $sample = $this->sampleFactory->create(['data' => $sampleData]); - $sample->setId(null); - if (isset($sampleData['sample_id'])) { - $sample->setId($sampleData['sample_id']); - } - $sample->setStoreId($product->getStoreId()); - if (isset($sampleData['type'])) { - $sample->setSampleType($sampleData['type']); - } - if (isset($sampleData['file'])) { - $sample->setFile($this->jsonHelper->jsonEncode($sampleData['file'])); - } - if (isset($sampleData['sample_url'])) { - $sample->setSampleUrl($sampleData['sample_url']); - } - if (!$sample->getSortOrder()) { - $sample->setSortOrder(1); - } - $samples[] = $sample; + $samples[] = $this->getSampleBuilder()->setData( + $sampleData + )->build( + $this->getSampleFactory()->create() + ); } } $extension->setDownloadableProductSamples($samples); @@ -159,4 +106,66 @@ public function afterInitialize( } return $product; } + + /** + * Get LinkBuilder instance + * + * @deprecated MAGETWO-52273 + * @return \Magento\Downloadable\Model\Link\Builder + */ + private function getLinkBuilder() + { + if (!$this->linkBuilder) { + $this->linkBuilder = ObjectManager::getInstance()->get(\Magento\Downloadable\Model\Link\Builder::class); + } + + return $this->linkBuilder; + } + + /** + * Get SampleBuilder instance + * + * @deprecated MAGETWO-52273 + * @return \Magento\Downloadable\Model\Sample\Builder + */ + private function getSampleBuilder() + { + if (!$this->sampleBuilder) { + $this->sampleBuilder = ObjectManager::getInstance()->get( + \Magento\Downloadable\Model\Sample\Builder::class + ); + } + + return $this->sampleBuilder; + } + + /** + * Get LinkFactory instance + * + * @deprecated MAGETWO-52273 + * @return LinkFactory + */ + private function getLinkFactory() + { + if (!$this->linkFactory) { + $this->linkFactory = ObjectManager::getInstance()->get(LinkFactory::class); + } + + return $this->linkFactory; + } + + /** + * Get Sample Factory + * + * @deprecated MAGETWO-52273 + * @return SampleFactory + */ + private function getSampleFactory() + { + if (!$this->sampleFactory) { + $this->sampleFactory = ObjectManager::getInstance()->get(SampleFactory::class); + } + + return $this->sampleFactory; + } } diff --git a/app/code/Magento/Downloadable/Model/Link/Builder.php b/app/code/Magento/Downloadable/Model/Link/Builder.php new file mode 100644 index 0000000000000..e51ff1d76f6d2 --- /dev/null +++ b/app/code/Magento/Downloadable/Model/Link/Builder.php @@ -0,0 +1,176 @@ +downloadableFile = $downloadableFile; + $this->objectCopyService = $objectCopyService; + $this->dataObjectHelper = $dataObjectHelper; + $this->componentFactory = $componentFactory; + } + + /** + * @param array $data + * @return $this + */ + public function setData(array $data) + { + $this->data = $data; + return $this; + } + + /** + * @param \Magento\Downloadable\Api\Data\LinkInterface $link + * @return \Magento\Downloadable\Api\Data\LinkInterface + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function build(\Magento\Downloadable\Api\Data\LinkInterface $link) + { + $downloadableData = $this->objectCopyService->getDataFromFieldset( + 'downloadable_data', + '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 + ), + \Magento\Downloadable\Api\Data\LinkInterface::class + ); + if ($link->getLinkType() === \Magento\Downloadable\Helper\Download::LINK_TYPE_FILE) { + if (!isset($this->data['file'])) { + throw new \Magento\Framework\Exception\LocalizedException(__('Link file not provided')); + } + $linkFileName = $this->downloadableFile->moveFileFromTmp( + $this->getComponent()->getBaseTmpPath(), + $this->getComponent()->getBasePath(), + $this->data['file'] + ); + $link->setLinkFile($linkFileName); + $link->setLinkUrl(null); + } + + $link = $this->buildSample($link, $this->data['sample']); + + if (!$link->getSortOrder()) { + $link->setSortOrder(1); + } + + if (!is_numeric($link->getPrice())) { + $link->setPrice(0); + } + + if (isset($this->data['is_unlimited']) && $this->data['is_unlimited']) { + $link->setNumberOfDownloads(0); + } + $this->resetData(); + + return $link; + } + + /** + * @return void + */ + private function resetData() + { + $this->data = []; + } + + /** + * @return Link + */ + private function getComponent() + { + if (!$this->component) { + $this->component = $this->componentFactory->create(); + } + return $this->component; + } + + /** + * @param \Magento\Downloadable\Api\Data\LinkInterface $link + * @param array $sample + * @return \Magento\Downloadable\Api\Data\LinkInterface + * @throws \Magento\Framework\Exception\LocalizedException + */ + private function buildSample(\Magento\Downloadable\Api\Data\LinkInterface $link, array $sample) + { + if (!empty($sample['url']) || !empty($sample['file'])) { + if ($link->getSampleType() === \Magento\Downloadable\Helper\Download::LINK_TYPE_FILE) { + $linkSampleFileName = $this->downloadableFile->moveFileFromTmp( + $this->getComponent()->getBaseSampleTmpPath(), + $this->getComponent()->getBaseSamplePath(), + $sample['file'] + ); + $link->setSampleFile($linkSampleFileName); + } + } + + return $link; + } +} diff --git a/app/code/Magento/Downloadable/Model/LinkRepository.php b/app/code/Magento/Downloadable/Model/LinkRepository.php index 68df7e5ee9862..7229d44c36acb 100644 --- a/app/code/Magento/Downloadable/Model/LinkRepository.php +++ b/app/code/Magento/Downloadable/Model/LinkRepository.php @@ -178,11 +178,13 @@ public function save($sku, LinkInterface $link, $isGlobalScopeContent = true) if ($product->getTypeId() !== \Magento\Downloadable\Model\Product\Type::TYPE_DOWNLOADABLE) { throw new InputException(__('Provided product must be type \'downloadable\'.')); } - if (!$this->contentValidator->isValid($link)) { + $validateLinkContent = !($link->getLinkType() === 'file' && $link->getLinkFile()); + $validateSampleContent = !($link->getSampleType() === 'file' && $link->getSampleFile()); + if (!$this->contentValidator->isValid($link, $validateLinkContent, $validateSampleContent)) { throw new InputException(__('Provided link information is invalid.')); } - if (!in_array($link->getLinkType(), ['url', 'file'])) { + if (!($link->getLinkType() === 'url' || $link->getLinkType() === 'file')) { throw new InputException(__('Invalid link type.')); } $title = $link->getTitle(); @@ -235,13 +237,21 @@ protected function saveLink( ); } - if ($link->getSampleType() == 'file' && $link->getSampleFile() === null) { + if ($link->getSampleType() == 'file') { $linkData['sample']['type'] = 'file'; - $linkData['sample']['file'] = $this->jsonEncoder->encode( - [ + if ($link->getSampleFile() === null) { + $fileData = [ $this->fileContentUploader->upload($link->getSampleFileContent(), 'link_sample_file'), - ] - ); + ]; + } else { + $fileData = [ + [ + 'file' => $link->getSampleFile(), + 'status' => 'old', + ] + ]; + } + $linkData['sample']['file'] = $this->jsonEncoder->encode($fileData); } elseif ($link->getSampleType() == 'url') { $linkData['sample']['type'] = 'url'; $linkData['sample']['url'] = $link->getSampleUrl(); @@ -281,8 +291,8 @@ protected function updateLink( if ($existingLink->getProductId() != $linkFieldValue) { throw new InputException(__('Provided downloadable link is not related to given product.')); } - $validateLinkContent = $link->getLinkFileContent() === null ? false : true; - $validateSampleContent = $link->getSampleFileContent() === null ? false : true; + $validateLinkContent = !($link->getLinkFileContent() === null); + $validateSampleContent = !($link->getSampleFileContent() === null); if (!$this->contentValidator->isValid($link, $validateLinkContent, $validateSampleContent)) { throw new InputException(__('Provided link information is invalid.')); } @@ -296,10 +306,10 @@ protected function updateLink( } } - if ($link->getLinkType() == 'file' && $link->getLinkFileContent() === null) { + if ($link->getLinkType() == 'file' && $link->getLinkFileContent() === null && !$link->getLinkFile()) { $link->setLinkFile($existingLink->getLinkFile()); } - if ($link->getSampleType() == 'file' && $link->getSampleFileContent() === null) { + if ($link->getSampleType() == 'file' && $link->getSampleFileContent() === null && !$link->getSampleFile()) { $link->setSampleFile($existingLink->getSampleFile()); } @@ -328,6 +338,7 @@ public function delete($id) /** * Get MetadataPool instance * + * @deprecated MAGETWO-52273 * @return MetadataPool */ private function getMetadataPool() @@ -342,6 +353,7 @@ private function getMetadataPool() /** * Get LinkTypeHandler instance * + * @deprecated MAGETWO-52273 * @return LinkHandler */ private function getLinkTypeHandler() diff --git a/app/code/Magento/Downloadable/Model/Sample/Builder.php b/app/code/Magento/Downloadable/Model/Sample/Builder.php new file mode 100644 index 0000000000000..6f72f7d474fe2 --- /dev/null +++ b/app/code/Magento/Downloadable/Model/Sample/Builder.php @@ -0,0 +1,135 @@ +downloadableFile = $downloadableFile; + $this->objectCopyService = $objectCopyService; + $this->dataObjectHelper = $dataObjectHelper; + $this->componentFactory = $componentFactory; + } + + /** + * @param array $data + * @return $this; + */ + public function setData(array $data) + { + $this->data = $data; + return $this; + } + + /** + * @param SampleInterface $sample + * @return SampleInterface + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function build(SampleInterface $sample) + { + $downloadableData = $this->objectCopyService->getDataFromFieldset( + 'downloadable_data', + 'to_sample', + $this->data + ); + $this->dataObjectHelper->populateWithArray( + $sample, + array_merge( + $this->data, + $downloadableData + ), + SampleInterface::class + ); + if ($sample->getSampleType() === \Magento\Downloadable\Helper\Download::LINK_TYPE_FILE) { + $fileName = $this->downloadableFile->moveFileFromTmp( + $this->getComponent()->getBaseTmpPath(), + $this->getComponent()->getBasePath(), + $this->data['file'] + ); + $sample->setSampleFile($fileName); + } + if (!$sample->getSortOrder()) { + $sample->setSortOrder(1); + } + $this->resetData(); + + return $sample; + } + + /** + * @return void + */ + private function resetData() + { + $this->data = []; + } + + /** + * @return Sample + */ + private function getComponent() + { + if (!$this->component) { + $this->component = $this->componentFactory->create(); + } + return $this->component; + } +} diff --git a/app/code/Magento/Downloadable/Model/SampleRepository.php b/app/code/Magento/Downloadable/Model/SampleRepository.php index 4b420d2452144..7fffb8a660e78 100644 --- a/app/code/Magento/Downloadable/Model/SampleRepository.php +++ b/app/code/Magento/Downloadable/Model/SampleRepository.php @@ -185,11 +185,12 @@ public function save( if ($product->getTypeId() !== Type::TYPE_DOWNLOADABLE) { throw new InputException(__('Provided product must be type \'downloadable\'.')); } - if (!$this->contentValidator->isValid($sample)) { + $validateSampleContent = !($sample->getSampleType() === 'file' && $sample->getSampleFile()); + if (!$this->contentValidator->isValid($sample, $validateSampleContent)) { throw new InputException(__('Provided sample information is invalid.')); } - if (!in_array($sample->getSampleType(), ['url', 'file'])) { + if (!($sample->getSampleType() === 'url' || $sample->getSampleType() === 'file')) { throw new InputException(__('Invalid sample type.')); } @@ -221,7 +222,7 @@ protected function saveSample( 'title' => $sample->getTitle(), ]; - if ($sample->getSampleType() == 'file' && $sample->getSampleFile() === null) { + if ($sample->getSampleType() === 'file' && $sample->getSampleFile() === null) { $sampleData['file'] = $this->jsonEncoder->encode( [ $this->fileContentUploader->upload($sample->getSampleFileContent(), 'sample'), @@ -326,6 +327,7 @@ public function delete($id) /** * Get MetadataPool instance * + * @deprecated MAGETWO-52273 * @return MetadataPool */ private function getMetadataPool() @@ -340,6 +342,7 @@ private function getMetadataPool() /** * Get SampleTypeHandler Instance * + * @deprecated MAGETWO-52273 * @return SampleHandler */ private function getSampleTypeHandler() diff --git a/app/code/Magento/Downloadable/Test/Unit/Model/Link/BuilderTest.php b/app/code/Magento/Downloadable/Test/Unit/Model/Link/BuilderTest.php new file mode 100644 index 0000000000000..8dfb616aaed43 --- /dev/null +++ b/app/code/Magento/Downloadable/Test/Unit/Model/Link/BuilderTest.php @@ -0,0 +1,227 @@ +downloadFileMock = $this->getMockBuilder( + \Magento\Downloadable\Helper\File::class + )->disableOriginalConstructor()->getMock(); + + $this->objectCopyServiceMock = $this->getMockBuilder( + \Magento\Framework\DataObject\Copy::class + )->disableOriginalConstructor()->getMock(); + + $this->dataObjectHelperMock = $this->getMockBuilder( + \Magento\Framework\Api\DataObjectHelper::class + )->disableOriginalConstructor()->getMock(); + + $this->mockComponentFactory = $this->getMockBuilder('\Magento\Downloadable\Model\LinkFactory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + + $this->linkMock = $this->getMockBuilder(LinkInterface::class) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + + $this->service = $objectManagerHelper->getObject( + Builder::class, + [ + 'downloadableFile' => $this->downloadFileMock, + 'objectCopyService' => $this->objectCopyServiceMock, + 'dataObjectHelper' => $this->dataObjectHelperMock, + 'componentFactory' => $this->mockComponentFactory + ] + ); + } + + /** + * @dataProvider buildProvider + * @param array $data + * @param float $expectedPrice + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function testBuild($data, $expectedPrice) + { + $downloadableData = ['sort_order' => 1]; + $baseTmpPath = 'l/2/e/f/gm'; + $baseSampleTmpPath = 's/l/2/e/f/gm'; + $basePath = 'l/e/f/gm'; + $baseSamplePath = 's/l/e/f/gm'; + $linkFileName = 'cat1.png'; + $this->objectCopyServiceMock->expects($this->once())->method('getDataFromFieldset')->with( + 'downloadable_data', + 'to_link', + $data + )->willReturn($downloadableData); + $this->service->setData($data); + $this->dataObjectHelperMock->method('populateWithArray') + ->with( + $this->linkMock, + array_merge( + $data, + $downloadableData + ), + LinkInterface::class + )->willReturn($this->linkMock); + $this->linkMock->expects($this->once())->method('getLinkType')->willReturn(Download::LINK_TYPE_FILE); + $linkModel = $this->getMockBuilder(Link::class) + ->disableOriginalConstructor() + ->getMock(); + $this->mockComponentFactory->expects($this->once())->method('create')->willReturn($linkModel); + $linkModel->expects($this->once())->method('getBaseTmpPath')->willReturn($baseTmpPath); + $linkModel->expects($this->once())->method('getBaseSampleTmpPath')->willReturn($baseSampleTmpPath); + $linkModel->expects($this->once())->method('getBasePath')->willReturn($basePath); + $linkModel->expects($this->once())->method('getBaseSamplePath')->willReturn($baseSamplePath); + $this->downloadFileMock->expects($this->exactly(2)) + ->method('moveFileFromTmp') + ->withConsecutive( + [ + $baseTmpPath, + $basePath, + $data['file'] + ], + [ + $baseSampleTmpPath, + $baseSamplePath, + $data['sample']['file'] + ] + )->willReturn($linkFileName); + $this->linkMock->expects($this->once())->method('setLinkFile')->with($linkFileName); + $this->linkMock->expects($this->once())->method('setLinkUrl')->with(null); + $this->linkMock->expects($this->once())->method('getSampleType')->willReturn(Download::LINK_TYPE_FILE); + $this->linkMock->expects($this->once())->method('setSampleFile')->with($linkFileName); + if (!isset($data['sort_order'])) { + $this->linkMock->expects($this->once())->method('setSortOrder')->with(1); + } + if (isset($data['is_unlimited'])) { + $this->linkMock->expects($this->once())->method('setNumberOfDownloads')->with(0); + } + if (isset($data['price'])) { + $this->linkMock->expects($this->once())->method('getPrice')->willReturn($data['price']); + } else { + $this->linkMock->expects($this->once())->method('setPrice')->with($expectedPrice); + } + + $this->service->build($this->linkMock); + } + + /** + * @expectedException \Magento\Framework\Exception\LocalizedException + * @expectedExceptionMessage Link file not provided + */ + public function testBuildFileNotProvided() + { + $data = [ + 'type' => 'file', + 'sample' => [ + 'file' => 'cXVlIHRhbA==', + 'type' => 'file' + ] + ]; + $downloadableData = ['sort_order' => 1]; + $this->objectCopyServiceMock->expects($this->once())->method('getDataFromFieldset')->with( + 'downloadable_data', + 'to_link', + $data + )->willReturn($downloadableData); + $this->service->setData($data); + $this->dataObjectHelperMock->method('populateWithArray') + ->with( + $this->linkMock, + array_merge( + $data, + $downloadableData + ), + LinkInterface::class + )->willReturn($this->linkMock); + $this->linkMock->expects($this->once())->method('getLinkType')->willReturn(Download::LINK_TYPE_FILE); + $this->downloadFileMock->expects($this->never()) + ->method('moveFileFromTmp'); + + $this->service->build($this->linkMock); + } + + /** + * @return array + */ + public function buildProvider() + { + $expectedPrice = 0; + $expectedOrder = 1; + return [ + 'price_0' => [ + [ + 'file' => 'cXVlIHRhbA==', + 'type' => 'file', + 'sample' => [ + 'file' => 'cXVlIHRhbA==', + 'type' => 'file' + ] + ], + 'expectedPrice' => $expectedPrice, + 'expectedOrder' => $expectedOrder + ], + 'price_declared' => [ + [ + 'file' => 'cXVlIHRhbA==', + 'type' => 'file', + 'price' => 150, + 'sort_order' => 2, + 'is_unlimited' => true, + 'sample' => [ + 'file' => 'cXVlIHRhbA==', + 'type' => 'file' + ] + ], + 'expectedPrice' => 150, + 'expectedOrder' => 2 + ] + ]; + } +} diff --git a/app/code/Magento/Downloadable/Test/Unit/Model/Sample/BuilderTest.php b/app/code/Magento/Downloadable/Test/Unit/Model/Sample/BuilderTest.php new file mode 100644 index 0000000000000..1c0a4df238c1f --- /dev/null +++ b/app/code/Magento/Downloadable/Test/Unit/Model/Sample/BuilderTest.php @@ -0,0 +1,129 @@ +downloadFileMock = $this->getMockBuilder( + \Magento\Downloadable\Helper\File::class + )->disableOriginalConstructor()->getMock(); + + $this->objectCopyServiceMock = $this->getMockBuilder( + \Magento\Framework\DataObject\Copy::class + )->disableOriginalConstructor()->getMock(); + + $this->dataObjectHelperMock = $this->getMockBuilder( + \Magento\Framework\Api\DataObjectHelper::class + )->disableOriginalConstructor()->getMock(); + + $this->mockComponentFactory = $this->getMockBuilder('\Magento\Downloadable\Model\SampleFactory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + + $this->sampleMock = $this->getMockBuilder(SampleInterface::class) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + + $this->service = $objectManagerHelper->getObject( + Builder::class, + [ + 'downloadableFile' => $this->downloadFileMock, + 'objectCopyService' => $this->objectCopyServiceMock, + 'dataObjectHelper' => $this->dataObjectHelperMock, + 'componentFactory' => $this->mockComponentFactory + ] + ); + } + + public function testBuild() + { + $data = [ + 'file' => 'cXVlIHRhbA==', + 'type' => 'file' + ]; + $downloadableData = ['sort_order' => 1]; + $baseTmpPath = 'l/2/e/f/gm'; + $basePath = 'l/e/f/gm'; + $fileName = 'cat1.png'; + $this->objectCopyServiceMock->expects($this->once())->method('getDataFromFieldset')->with( + 'downloadable_data', + 'to_sample', + $data + )->willReturn($downloadableData); + $this->dataObjectHelperMock->method('populateWithArray') + ->with( + $this->sampleMock, + array_merge( + $data, + $downloadableData + ), + SampleInterface::class + )->willReturn($this->sampleMock); + $this->sampleMock->expects($this->once())->method('getSampleType')->willReturn(Download::LINK_TYPE_FILE); + $sampleModel = $this->getMockBuilder(Sample::class) + ->disableOriginalConstructor() + ->getMock(); + $this->mockComponentFactory->expects($this->once())->method('create')->willReturn($sampleModel); + $sampleModel->expects($this->once())->method('getBaseTmpPath')->willReturn($baseTmpPath); + $sampleModel->expects($this->once())->method('getBasePath')->willReturn($basePath); + $this->downloadFileMock->expects($this->once()) + ->method('moveFileFromTmp') + ->withConsecutive( + [ + $baseTmpPath, + $basePath, + $data['file'] + ] + )->willReturn($fileName); + $this->sampleMock->expects($this->once())->method('setSampleFile')->with($fileName); + $this->sampleMock->expects($this->once())->method('setSortOrder')->with(1); + $this->service->setData($data); + + $this->service->build($this->sampleMock); + } +} diff --git a/app/code/Magento/Downloadable/etc/fieldset.xml b/app/code/Magento/Downloadable/etc/fieldset.xml index a11b698bfc236..680857d7e5dcc 100644 --- a/app/code/Magento/Downloadable/etc/fieldset.xml +++ b/app/code/Magento/Downloadable/etc/fieldset.xml @@ -59,5 +59,25 @@ +
+ + + + + + + + + + +
+ diff --git a/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/ProductRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/ProductRepositoryTest.php index c4819a642b605..d285be5a26300 100644 --- a/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/ProductRepositoryTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/ProductRepositoryTest.php @@ -222,9 +222,7 @@ public function testUpdateDownloadableProductLinks() 'price' => 5.0, 'number_of_downloads' => 999, 'link_type' => 'file', - 'sample_type' => 'file', - 'link_file' => 'http://www.example.com/invalid', //this field will be overridden - 'sample_file' => 'http://www.example.com/invalid', //this field will be overridden + 'sample_type' => 'file' ]; $linkData = $this->getLinkData(); From 3853d0d53921bc09e9301d927f3e0553b1e8ba1b Mon Sep 17 00:00:00 2001 From: Vladyslav Shcherbyna Date: Wed, 4 May 2016 15:26:11 +0300 Subject: [PATCH 15/21] MAGETWO-52170: Impossible to create Downloadable Product - deprecated description remove --- .../Product/Initialization/Helper/Plugin/Downloadable.php | 8 ++++---- app/code/Magento/Downloadable/Model/SampleRepository.php | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Downloadable/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Downloadable.php b/app/code/Magento/Downloadable/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Downloadable.php index c3d6aa581f135..ece362c028755 100644 --- a/app/code/Magento/Downloadable/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Downloadable.php +++ b/app/code/Magento/Downloadable/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Downloadable.php @@ -110,7 +110,7 @@ public function afterInitialize( /** * Get LinkBuilder instance * - * @deprecated MAGETWO-52273 + * @deprecated * @return \Magento\Downloadable\Model\Link\Builder */ private function getLinkBuilder() @@ -125,7 +125,7 @@ private function getLinkBuilder() /** * Get SampleBuilder instance * - * @deprecated MAGETWO-52273 + * @deprecated * @return \Magento\Downloadable\Model\Sample\Builder */ private function getSampleBuilder() @@ -142,7 +142,7 @@ private function getSampleBuilder() /** * Get LinkFactory instance * - * @deprecated MAGETWO-52273 + * @deprecated * @return LinkFactory */ private function getLinkFactory() @@ -157,7 +157,7 @@ private function getLinkFactory() /** * Get Sample Factory * - * @deprecated MAGETWO-52273 + * @deprecated * @return SampleFactory */ private function getSampleFactory() diff --git a/app/code/Magento/Downloadable/Model/SampleRepository.php b/app/code/Magento/Downloadable/Model/SampleRepository.php index 7fffb8a660e78..8f7e0fb947e3d 100644 --- a/app/code/Magento/Downloadable/Model/SampleRepository.php +++ b/app/code/Magento/Downloadable/Model/SampleRepository.php @@ -327,7 +327,7 @@ public function delete($id) /** * Get MetadataPool instance * - * @deprecated MAGETWO-52273 + * @deprecated * @return MetadataPool */ private function getMetadataPool() @@ -342,7 +342,7 @@ private function getMetadataPool() /** * Get SampleTypeHandler Instance * - * @deprecated MAGETWO-52273 + * @deprecated * @return SampleHandler */ private function getSampleTypeHandler() From c1b7c35e596602c6b3535efeb423c184793a2859 Mon Sep 17 00:00:00 2001 From: oradchenko Date: Wed, 4 May 2016 15:32:56 +0300 Subject: [PATCH 16/21] MAGETWO-52079: [GITHUB] Order Repository GetList Method always returns the same shipping address for all orders #4019 --- .../Magento/Sales/Model/OrderRepository.php | 32 +++++++++++++------ .../Test/Unit/Model/OrderRepositoryTest.php | 2 +- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/app/code/Magento/Sales/Model/OrderRepository.php b/app/code/Magento/Sales/Model/OrderRepository.php index 8e9454bbf74f0..fb52ea9f9e72f 100644 --- a/app/code/Magento/Sales/Model/OrderRepository.php +++ b/app/code/Magento/Sales/Model/OrderRepository.php @@ -16,7 +16,6 @@ use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\Exception\InputException; use Magento\Framework\Api\SortOrder; -use Magento\Framework\App\ObjectManager; /** * Repository class for @see OrderInterface @@ -34,6 +33,16 @@ class OrderRepository implements \Magento\Sales\Api\OrderRepositoryInterface */ protected $searchResultFactory = null; + /** + * @var OrderExtension + */ + private $orderExtension; + + /** + * @var ShippingAssignmentBuilder + */ + private $shippingAssignmentBuilder; + /** * OrderInterface[] * @@ -164,7 +173,7 @@ private function setShippingAssignments(OrderInterface $order) $extensionAttributes = $order->getExtensionAttributes(); if ($extensionAttributes === null) { - $extensionAttributes = $this->getOrderExtensionDependency(); + $extensionAttributes = $this->getOrderExtensionDependency()->create(); } elseif ($extensionAttributes->getShippingAssignments() !== null) { return; } @@ -182,10 +191,12 @@ private function setShippingAssignments(OrderInterface $order) */ private function getOrderExtensionDependency() { - - return ObjectManager::getInstance()->create( - '\Magento\Sales\Api\Data\OrderExtension' - ); + if (!$this->orderExtension instanceof OrderExtension) { + $this->orderExtension = \Magento\Framework\App\ObjectManager::getInstance()->get( + '\Magento\Sales\Api\Data\OrderExtensionFactory' + ); + } + return $this->orderExtension; } /** @@ -196,9 +207,12 @@ private function getOrderExtensionDependency() */ private function getShippingAssignmentBuilderDependency() { - return ObjectManager::getInstance()->create( - '\Magento\Sales\Model\Order\ShippingAssignmentBuilder' - ); + if (!$this->shippingAssignmentBuilder instanceof ShippingAssignmentBuilder) { + $this->shippingAssignmentBuilder = \Magento\Framework\App\ObjectManager::getInstance()->get( + '\Magento\Sales\Model\Order\ShippingAssignmentBuilder' + ); + } + return $this->shippingAssignmentBuilder; } /** diff --git a/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php index 79cbac9e804db..f06191568e2c1 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php @@ -75,7 +75,7 @@ public function testGetList() $extensionAttributes = $this->getMock( '\Magento\Sales\Api\Data\OrderExtension', - ['getShippingAssignments'], + [], [], '', false From b1dd1c69efc3f67a5ab7a2ad36ca37611473cb62 Mon Sep 17 00:00:00 2001 From: oradchenko Date: Wed, 4 May 2016 15:46:14 +0300 Subject: [PATCH 17/21] MAGETWO-52079: [GITHUB] Order Repository GetList Method always returns the same shipping address for all orders #4019 --- app/code/Magento/Sales/Model/OrderRepository.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/code/Magento/Sales/Model/OrderRepository.php b/app/code/Magento/Sales/Model/OrderRepository.php index fb52ea9f9e72f..b79d3482dcbfb 100644 --- a/app/code/Magento/Sales/Model/OrderRepository.php +++ b/app/code/Magento/Sales/Model/OrderRepository.php @@ -10,7 +10,7 @@ use Magento\Sales\Model\Order\ShippingAssignmentBuilder; use Magento\Sales\Api\Data\OrderSearchResultInterfaceFactory as SearchResultFactory; use Magento\Sales\Api\Data\OrderExtensionInterface; -use Magento\Sales\Api\Data\OrderExtension; +use Magento\Sales\Api\Data\OrderExtensionFactory; use Magento\Sales\Api\Data\OrderInterface; use Magento\Sales\Api\Data\ShippingAssignmentInterface; use Magento\Framework\Exception\NoSuchEntityException; @@ -34,9 +34,9 @@ class OrderRepository implements \Magento\Sales\Api\OrderRepositoryInterface protected $searchResultFactory = null; /** - * @var OrderExtension + * @var OrderExtensionFactory */ - private $orderExtension; + private $orderExtensionFactory; /** * @var ShippingAssignmentBuilder @@ -173,7 +173,7 @@ private function setShippingAssignments(OrderInterface $order) $extensionAttributes = $order->getExtensionAttributes(); if ($extensionAttributes === null) { - $extensionAttributes = $this->getOrderExtensionDependency()->create(); + $extensionAttributes = $this->getOrderExtensionDependencyFactory()->create(); } elseif ($extensionAttributes->getShippingAssignments() !== null) { return; } @@ -189,14 +189,14 @@ private function setShippingAssignments(OrderInterface $order) * @return OrderExtension * @deprecated */ - private function getOrderExtensionDependency() + private function getOrderExtensionDependencyFactory() { - if (!$this->orderExtension instanceof OrderExtension) { - $this->orderExtension = \Magento\Framework\App\ObjectManager::getInstance()->get( + if (!$this->orderExtensionFactory instanceof OrderExtensionFactory) { + $this->orderExtensionFactory = \Magento\Framework\App\ObjectManager::getInstance()->get( '\Magento\Sales\Api\Data\OrderExtensionFactory' ); } - return $this->orderExtension; + return $this->orderExtensionFactory; } /** From 8c18808ce3e926d95b31a785e2bf0cdf1cc5791b Mon Sep 17 00:00:00 2001 From: Vladyslav Shcherbyna Date: Wed, 4 May 2016 15:51:04 +0300 Subject: [PATCH 18/21] MAGETWO-52170: Impossible to create Downloadable Product - review fixes --- app/code/Magento/Downloadable/Model/LinkRepository.php | 2 +- app/code/Magento/Downloadable/Model/Sample/Builder.php | 3 +++ app/code/Magento/Downloadable/Model/SampleRepository.php | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Downloadable/Model/LinkRepository.php b/app/code/Magento/Downloadable/Model/LinkRepository.php index 7229d44c36acb..15cba1e4ac938 100644 --- a/app/code/Magento/Downloadable/Model/LinkRepository.php +++ b/app/code/Magento/Downloadable/Model/LinkRepository.php @@ -184,7 +184,7 @@ public function save($sku, LinkInterface $link, $isGlobalScopeContent = true) throw new InputException(__('Provided link information is invalid.')); } - if (!($link->getLinkType() === 'url' || $link->getLinkType() === 'file')) { + if (!in_array($link->getLinkType(), ['url', 'file'], true)) { throw new InputException(__('Invalid link type.')); } $title = $link->getTitle(); diff --git a/app/code/Magento/Downloadable/Model/Sample/Builder.php b/app/code/Magento/Downloadable/Model/Sample/Builder.php index 6f72f7d474fe2..774d72f2750e0 100644 --- a/app/code/Magento/Downloadable/Model/Sample/Builder.php +++ b/app/code/Magento/Downloadable/Model/Sample/Builder.php @@ -99,6 +99,9 @@ public function build(SampleInterface $sample) SampleInterface::class ); if ($sample->getSampleType() === \Magento\Downloadable\Helper\Download::LINK_TYPE_FILE) { + if (!isset($this->data['file'])) { + throw new \Magento\Framework\Exception\LocalizedException(__('Sample file not provided')); + } $fileName = $this->downloadableFile->moveFileFromTmp( $this->getComponent()->getBaseTmpPath(), $this->getComponent()->getBasePath(), diff --git a/app/code/Magento/Downloadable/Model/SampleRepository.php b/app/code/Magento/Downloadable/Model/SampleRepository.php index 8f7e0fb947e3d..2723e0023378c 100644 --- a/app/code/Magento/Downloadable/Model/SampleRepository.php +++ b/app/code/Magento/Downloadable/Model/SampleRepository.php @@ -190,7 +190,7 @@ public function save( throw new InputException(__('Provided sample information is invalid.')); } - if (!($sample->getSampleType() === 'url' || $sample->getSampleType() === 'file')) { + if (!in_array($sample->getSampleType(), ['url', 'file'], true)) { throw new InputException(__('Invalid sample type.')); } From f3e15243116adbbd0f70f5eaaab53c0c2b98e602 Mon Sep 17 00:00:00 2001 From: oradchenko Date: Wed, 4 May 2016 17:06:10 +0300 Subject: [PATCH 19/21] MAGETWO-52079: [GITHUB] Order Repository GetList Method always returns the same shipping address for all orders #4019 --- app/code/Magento/Sales/Model/OrderRepository.php | 4 ++-- .../Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Sales/Model/OrderRepository.php b/app/code/Magento/Sales/Model/OrderRepository.php index b79d3482dcbfb..867a3ede63873 100644 --- a/app/code/Magento/Sales/Model/OrderRepository.php +++ b/app/code/Magento/Sales/Model/OrderRepository.php @@ -173,7 +173,7 @@ private function setShippingAssignments(OrderInterface $order) $extensionAttributes = $order->getExtensionAttributes(); if ($extensionAttributes === null) { - $extensionAttributes = $this->getOrderExtensionDependencyFactory()->create(); + $extensionAttributes = $this->getOrderExtensionFactory()->create(); } elseif ($extensionAttributes->getShippingAssignments() !== null) { return; } @@ -189,7 +189,7 @@ private function setShippingAssignments(OrderInterface $order) * @return OrderExtension * @deprecated */ - private function getOrderExtensionDependencyFactory() + private function getOrderExtensionFactory() { if (!$this->orderExtensionFactory instanceof OrderExtensionFactory) { $this->orderExtensionFactory = \Magento\Framework\App\ObjectManager::getInstance()->get( diff --git a/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php index f06191568e2c1..79cbac9e804db 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php @@ -75,7 +75,7 @@ public function testGetList() $extensionAttributes = $this->getMock( '\Magento\Sales\Api\Data\OrderExtension', - [], + ['getShippingAssignments'], [], '', false From 0883d63d4a35cb54f5b301611459463037d95852 Mon Sep 17 00:00:00 2001 From: oradchenko Date: Wed, 4 May 2016 17:13:31 +0300 Subject: [PATCH 20/21] MAGETWO-52079: [GITHUB] Order Repository GetList Method always returns the same shipping address for all orders #4019 --- app/code/Magento/Sales/Model/OrderRepository.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Sales/Model/OrderRepository.php b/app/code/Magento/Sales/Model/OrderRepository.php index 867a3ede63873..a2b53f8b2cde1 100644 --- a/app/code/Magento/Sales/Model/OrderRepository.php +++ b/app/code/Magento/Sales/Model/OrderRepository.php @@ -185,8 +185,9 @@ private function setShippingAssignments(OrderInterface $order) } /** - * Get the new OrderExtension dependency for application code - * @return OrderExtension + * Get the new OrderExtensionFactory for application code + * + * @return OrderExtensionFactory * @deprecated */ private function getOrderExtensionFactory() From a67c8159030c7987d6d1ce5e2bccb0d90b799234 Mon Sep 17 00:00:00 2001 From: Vladyslav Shcherbyna Date: Wed, 4 May 2016 17:43:44 +0300 Subject: [PATCH 21/21] MAGETWO-52170: Impossible to create Downloadable Product - fix unit --- .../Test/Unit/Model/Link/BuilderTest.php | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) 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 8dfb616aaed43..d22a736bdf3c0 100644 --- a/app/code/Magento/Downloadable/Test/Unit/Model/Link/BuilderTest.php +++ b/app/code/Magento/Downloadable/Test/Unit/Model/Link/BuilderTest.php @@ -94,10 +94,17 @@ public function testBuild($data, $expectedPrice) $basePath = 'l/e/f/gm'; $baseSamplePath = 's/l/e/f/gm'; $linkFileName = 'cat1.png'; - $this->objectCopyServiceMock->expects($this->once())->method('getDataFromFieldset')->with( - 'downloadable_data', - 'to_link', - $data + $this->objectCopyServiceMock->expects($this->exactly(2))->method('getDataFromFieldset')->withConsecutive( + [ + 'downloadable_data', + 'to_link', + $data + ], + [ + 'downloadable_link_sample_data', + 'to_link_sample', + $data['sample'] + ] )->willReturn($downloadableData); $this->service->setData($data); $this->dataObjectHelperMock->method('populateWithArray') @@ -165,10 +172,17 @@ public function testBuildFileNotProvided() ] ]; $downloadableData = ['sort_order' => 1]; - $this->objectCopyServiceMock->expects($this->once())->method('getDataFromFieldset')->with( - 'downloadable_data', - 'to_link', - $data + $this->objectCopyServiceMock->expects($this->exactly(2))->method('getDataFromFieldset')->withConsecutive( + [ + 'downloadable_data', + 'to_link', + $data + ], + [ + 'downloadable_link_sample_data', + 'to_link_sample', + $data['sample'] + ] )->willReturn($downloadableData); $this->service->setData($data); $this->dataObjectHelperMock->method('populateWithArray')