Skip to content

Commit 4b42941

Browse files
committed
Merge remote-tracking branch 'origin/MAGETWO-57165' into 2.0-develop-pr6
2 parents 1ca4714 + 49fb8c4 commit 4b42941

File tree

6 files changed

+243
-22
lines changed

6 files changed

+243
-22
lines changed

app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,5 +151,25 @@
151151
</item>
152152
</argument>
153153
</column>
154+
<column name="qty">
155+
<argument name="data" xsi:type="array">
156+
<item name="config" xsi:type="array">
157+
<item name="filter" xsi:type="string">textRange</item>
158+
<item name="add_field" xsi:type="boolean">true</item>
159+
<item name="label" xsi:type="string" translate="true">Quantity</item>
160+
<item name="sortOrder" xsi:type="number">80</item>
161+
</item>
162+
</argument>
163+
</column>
164+
<column name="weight">
165+
<argument name="data" xsi:type="array">
166+
<item name="config" xsi:type="array">
167+
<item name="filter" xsi:type="string">text</item>
168+
<item name="add_field" xsi:type="boolean">true</item>
169+
<item name="label" xsi:type="string" translate="true">Weight</item>
170+
<item name="sortOrder" xsi:type="number">90</item>
171+
</item>
172+
</argument>
173+
</column>
154174
</columns>
155175
</listing>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
/**
3+
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\ConfigurableProduct\Test\Block\Adminhtml\Product;
7+
8+
use Magento\Mtf\Client\Locator;
9+
use Magento\Ui\Test\Block\Adminhtml\DataGrid;
10+
11+
/**
12+
* Associated products grid.
13+
*/
14+
class AssociatedProductGrid extends DataGrid
15+
{
16+
/**
17+
* Checkbox for selection an item in grid.
18+
*
19+
* @var string
20+
*/
21+
protected $selectItem = '.data-grid-checkbox-cell-inner';
22+
23+
/**
24+
* Filter for the search in grid.
25+
*
26+
* @var array
27+
*/
28+
protected $filters = [
29+
'sku' => [
30+
'selector' => '[name="sku"]',
31+
],
32+
];
33+
34+
/**
35+
* Button selector to close popup with products grid.
36+
*
37+
* @var string
38+
*/
39+
protected $closeButton = '/*//button/span[contains(text(),"Done")]';
40+
41+
/**
42+
* Close grid of added manually products.
43+
*/
44+
public function closeGrid()
45+
{
46+
$this->browser->find($this->closeButton, Locator::SELECTOR_XPATH)->click();
47+
}
48+
}

dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Variations/Config.php

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88

99
use Magento\Backend\Test\Block\Template;
1010
use Magento\Backend\Test\Block\Widget\Tab;
11-
use Magento\Mtf\Client\Element;
1211
use Magento\Mtf\Client\Element\SimpleElement;
1312
use Magento\Mtf\Client\Locator;
13+
use Magento\ConfigurableProduct\Test\Block\Adminhtml\Product\AssociatedProductGrid;
1414

1515
/**
1616
* Adminhtml catalog super product configurable tab.
@@ -83,6 +83,13 @@ class Config extends Tab
8383
*/
8484
protected $variationsContent = '#product_info_tabs_super_config_content';
8585

86+
/**
87+
* Button to add products manually to variations.
88+
*
89+
* @var string
90+
*/
91+
protected $addProductsManuallyButton = '//button[contains(@data-bind, "showManuallyGrid")]';
92+
8693
/**
8794
* Fill variations fieldset.
8895
*
@@ -222,4 +229,42 @@ public function deleteAttributes()
222229
$element->find($this->deleteVariation)->click();
223230
}
224231
}
232+
233+
/**
234+
* Add products manually to configurable variations.
235+
*
236+
* @param array|null $configurableAttributesData
237+
* @return array|string
238+
*/
239+
public function addProductsManually($configurableAttributesData = null)
240+
{
241+
$errors = [];
242+
243+
if (is_null($configurableAttributesData) || !$configurableAttributesData['matrix']) {
244+
$errors[] = sprintf("\nThere are no simples assigned to configurable.");
245+
return $errors;
246+
}
247+
248+
/** @var SimpleElement $content */
249+
$content = $this->_rootElement->find($this->variationsTabContent);
250+
/** @var SimpleElement $addProductsManuallyButton */
251+
$addProductsManuallyButton = $content->find($this->addProductsManuallyButton, Locator::SELECTOR_XPATH);
252+
/** @var AssociatedProductGrid $associatedProductsGrid */
253+
$associatedProductsGrid = $this->getVariationsBlock()->getAssociatedProductGrid();
254+
255+
foreach ($configurableAttributesData['matrix'] as $variation) {
256+
if ($addProductsManuallyButton->isVisible()) {
257+
$addProductsManuallyButton->click();
258+
$this->getTemplateBlock()->waitLoader();
259+
$productSku = $variation['sku'];
260+
$associatedProductsGrid->resetFilter();
261+
$associatedProductsGrid->searchAndSelect(['sku' => $productSku]);
262+
$associatedProductsGrid->closeGrid();
263+
} else {
264+
$errors[] = sprintf("Add Products Manually button is invisible");
265+
}
266+
}
267+
268+
return $errors;
269+
}
225270
}

dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Variations/Config/Matrix.php

Lines changed: 56 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,12 @@
1212
use Magento\Mtf\Client\Element\SimpleElement;
1313

1414
/**
15-
* Class Matrix
16-
* Matrix row form
15+
* Matrix row form.
1716
*/
1817
class Matrix extends Form
1918
{
2019
/**
21-
* Mapping for get optional fields
20+
* Mapping for get optional fields.
2221
*
2322
* @var array
2423
*/
@@ -51,29 +50,29 @@ class Matrix extends Form
5150
];
5251

5352
/**
54-
* Selector for variation row by number
53+
* Selector for variation row by number.
5554
*
5655
* @var string
5756
*/
5857
protected $variationRowByNumber = './/tr[@data-role="row"][%d]';
5958

6059
/**
61-
* Selector for variation row
60+
* Selector for variation row.
6261
*
6362
* @var string
6463
*/
6564
protected $variationRow = './/tr[@data-role="row"]';
6665

6766
/**
68-
* Button for assign product to variation
67+
* Button for assign product to variation.
6968
*
7069
* @var string
7170
*/
7271
protected $configurableAttribute = 'td[data-column="name"] button.action-choose';
7372

7473
// @codingStandardsIgnoreStart
7574
/**
76-
* Selector for row on product grid by product id
75+
* Selector for row on product grid by product id.
7776
*
7877
* @var string
7978
*/
@@ -87,6 +86,28 @@ class Matrix extends Form
8786
*/
8887
protected $template = './ancestor::body';
8988

89+
/**
90+
* Action menu.
91+
*
92+
* @var string
93+
*/
94+
protected $actionMenu = '.action-select';
95+
96+
/**
97+
* Choose a different Product button selector.
98+
*
99+
* @var string
100+
*/
101+
protected $chooseProduct = '[data-bind*="showGrid"]';
102+
103+
/**
104+
* Selector for row on product grid by product id.
105+
*
106+
* @var string
107+
*/
108+
protected $associatedProductGrid =
109+
'[data-bind*="configurable_associated_product_listing.configurable_associated_product_listing"]';
110+
90111
/**
91112
* Fill variations.
92113
*
@@ -102,36 +123,37 @@ public function fillVariations(array $matrix)
102123
Locator::SELECTOR_XPATH
103124
);
104125
ksort($variation);
105-
$mapping = $this->dataMapping($variation);
126+
++$count;
106127

107-
$this->_fill($mapping, $variationRow);
108128
if (isset($variation['configurable_attribute'])) {
109-
$this->assignProduct($variationRow, $variation['configurable_attribute']);
129+
$this->assignProduct($variationRow, $variation['sku']);
130+
continue;
110131
}
111132

112-
++$count;
133+
$mapping = $this->dataMapping($variation);
134+
135+
$this->_fill($mapping, $variationRow);
113136
}
114137
}
115138

116139
/**
117-
* Assign product to variation matrix
140+
* Assign product to variation matrix.
118141
*
119142
* @param SimpleElement $variationRow
120-
* @param int $productId
143+
* @param string $productSku
121144
* @return void
122145
*/
123-
protected function assignProduct(SimpleElement $variationRow, $productId)
146+
protected function assignProduct(SimpleElement $variationRow, $productSku)
124147
{
125-
$variationRow->find($this->configurableAttribute)->click();
148+
$variationRow->find($this->actionMenu)->hover();
149+
$variationRow->find($this->actionMenu)->click();
150+
$variationRow->find($this->chooseProduct)->click();
126151
$this->getTemplateBlock()->waitLoader();
127-
$this->_rootElement->find(
128-
sprintf($this->selectAssociatedProduct, $productId),
129-
Locator::SELECTOR_XPATH
130-
)->click();
152+
$this->getAssociatedProductGrid()->searchAndSelect(['sku' => $productSku]);
131153
}
132154

