diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper.php index 49559ba330b6e..3e45111fb6982 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper.php @@ -3,8 +3,12 @@ * Copyright © 2016 Magento. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Catalog\Controller\Adminhtml\Product\Initialization; +/** + * Product initialization helper class + */ class Helper { /** @@ -71,7 +75,7 @@ public function __construct( */ public function initialize(\Magento\Catalog\Model\Product $product) { - $productData = $this->request->getPost('product'); + $productData = $this->request->getPost('product', []); unset($productData['custom_attributes']); unset($productData['extension_attributes']); @@ -144,6 +148,13 @@ public function initialize(\Magento\Catalog\Model\Product $product) $productData['options'], $this->request->getPost('options_use_default') ); + foreach ($options as &$customOptionData) { + if (isset($customOptionData['values'])) { + $customOptionData['values'] = array_filter($customOptionData['values'], function ($valueData) { + return !($valueData['option_type_id'] == '-1' && !empty($valueData['is_delete'])); + }); + } + } $product->setProductOptions($options); } diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/NewAction.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/NewAction.php index 110029cdda0a8..cc671cfd8d2f9 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/NewAction.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/NewAction.php @@ -9,6 +9,9 @@ use Magento\Backend\App\Action; use Magento\Catalog\Controller\Adminhtml\Product; +/** + * Class that handle new product creation + */ class NewAction extends \Magento\Catalog\Controller\Adminhtml\Product { /** diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php index 2a407a67fd428..dc6ee45b79f25 100644 --- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php @@ -3,34 +3,59 @@ * Copyright © 2016 Magento. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Catalog\Test\Unit\Controller\Adminhtml\Product\Initialization; -use \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper; +use Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper; +use Magento\Catalog\Controller\Adminhtml\Product\Initialization\StockDataFilter; +use Magento\Catalog\Model\Product; +use Magento\Catalog\Model\Product\Option; +use Magento\Framework\App\RequestInterface; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\Store\Model\StoreManagerInterface; +use Magento\Catalog\Model\Product\Initialization\Helper\ProductLinks; +/** + * Class HelperTest + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings(PHPMD.ExcessivePublicCount) + * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) + * @SuppressWarnings(PHPMD.TooManyFields) + */ class HelperTest extends \PHPUnit_Framework_TestCase { + /** + * @var ObjectManager + */ + protected $objectManager; + + /** + * @var Helper + */ + protected $helper; + /** * @var \PHPUnit_Framework_MockObject_MockObject */ protected $requestMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $storeManagerMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var StockDataFilter|\PHPUnit_Framework_MockObject_MockObject */ protected $stockFilterMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var ProductLinks|\PHPUnit_Framework_MockObject_MockObject */ protected $productLinksMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var Product|\PHPUnit_Framework_MockObject_MockObject */ protected $productMock; @@ -55,33 +80,36 @@ class HelperTest extends \PHPUnit_Framework_TestCase protected $websiteId = 1; /** - * @var \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper - */ - protected $helper; - - /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Backend\Helper\Js|\PHPUnit_Framework_MockObject_MockObject */ protected $jsHelperMock; protected function setUp() { - $this->requestMock = $this->getMock('Magento\Framework\App\Request\Http', [], [], '', false); - $this->jsHelperMock = $this->getMock('Magento\Backend\Helper\Js', [], [], '', false); - $this->storeMock = $this->getMock('Magento\Store\Model\Store', [], [], '', false); - $this->websiteMock = $this->getMock('Magento\Store\Model\Website', [], [], '', false); - $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManagerInterface'); - $this->dateFilterMock = $this->getMock('\Magento\Framework\Stdlib\DateTime\Filter\Date', [], [], '', false); - - $this->stockFilterMock = $this->getMock( - 'Magento\Catalog\Controller\Adminhtml\Product\Initialization\StockDataFilter', + $this->objectManager = new ObjectManager($this); + $this->requestMock = $this->getMockBuilder(RequestInterface::class) + ->setMethods(['getPost']) + ->getMockForAbstractClass(); + + $this->jsHelperMock = $this->getMock(\Magento\Backend\Helper\Js::class, [], [], '', false); + $this->storeMock = $this->getMock(\Magento\Store\Model\Store::class, [], [], '', false); + $this->websiteMock = $this->getMock(\Magento\Store\Model\Website::class, [], [], '', false); + $this->storeManagerMock = $this->getMockBuilder(StoreManagerInterface::class) + ->getMockForAbstractClass(); + $this->dateFilterMock = $this->getMock( + \Magento\Framework\Stdlib\DateTime\Filter\Date::class, [], [], '', false ); + + $this->stockFilterMock = $this->getMockBuilder(StockDataFilter::class) + ->disableOriginalConstructor() + ->getMock(); + $this->productLinksMock = $this->getMock( - 'Magento\Catalog\Model\Product\Initialization\Helper\ProductLinks', + \Magento\Catalog\Model\Product\Initialization\Helper\ProductLinks::class, [], [], '', @@ -89,9 +117,8 @@ protected function setUp() ); $this->productMock = $this->getMock( - 'Magento\Catalog\Model\Product', + \Magento\Catalog\Model\Product::class, [ - 'setData', 'addData', 'getId', 'setWebsiteIds', @@ -100,7 +127,6 @@ protected function setUp() 'getAttributes', 'unlockAttribute', 'getOptionsReadOnly', - 'setProductOptions', 'setCanSaveCustomOptions', '__sleep', '__wakeup' @@ -109,6 +135,15 @@ protected function setUp() '', false ); + + $this->helper = $this->objectManager->getObject(Helper::class, [ + 'request' => $this->requestMock, + 'storeManager' => $this->storeManagerMock, + 'stockFilter' => $this->stockFilterMock, + 'productLinks' => $this->productLinksMock, + 'jsHelper' => $this->jsHelperMock, + 'dateFilter' => $this->dateFilterMock, + ]); } /** @@ -117,6 +152,20 @@ protected function setUp() */ public function testInitialize() { + $optionsData = [ + 'option1' => ['is_delete' => false, 'name' => 'name1', 'price' => 'price1', 'option_id' => '13'], + 'option2' => ['is_delete' => false, 'name' => 'name1', 'price' => 'price1', 'option_id' => '14', + 'values' => [ + 'value1' => ['option_type_id' => 1, 'is_delete' =>''], + 'value2' => ['option_type_id' => '-1', 'is_delete' =>'1'] + ] + ], + ]; + $productData = [ + 'stock_data' => ['stock_data'], + 'options' => $optionsData, + ]; + $this->websiteMock->expects($this->once()) ->method('getId') ->will($this->returnValue($this->websiteId)); @@ -130,28 +179,20 @@ public function testInitialize() ->with(true) ->will($this->returnValue($this->storeMock)); - $this->jsHelperMock = $this->getMock('\Magento\Backend\Helper\Js', [], [], '', false); - $this->helper = new Helper( - $this->requestMock, - $this->storeManagerMock, - $this->stockFilterMock, - $this->productLinksMock, - $this->jsHelperMock, - $this->dateFilterMock - ); - - $productData = [ - 'stock_data' => ['stock_data'], - 'options' => ['option1', 'option2'] - ]; - - $attributeNonDate = $this->getMock('Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false); - $attributeDate = $this->getMock('Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false); + $attributeNonDate = $this->getMockBuilder(\Magento\Catalog\Model\ResourceModel\Eav\Attribute::class) + ->disableOriginalConstructor() + ->getMock(); + $attributeDate = $this->getMockBuilder(\Magento\Catalog\Model\ResourceModel\Eav\Attribute::class) + ->disableOriginalConstructor() + ->getMock(); $attributeNonDateBackEnd = - $this->getMock('Magento\Eav\Model\Entity\Attribute\Backend\DefaultBackend', [], [], '', false); - $attributeDateBackEnd = - $this->getMock('Magento\Eav\Model\Entity\Attribute\Backend\Datetime', [], [], '', false); + $this->getMockBuilder(\Magento\Eav\Model\Entity\Attribute\Backend\DefaultBackend::class) + ->disableOriginalConstructor() + ->getMock(); + $attributeDateBackEnd = $this->getMockBuilder(\Magento\Eav\Model\Entity\Attribute\Backend\Datetime::class) + ->disableOriginalConstructor() + ->getMock(); $attributeNonDate->expects($this->any()) ->method('getBackend') @@ -177,6 +218,13 @@ public function testInitialize() $useDefaults = ['attributeCode1', 'attributeCode2']; + $this->requestMock->expects($this->any())->method('getPost')->willReturnMap( + [ + ['product', [], $productData], + ['use_default', null, $useDefaults] + ] + ); + $this->requestMock->expects($this->at(0)) ->method('getPost') ->with('product') @@ -230,6 +278,7 @@ public function testInitialize() $productData['category_ids'] = []; $productData['website_ids'] = []; + $this->productMock->expects($this->once()) ->method('addData') ->with($productData); @@ -242,15 +291,11 @@ public function testInitialize() ->method('getOptionsReadOnly') ->will($this->returnValue(false)); - $this->productMock->expects($this->once()) - ->method('setProductOptions') - ->with($productData['options']); - - $this->productMock->expects($this->once()) - ->method('setCanSaveCustomOptions') - ->with(true); - $this->assertEquals($this->productMock, $this->helper->initialize($this->productMock)); + + $productOptions = $this->productMock->getProductOptions(); + $this->assertTrue(2 == count($productOptions)); + $this->assertTrue(1 == count($productOptions['option2']['values'])); } /** @@ -292,15 +337,6 @@ public function mergeProductOptionsDataProvider() */ public function testMergeProductOptions($productOptions, $defaultOptions, $expectedResults) { - $this->jsHelperMock = $this->getMock('\Magento\Backend\Helper\Js', [], [], '', false); - $this->helper = new Helper( - $this->requestMock, - $this->storeManagerMock, - $this->stockFilterMock, - $this->productLinksMock, - $this->jsHelperMock, - $this->dateFilterMock - ); $result = $this->helper->mergeProductOptions($productOptions, $defaultOptions); $this->assertEquals($expectedResults, $result); } diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/NewActionTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/NewActionTest.php index 187c4e6bba0ff..d887b33f17ef6 100644 --- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/NewActionTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/NewActionTest.php @@ -4,8 +4,12 @@ * Copyright © 2016 Magento. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Catalog\Test\Unit\Controller\Adminhtml\Product; +/** + * Class to test new product creation + */ class NewActionTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\ProductTest { /** @var \Magento\Catalog\Controller\Adminhtml\Product\NewAction */ @@ -22,23 +26,24 @@ class NewActionTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\Prod protected function setUp() { $this->productBuilder = $this->getMock( - 'Magento\Catalog\Controller\Adminhtml\Product\Builder', + \Magento\Catalog\Controller\Adminhtml\Product\Builder::class, ['build'], [], '', false ); - $this->product = $this->getMockBuilder('Magento\Catalog\Model\Product')->disableOriginalConstructor() + $this->product = $this->getMockBuilder(\Magento\Catalog\Model\Product::class) + ->disableOriginalConstructor() ->setMethods(['addData', 'getTypeId', 'getStoreId', '__sleep', '__wakeup'])->getMock(); $this->product->expects($this->any())->method('getTypeId')->will($this->returnValue('simple')); $this->product->expects($this->any())->method('getStoreId')->will($this->returnValue('1')); $this->productBuilder->expects($this->any())->method('build')->will($this->returnValue($this->product)); - $this->resultPage = $this->getMockBuilder('Magento\Backend\Model\View\Result\Page') + $this->resultPage = $this->getMockBuilder(\Magento\Backend\Model\View\Result\Page::class) ->disableOriginalConstructor() ->getMock(); - $resultPageFactory = $this->getMockBuilder('Magento\Framework\View\Result\PageFactory') + $resultPageFactory = $this->getMockBuilder(\Magento\Framework\View\Result\PageFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); @@ -46,10 +51,10 @@ protected function setUp() ->method('create') ->willReturn($this->resultPage); - $this->resultForward = $this->getMockBuilder('Magento\Backend\Model\View\Result\Forward') + $this->resultForward = $this->getMockBuilder(\Magento\Backend\Model\View\Result\Forward::class) ->disableOriginalConstructor() ->getMock(); - $resultForwardFactory = $this->getMockBuilder('Magento\Backend\Model\View\Result\ForwardFactory') + $resultForwardFactory = $this->getMockBuilder(\Magento\Backend\Model\View\Result\ForwardFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); @@ -57,11 +62,14 @@ protected function setUp() ->method('create') ->willReturn($this->resultForward); + $stockFilter = $this->getMockBuilder( + \Magento\Catalog\Controller\Adminhtml\Product\Initialization\StockDataFilter::class + )->disableOriginalConstructor()->getMock(); + $this->action = new \Magento\Catalog\Controller\Adminhtml\Product\NewAction( $this->initContext(), $this->productBuilder, - $this->getMockBuilder('Magento\Catalog\Controller\Adminhtml\Product\Initialization\StockDataFilter') - ->disableOriginalConstructor()->getMock(), + $stockFilter, $resultPageFactory, $resultForwardFactory ); diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ValidateTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ValidateTest.php index b24546b9e87da..d98b115f56608 100644 --- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ValidateTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ValidateTest.php @@ -3,11 +3,15 @@ * Copyright © 2016 Magento. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Catalog\Test\Unit\Controller\Adminhtml\Product; use Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; +/** + * Class to test product validation before save + */ class ValidateTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\ProductTest { /** @var \Magento\Catalog\Controller\Adminhtml\Product\Validate */ @@ -32,17 +36,21 @@ class ValidateTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\Produ protected $resultJson; /** @var \Magento\Framework\Controller\Result\JsonFactory|\PHPUnit_Framework_MockObject_MockObject */ protected $resultJsonFactory; + /** @var ObjectManagerHelper */ + protected $objectManagerHelper; protected function setUp() { + $this->objectManagerHelper = new ObjectManagerHelper($this); $this->productBuilder = $this->getMock( - 'Magento\Catalog\Controller\Adminhtml\Product\Builder', + \Magento\Catalog\Controller\Adminhtml\Product\Builder::class, ['build'], [], '', false ); - $this->product = $this->getMockBuilder('Magento\Catalog\Model\Product')->disableOriginalConstructor() + $this->product = $this->getMockBuilder(\Magento\Catalog\Model\Product::class) + ->disableOriginalConstructor() ->setMethods([ 'addData', 'getSku', 'getTypeId', 'getStoreId', '__sleep', '__wakeup', 'getAttributes', 'setAttributeSetId', @@ -53,20 +61,20 @@ protected function setUp() $this->product->expects($this->any())->method('getAttributes')->will($this->returnValue([])); $this->productBuilder->expects($this->any())->method('build')->will($this->returnValue($this->product)); - $this->resultPage = $this->getMockBuilder('Magento\Backend\Model\View\Result\Page') + $this->resultPage = $this->getMockBuilder(\Magento\Backend\Model\View\Result\Page::class) ->disableOriginalConstructor() ->getMock(); - $resultPageFactory = $this->getMockBuilder('Magento\Framework\View\Result\PageFactory') + $resultPageFactory = $this->getMockBuilder(\Magento\Framework\View\Result\PageFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $resultPageFactory->expects($this->any())->method('create')->willReturn($this->resultPage); - $this->resultForward = $this->getMockBuilder('Magento\Backend\Model\View\Result\Forward') + $this->resultForward = $this->getMockBuilder(\Magento\Backend\Model\View\Result\Forward::class) ->disableOriginalConstructor() ->getMock(); - $resultForwardFactory = $this->getMockBuilder('Magento\Backend\Model\View\Result\ForwardFactory') + $resultForwardFactory = $this->getMockBuilder(\Magento\Backend\Model\View\Result\ForwardFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); @@ -75,14 +83,14 @@ protected function setUp() ->willReturn($this->resultForward); $this->resultPage->expects($this->any())->method('getLayout')->willReturn($this->layout); $this->resultRedirectFactory = $this->getMock( - 'Magento\Backend\Model\View\Result\RedirectFactory', + \Magento\Backend\Model\View\Result\RedirectFactory::class, ['create'], [], '', false ); $this->resultRedirect = $this->getMock( - 'Magento\Backend\Model\View\Result\Redirect', + \Magento\Backend\Model\View\Result\Redirect::class, [], [], '', @@ -91,29 +99,29 @@ protected function setUp() $this->resultRedirectFactory->expects($this->any())->method('create')->willReturn($this->resultRedirect); $this->initializationHelper = $this->getMock( - 'Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper', + \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper::class, [], [], '', false ); - $this->productFactory = $this->getMockBuilder('Magento\Catalog\Model\ProductFactory') + $this->productFactory = $this->getMockBuilder(\Magento\Catalog\Model\ProductFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $this->productFactory->expects($this->any())->method('create')->willReturn($this->product); - $this->resultJson = $this->getMock('Magento\Framework\Controller\Result\Json', [], [], '', false); - $this->resultJsonFactory = $this->getMockBuilder('Magento\Framework\Controller\Result\JsonFactory') + $this->resultJson = $this->getMock(\Magento\Framework\Controller\Result\Json::class, [], [], '', false); + $this->resultJsonFactory = $this->getMockBuilder(\Magento\Framework\Controller\Result\JsonFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $this->resultJsonFactory->expects($this->any())->method('create')->willReturn($this->resultJson); $additionalParams = ['resultRedirectFactory' => $this->resultRedirectFactory]; - $this->action = (new ObjectManagerHelper($this))->getObject( - 'Magento\Catalog\Controller\Adminhtml\Product\Validate', + $this->action = $this->objectManagerHelper->getObject( + \Magento\Catalog\Controller\Adminhtml\Product\Validate::class, [ 'context' => $this->initContext($additionalParams), 'productBuilder' => $this->productBuilder, diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Grid/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Grid/Collection.php new file mode 100644 index 0000000000000..9c68b48319713 --- /dev/null +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Grid/Collection.php @@ -0,0 +1,36 @@ +Magento\Framework\App\State\Proxy - - - sales_invoice_grid - Magento\Sales\Model\ResourceModel\Order\Invoice - - - - - sales_shipment_grid - Magento\Sales\Model\ResourceModel\Order\Shipment - - - - - sales_creditmemo_grid - Magento\Sales\Model\ResourceModel\Order\Creditmemo - - - - - sales_invoice_grid - Magento\Sales\Model\ResourceModel\Order\Invoice - - - - - sales_shipment_grid - Magento\Sales\Model\ResourceModel\Order\Shipment - - - - - sales_creditmemo_grid - Magento\Sales\Model\ResourceModel\Order\Creditmemo - - Magento\Sales\Model\ResourceModel\Order diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/ProductTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/ProductTest.php index 4242163acd5b9..65016818c0780 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/ProductTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/ProductTest.php @@ -109,4 +109,74 @@ public function testEditAction() '"Save & Duplicate" button isn\'t present on Edit Product page' ); } + + /** + * @dataProvider saveWithInvalidCustomOptionDataProvider + * @magentoDataFixture Magento/Catalog/_files/product_without_options.php + */ + public function testSaveWithInvalidCustomOption($postData) + { + $this->getRequest()->setPostValue($postData); + $this->dispatch('backend/catalog/product/save/id/1'); + + $this->assertSessionMessages( + $this->contains('You saved the product.'), + \Magento\Framework\Message\MessageInterface::TYPE_SUCCESS + ); + } + + /** + * Data Provider for save + * + * @return array + */ + public function saveWithInvalidCustomOptionDataProvider() + { + return [ + [ + [ + 'product' => [ + 'options' => [ + [ + 'title' => 'drop_down option', + 'type' => 'drop_down', + 'is_require' => true, + 'sort_order' => 0, + 'values' => [ + [ + 'title' => 'drop_down option 1', + 'price' => 10, + 'price_type' => 'fixed', + 'sku' => 'drop_down option 1 sku', + 'option_type_id' => '-1', + 'is_delete' => '', + 'sort_order' => 0, + ], + [ + 'title' => 'drop_down option 2', + 'price' => 20, + 'price_type' => 'fixed', + 'sku' => 'drop_down option 2 sku', + 'option_type_id' => '-1', + 'is_delete' => '', + 'sort_order' => 1, + ], + [ + 'title' => '', + 'price' => '', + 'price_type' => 'fixed', + 'sku' => '', + 'option_type_id' => '-1', + 'is_delete' => '1', + 'sort_order' => 2, + ] + ], + ] + ], + ], + 'affect_product_custom_options' => 1, + ] + ], + ]; + } } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple.php index 66766153dcf31..d382506222bd2 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple.php @@ -6,7 +6,7 @@ /** @var $product \Magento\Catalog\Model\Product */ $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Catalog\Model\Product'); + ->create(\Magento\Catalog\Model\Product::class); $product->isObjectNew(true); $product->setTypeId(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE) ->setId(1) diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_multiwebsite.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_multiwebsite.php new file mode 100644 index 0000000000000..27b5a6f7fba31 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_multiwebsite.php @@ -0,0 +1,34 @@ +create(\Magento\Catalog\Model\Product::class); +$product->isObjectNew(true); +$product->setTypeId(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE) + ->setAttributeSetId(4) + ->setWebsiteIds([1,2]) + ->setName('Simple Product Two') + ->setSku('simple_two') + ->setPrice(10) + ->setWeight(2) + ->setStockData( + [ + 'use_config_manage_stock' => 1, + 'qty' => 100, + 'is_qty_decimal' => 0, + 'is_in_stock' => 1, + ] + ) + ->setCategoryIds([2]) + ->setVisibility(\Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH) + ->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED) + ->save(); diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/order.php b/dev/tests/integration/testsuite/Magento/Sales/_files/order.php index 4ac29374ef55f..c62b44106c938 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/_files/order.php +++ b/dev/tests/integration/testsuite/Magento/Sales/_files/order.php @@ -14,17 +14,17 @@ $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); -$billingAddress = $objectManager->create('Magento\Sales\Model\Order\Address', ['data' => $addressData]); +$billingAddress = $objectManager->create(\Magento\Sales\Model\Order\Address::class, ['data' => $addressData]); $billingAddress->setAddressType('billing'); $shippingAddress = clone $billingAddress; $shippingAddress->setId(null)->setAddressType('shipping'); -$payment = $objectManager->create('Magento\Sales\Model\Order\Payment'); +$payment = $objectManager->create(\Magento\Sales\Model\Order\Payment::class); $payment->setMethod('checkmo'); /** @var \Magento\Sales\Model\Order\Item $orderItem */ -$orderItem = $objectManager->create('Magento\Sales\Model\Order\Item'); +$orderItem = $objectManager->create(\Magento\Sales\Model\Order\Item::class); $orderItem->setProductId($product->getId())->setQtyOrdered(2); $orderItem->setBasePrice($product->getPrice()); $orderItem->setPrice($product->getPrice()); @@ -32,7 +32,7 @@ $orderItem->setProductType('simple'); /** @var \Magento\Sales\Model\Order $order */ -$order = $objectManager->create('Magento\Sales\Model\Order'); +$order = $objectManager->create(\Magento\Sales\Model\Order::class); $order->setIncrementId( '100000001' )->setState( @@ -56,7 +56,7 @@ )->setShippingAddress( $shippingAddress )->setStoreId( - $objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId() + $objectManager->get(\Magento\Store\Model\StoreManagerInterface::class)->getStore()->getId() )->addItem( $orderItem )->setPayment( diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/order_fixture_second_store.php b/dev/tests/integration/testsuite/Magento/Sales/_files/order_fixture_second_store.php new file mode 100644 index 0000000000000..a19a9b47bb290 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Sales/_files/order_fixture_second_store.php @@ -0,0 +1,66 @@ +create(\Magento\Sales\Model\Order\Address::class, ['data' => $addressData]); +$billingAddress->setAddressType('billing'); + +/** @var \Magento\Sales\Model\Order\Address $shippingAddress */ +$shippingAddress = clone $billingAddress; +$shippingAddress->setId(null)->setAddressType('shipping'); + +/** @var \Magento\Sales\Model\Order\Payment $payment */ +$payment = $objectManager->create(\Magento\Sales\Model\Order\Payment::class); +$payment->setMethod('checkmo'); + +/** @var \Magento\Sales\Model\Order\Item $orderItem */ +$orderItem = $objectManager->create(\Magento\Sales\Model\Order\Item::class); +$orderItem->setProductId($product->getId())->setQtyOrdered(2); +$orderItem->setBasePrice($product->getPrice()); +$orderItem->setPrice($product->getPrice()); +$orderItem->setRowTotal($product->getPrice()); +$orderItem->setProductType('simple'); + +$storeId = $store->getStoreId(); +$incrementId = $storeId . '00000001'; +/** @var \Magento\Sales\Model\Order $order */ +$order = $objectManager->create(\Magento\Sales\Model\Order::class); +$order->setIncrementId( + $incrementId +)->setState( + \Magento\Sales\Model\Order::STATE_PROCESSING +)->setStatus( + $order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_PROCESSING) +)->setSubtotal( + 100 +)->setBaseSubtotal( + 100 +)->setCustomerIsGuest( + true +)->setCustomerEmail( + 'customer@null.com' +)->setBillingAddress( + $billingAddress +)->setShippingAddress( + $shippingAddress +)->setStoreId( + $storeId +)->addItem( + $orderItem +)->setPayment( + $payment +); +$order->save(); diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/order_invoice_shipment_creditmemo_for_two_stores.php b/dev/tests/integration/testsuite/Magento/Sales/_files/order_invoice_shipment_creditmemo_for_two_stores.php new file mode 100644 index 0000000000000..53b651724106e --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Sales/_files/order_invoice_shipment_creditmemo_for_two_stores.php @@ -0,0 +1,59 @@ +create( + \Magento\Sales\Api\InvoiceManagementInterface::class + ); + $orderIncrementId = $order->getIncrementId(); + /** @var \Magento\Sales\Model\Order\Invoice $invoice */ + $invoice = $orderService->prepareInvoice($order); + $invoice->register(); + $order->setIsInProcess(true); + /** @var \Magento\Framework\DB\Transaction $transactionSave */ + $transactionSave = $objectManager + ->create(\Magento\Framework\DB\Transaction::class); + $transactionSave->addObject($invoice)->addObject($order)->save(); + + /** @var Magento\Sales\Model\Order\Payment $payment */ + $payment = $order->getPayment(); + $paymentInfoBlock = $objectManager + ->get(\Magento\Payment\Helper\Data::class) + ->getInfoBlock($payment); + $payment->setBlockMock($paymentInfoBlock); + + /** @var \Magento\Sales\Model\Order\Shipment $shipment */ + $shipment = $objectManager->create(\Magento\Sales\Model\Order\Shipment::class); + $shipment->setOrder($order); + + /** @var \Magento\Sales\Model\Order\Shipment\Item $shipmentItem */ + $shipmentItem = $objectManager->create(\Magento\Sales\Model\Order\Shipment\Item::class); + $shipmentItem->setOrderItem($orderItem); + $shipment->addItem($shipmentItem); + $shipment->setPackages([['1'], ['2']]); + $shipment->setShipmentStatus(\Magento\Sales\Model\Order\Shipment::STATUS_NEW); + + $shipment->save(); + + /** @var \Magento\Sales\Model\Order\CreditmemoFactory $creditmemoFactory */ + $creditmemoFactory = $objectManager->get(\Magento\Sales\Model\Order\CreditmemoFactory::class); + /** @var Magento\Sales\Model\Order\Creditmemo $creditmemo */ + $creditmemo = $creditmemoFactory->createByOrder($order, $order->getData()); + $creditmemo->setOrder($order); + $creditmemo->setState(Magento\Sales\Model\Order\Creditmemo::STATE_OPEN); + $creditmemo->setIncrementId($orderIncrementId); + $creditmemo->save(); +} diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/order_invoice_shipment_creditmemo_for_two_stores_rollback.php b/dev/tests/integration/testsuite/Magento/Sales/_files/order_invoice_shipment_creditmemo_for_two_stores_rollback.php new file mode 100644 index 0000000000000..03e9cd9428167 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Sales/_files/order_invoice_shipment_creditmemo_for_two_stores_rollback.php @@ -0,0 +1,28 @@ +get('Magento\Framework\Registry'); +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', true); + +/** @var \Magento\Sales\Model\ResourceModel\Order\Invoice\Grid\Collection $invoiceGridCollection */ +$invoiceGridCollection = $objectManager->create(\Magento\Sales\Model\ResourceModel\Order\Invoice\Grid\Collection::class); +$invoiceGridCollection->getConnection()->truncateTable($invoiceGridCollection->getMainTable()); + +/** @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Grid\Collection $shipmentCollection */ +$shipmentCollection = $objectManager->create(\Magento\Sales\Model\ResourceModel\Order\Shipment\Grid\Collection::class); +$shipmentCollection->getConnection()->truncateTable($shipmentCollection->getMainTable()); + +/** @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Grid\Collection $creditmemoCollection */ +$creditmemoCollection = $objectManager->create(\Magento\Sales\Model\ResourceModel\Order\Creditmemo\Grid\Collection::class); +$creditmemoCollection->getConnection()->truncateTable($creditmemoCollection->getMainTable()); + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', false); \ No newline at end of file diff --git a/dev/tests/integration/testsuite/Magento/Store/_files/second_website_store.php b/dev/tests/integration/testsuite/Magento/Store/_files/second_website_store.php new file mode 100644 index 0000000000000..23a8af03d8760 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Store/_files/second_website_store.php @@ -0,0 +1,55 @@ +create(\Magento\Store\Model\Website::class); + +if (!$website->load('second_website', 'code')->getId()) { + $website->setData(['code' => 'second_website', 'name' => 'Second Website', 'is_default' => '0']); + $website->save(); +} + +$websiteId = $website->getId(); + +$group = $objectManager->create(\Magento\Store\Model\Group::class); + +if (!$group->load('Second Group', 'name')->getId()) { + $group->setData(['website_id' => $websiteId, 'name' => 'Second Group', 'root_category_id' => '2']); + $group->save(); +} + +$groupId = $group->getId(); + +$store = $objectManager->create(\Magento\Store\Model\Store::class); +$storeId = $store->load('fixture_second_store', 'code')->getId(); + +if (!$storeId) { + $store->setCode( + 'fixture_second_store' + )->setWebsiteId( + $websiteId + )->setGroupId( + $groupId + )->setName( + 'Fixture Store' + )->setSortOrder( + 10 + )->setIsActive( + 1 + ); + $store->save(); + + $eventManager = $objectManager->create(\Magento\Framework\Event\ManagerInterface::class); + $eventName = 'store_add'; + $eventManager->dispatch($eventName, ['store' => $store]); + + /* Refresh stores memory cache */ + $objectManager->get(\Magento\Store\Model\StoreManagerInterface::class)->reinitStores(); +} diff --git a/dev/tests/integration/testsuite/Magento/Store/_files/second_website_store_rollback.php b/dev/tests/integration/testsuite/Magento/Store/_files/second_website_store_rollback.php new file mode 100644 index 0000000000000..2e252c34481f9 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Store/_files/second_website_store_rollback.php @@ -0,0 +1,22 @@ +get('Magento\Framework\Registry'); + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', true); + +/** @var \Magento\Store\Model\Website $website */ +$website = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Store\Model\Website'); +$website->load('second_website'); + +if ($website->getId()) { + $website->delete(); +} + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', false);