Skip to content

Commit b82f079

Browse files
committed
MAGETWO-54361: Configurable variation is displayed on category/product page when is out of stock
- Add functional test;
1 parent 9dcaf2f commit b82f079

File tree

4 files changed

+142
-2
lines changed

4 files changed

+142
-2
lines changed

dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View/CustomOptions.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public function getOptions(FixtureInterface $product)
153153
*
154154
* @return array
155155
*/
156-
protected function getListOptions()
156+
public function getListOptions()
157157
{
158158
$customOptions = [];
159159

@@ -226,7 +226,7 @@ protected function getFileData(SimpleElement $option)
226226
* @param SimpleElement $option
227227
* @return array
228228
*/
229-
protected function getDropdownData(SimpleElement $option)
229+
public function getDropdownData(SimpleElement $option)
230230
{
231231
$select = $option->find($this->selectOption, Locator::SELECTOR_XPATH, 'select');
232232
// Skip "Choose option ..."(option #1)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
/**
3+
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\CatalogInventoryConfigurableProduct\Test\Constraint;
8+
9+
use Magento\Catalog\Test\Page\Product\CatalogProductView;
10+
use Magento\Mtf\Client\BrowserInterface;
11+
use Magento\Mtf\Constraint\AbstractConstraint;
12+
use Magento\ConfigurableProduct\Test\Fixture\ConfigurableProduct;
13+
14+
/**
15+
* Assert that out of stock configurable option is not displayed on product page.
16+
*/
17+
class AssertProductOptionsOnProductPage extends AbstractConstraint
18+
{
19+
/**
20+
* Assert that out of stock configurable option is not displayed on product page on frontend.
21+
*
22+
* @param BrowserInterface $browser
23+
* @param CatalogProductView $catalogProductView
24+
* @param ConfigurableProduct $product
25+
* @param string $outOfStockOption
26+
* @return void
27+
*/
28+
public function processAssert(
29+
BrowserInterface $browser,
30+
CatalogProductView $catalogProductView,
31+
ConfigurableProduct $product,
32+
$outOfStockOption
33+
) {
34+
$browser->open($_ENV['app_frontend_url'] . $product->getUrlKey() . '.html');
35+
$listOptions = $catalogProductView->getConfigurableAttributesBlock()->getListOptions();
36+
$productOptions = [];
37+
foreach ($listOptions as $option) {
38+
$productOptions = $catalogProductView->getConfigurableAttributesBlock()->getDropdownData($option);
39+
}
40+
$option = $this->searchForOption($outOfStockOption, $productOptions);
41+
\PHPUnit_Framework_Assert::assertNull($option, 'Out of stock option is present on product page.');
42+
}
43+
44+
/**
45+
* Search for option.
46+
*
47+
* @param string $needle
48+
* @param array $haystack
49+
* @return int|null|string
50+
*/
51+
private function searchForOption($needle, $haystack) {
52+
foreach ($haystack as $options) {
53+
foreach ($options as $key => $option) {
54+
if ($option['title'] === $needle) {
55+
return $key;
56+
}
57+
}
58+
}
59+
return null;
60+
}
61+
62+
/**
63+
* Returns a string representation of the object.
64+
*
65+
* @return string
66+
*/
67+
public function toString()
68+
{
69+
return "Out of stock configurable option is absent on product page on frontend.";
70+
}
71+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?xml version="1.0" ?>
2+
<!--
3+
/**
4+
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/Magento/Mtf/Repository/etc/repository.xsd">
9+
<repository class="Magento\ConfigurableProduct\Test\Repository\ConfigurableProduct\ConfigurableAttributesData">
10+
11+
<dataset name="three_new_options_with_out_of_stock_product">
12+
<field name="attributes_data" xsi:type="array">
13+
<item name="attribute_key_0" xsi:type="array">
14+
<item name="options" xsi:type="array">
15+
<item name="option_key_0" xsi:type="array">
16+
<item name="label" xsi:type="string">option_key_1_%isolation%</item>
17+
<item name="pricing_value" xsi:type="string">560</item>
18+
<item name="include" xsi:type="string">Yes</item>
19+
</item>
20+
<item name="option_key_1" xsi:type="array">
21+
<item name="label" xsi:type="string">option_key_2_%isolation%</item>
22+
<item name="pricing_value" xsi:type="string">560</item>
23+
<item name="include" xsi:type="string">Yes</item>
24+
</item>
25+
<item name="option_key_2" xsi:type="array">
26+
<item name="label" xsi:type="string">option_key_3_%isolation%</item>
27+
<item name="pricing_value" xsi:type="string">560</item>
28+
<item name="include" xsi:type="string">Yes</item>
29+
</item>
30+
</item>
31+
</item>
32+
</field>
33+
<field name="attributes" xsi:type="array">
34+
<item name="attribute_key_0" xsi:type="string">catalogProductAttribute::sizes_S_M_L</item>
35+
</field>
36+
<field name="products" xsi:type="array">
37+
<item name="attribute_key_0:option_key_0" xsi:type="string">catalogProductSimple::out_of_stock</item>
38+
<item name="attribute_key_0:option_key_1" xsi:type="string">catalogProductSimple::default</item>
39+
<item name="attribute_key_0:option_key_2" xsi:type="string">catalogProductSimple::default</item>
40+
</field>
41+
</dataset>
42+
43+
</repository>
44+
</config>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!--
3+
/**
4+
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd">
9+
<testCase name="Magento\ConfigurableProduct\Test\TestCase\CreateConfigurableProductEntityTest" summary="Create Configurable Product With Out Of Stock Option" ticketId="MAGETWO-64301">
10+
<variation name="CreateConfigurableProductEntityTestVariation11" summary="Create configurable product with one out of stock and several in stock options">
11+
<data name="product/data/url_key" xsi:type="string">configurable-product-%isolation%</data>
12+
<data name="product/data/configurable_attributes_data/dataset" xsi:type="string">three_new_options_with_out_of_stock_product</data>
13+
<data name="product/data/name" xsi:type="string">Configurable Product %isolation%</data>
14+
<data name="product/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
15+
<data name="product/data/price/value" xsi:type="string">1</data>
16+
<data name="product/data/weight" xsi:type="string">2</data>
17+
<data name="product/data/category_ids/dataset" xsi:type="string">default_subcategory</data>
18+
<data name="product/data/short_description" xsi:type="string">Configurable short description</data>
19+
<data name="product/data/description" xsi:type="string">Configurable Product description %isolation%</data>
20+
<data name="outOfStockOption" xsi:type="string">SIZE_S</data>
21+
<constraint name="Magento\Catalog\Test\Constraint\AssertProductSaveMessage" />
22+
<constraint name="Magento\CatalogInventoryConfigurableProduct\Test\Constraint\AssertProductOptionsOnProductPage" />
23+
</variation>
24+
</testCase>
25+
</config>

0 commit comments

Comments
 (0)