133155
/**
134-
* Get variations data
156+
* Get variations data.
135157
*
136158
* @return array
137159
*/
@@ -179,8 +201,21 @@ protected function getDataFields(SimpleElement $context, array $fields)
179201
public function getTemplateBlock()
180202
{
181203
return $this->blockFactory->create(
182-
'Magento\Backend\Test\Block\Template',
204+
\Magento\Backend\Test\Block\Template::class,
183205
['element' => $this->_rootElement->find($this->template, Locator::SELECTOR_XPATH)]
184206
);
185207
}
208+
209+
/**
210+
* Get products grid.
211+
*
212+
* @return \Magento\Ui\Test\Block\Adminhtml\DataGrid
213+
*/
214+
public function getAssociatedProductGrid()
215+
{
216+
return $this->blockFactory->create(
217+
\Magento\ConfigurableProduct\Test\Block\Adminhtml\Product\AssociatedProductGrid::class,
218+
['element' => $this->browser->find($this->associatedProductGrid)]
219+
);
220+
}
186221
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?php
2+
/**
3+
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\ConfigurableProduct\Test\Constraint;
7+
8+
use Magento\Catalog\Test\Page\Adminhtml\CatalogProductIndex;
9+
use Magento\ConfigurableProduct\Test\Block\Adminhtml\Product\Edit\Tab\Variations\Config;
10+
use Magento\Mtf\Constraint\AbstractConstraint;
11+
use Magento\Catalog\Test\Page\Adminhtml\CatalogProductEdit;
12+
use Magento\Mtf\Fixture\FixtureInterface;
13+
14+
/**
15+
* Assert that link "Add Products Manually" is shown after all variations are deleted.
16+
*/
17+
class AssertAddProductsManually extends AbstractConstraint
18+
{
19+
/**
20+
* @param FixtureInterface $product
21+
* @param CatalogProductIndex $productGrid
22+
* @param CatalogProductEdit $productPage
23+
* @return void
24+
*/
25+
public function processAssert(
26+
FixtureInterface $product,
27+
CatalogProductIndex $productGrid,
28+
CatalogProductEdit $productPage
29+
) {
30+
$filter = ['sku' => $product->getSku()];
31+
$productGrid->open();
32+
$productGrid->getProductGrid()->searchAndOpen($filter);
33+
34+
/** @var \Magento\Catalog\Test\Block\Adminhtml\Product\ProductForm $productForm */
35+
$productForm = $productPage->getProductForm()->openTab('variations');
36+
/** @var Config $variationsTab */
37+
$variationsTab = $productForm->getTab('variations');
38+
$variationsTab->deleteAttributes();
39+
$configurableAttributesData = $product->getConfigurableAttributesData();
40+
$errors = $variationsTab->addProductsManually($configurableAttributesData);
41+
$productPage->getFormPageActions()->save($product);
42+
43+
\PHPUnit_Framework_Assert::assertEmpty($errors, implode(' ', $errors));
44+
}
45+
46+
/**
47+
* Returns a string representation of the object,
48+
*
49+
* @return string
50+
*/
51+
public function toString()
52+
{
53+
return 'Link "Add Products Manually" is shown after all variations are deleted.';
54+
}
55+
}

dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,5 +135,23 @@
135135
<constraint name="Magento\ConfigurableProduct\Test\Constraint\AssertConfigurableProductInCategory"/>
136136
<constraint name="Magento\ConfigurableProduct\Test\Constraint\AssertConfigurableProductPage" />
137137
</variation>
138+
<variation name="CreateConfigurableProductEntityTestVariation10" summary="Add Products Manualy To Configurable Product" ticketId="MAGETWO-63563">
139+
<data name="description" xsi:type="string">Create product with assigned products to options</data>
140+
<data name="variationsAddType" xsi:type="string">manually</data>
141+
<data name="product/data/url_key" xsi:type="string">configurable-product-%isolation%</data>
142+
<data name="product/data/configurable_attributes_data/dataset" xsi:type="string">two_searchable_options</data>
143+
<data name="product/data/name" xsi:type="string">Configurable Product %isolation%</data>
144+
<data name="product/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
145+
<data name="product/data/price/value" xsi:type="string">100</data>
146+
<data name="product/data/price/dataset" xsi:type="string">default</data>
147+
<data name="product/data/short_description" xsi:type="string">Configurable short description</data>
148+
<data name="product/data/description" xsi:type="string">Configurable Product description %isolation%</data>
149+
<data name="product/data/weight" xsi:type="string">2</data>
150+
<data name="product/data/quantity_and_stock_status/is_in_stock" xsi:type="string">In Stock</data>
151+
<data name="product/data/affected_attribute_set" xsi:type="string">custom_attribute_set_%isolation%</data>
152+
<constraint name="Magento\Catalog\Test\Constraint\AssertProductSaveMessage" />
153+
<constraint name="Magento\ConfigurableProduct\Test\Constraint\AssertAddProductsManually" />
154+
<constraint name="Magento\ConfigurableProduct\Test\Constraint\AssertConfigurableProductForm" />
155+
</variation>
138156
</testCase>
139157
</config>

0 commit comments

Comments
 (0)