Skip to content

Commit db6c1c6

Browse files
committed
MAGETWO-88178: Create Functional Test to verify OOS Configuration product Option not showing in Layered Navigation
1 parent f6a0a90 commit db6c1c6

File tree

8 files changed

+287
-6
lines changed

8 files changed

+287
-6
lines changed

dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductAttribute.xml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,5 +335,32 @@
335335
<field name="is_required" xsi:type="string">No</field>
336336
<field name="is_used_for_promo_rules" xsi:type="string">Yes</field>
337337
</dataset>
338+
339+
<dataset name="sizes_S_M_L_Filterable">
340+
<field name="frontend_label" xsi:type="string">size_%isolation%</field>
341+
<field name="attribute_code" xsi:type="string">size_%isolation%</field>
342+
<field name="frontend_input" xsi:type="string">Dropdown</field>
343+
<field name="is_required" xsi:type="string">No</field>
344+
<field name="is_searchable" xsi:type="string">Yes</field>
345+
<field name="is_filterable" xsi:type="string">Filterable (with results)</field>
346+
<field name="is_filterable_in_search" xsi:type="string">Yes</field>
347+
<field name="options" xsi:type="array">
348+
<item name="0" xsi:type="array">
349+
<item name="is_default" xsi:type="string">No</item>
350+
<item name="admin" xsi:type="string">SIZE_S</item>
351+
<item name="view" xsi:type="string">SIZE_S</item>
352+
</item>
353+
<item name="1" xsi:type="array">
354+
<item name="is_default" xsi:type="string">No</item>
355+
<item name="admin" xsi:type="string">SIZE_M</item>
356+
<item name="view" xsi:type="string">SIZE_M</item>
357+
</item>
358+
<item name="2" xsi:type="array">
359+
<item name="is_default" xsi:type="string">No</item>
360+
<item name="admin" xsi:type="string">SIZE_L</item>
361+
<item name="view" xsi:type="string">SIZE_L</item>
362+
</item>
363+
</field>
364+
</dataset>
338365
</repository>
339366
</config>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\ConfigurableProduct\Test\Constraint;
8+
9+
use Magento\Catalog\Test\Page\Category\CatalogCategoryView;
10+
use Magento\Cms\Test\Page\CmsIndex;
11+
use Magento\Mtf\Constraint\AbstractConstraint;
12+
use Magento\Mtf\Fixture\FixtureFactory;
13+
use Magento\Mtf\Fixture\InjectableFixture;
14+
15+
/**
16+
* Check whether OOS product attribute options for configurable product are not displayed
17+
* on frontend in Layered navigation.
18+
*/
19+
class AssertConfigurableProductAttributeOptionNotInLayeredNavigation extends AbstractConstraint
20+
{
21+
/**
22+
* Check whether the OOS attribute options are not displayed on the frontend in Layered navigation.
23+
*
24+
* @param CatalogCategoryView $catalogCategoryView
25+
* @param InjectableFixture $product
26+
* @param CmsIndex $cmsIndex
27+
* @param FixtureFactory $fixtureFactory
28+
* @param string $outOfStockOption
29+
* @return void
30+
*/
31+
public function processAssert(
32+
CatalogCategoryView $catalogCategoryView,
33+
InjectableFixture $product,
34+
CmsIndex $cmsIndex,
35+
FixtureFactory $fixtureFactory,
36+
$outOfStockOption
37+
) {
38+
$fixtureFactory->createByCode(
39+
'catalogProductSimple',
40+
[
41+
'dataset' => 'product_with_category_with_anchor',
42+
'data' => [
43+
'category_ids' => [
44+
'dataset' => null,
45+
'category' => $product->getDataFieldConfig('category_ids')['source']->getCategories()[0],
46+
],
47+
],
48+
]
49+
)->persist();
50+
51+
$cmsIndex->open()->getTopmenu()->selectCategoryByName($product->getCategoryIds()[0]);
52+
53+
$attributesData = $product->hasData('configurable_attributes_data')
54+
? $product->getConfigurableAttributesData()['attributes_data']
55+
: [];
56+
57+
$attributeData = !empty($attributesData) ? array_shift($attributesData) : [];
58+
$frontendAttributeLabel = !empty($attributeData) && isset($attributeData['frontend_label'])
59+
? $attributeData['frontend_label']
60+
: '';
61+
62+
$filters = $catalogCategoryView->getLayeredNavigationBlock()->getFilterContents($frontendAttributeLabel);
63+
64+
\PHPUnit\Framework\Assert::assertFalse(
65+
in_array(strtoupper($outOfStockOption), $filters),
66+
'Out of Stock attribute option is present in layered navigation on category page.'
67+
);
68+
}
69+
70+
/**
71+
* @inheritdoc
72+
*/
73+
public function toString()
74+
{
75+
return 'Out of Stock attribute option is absent in layered navigation on category page.';
76+
}
77+
}

dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct.xml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,5 +1115,38 @@
11151115
</item>
11161116
</field>
11171117
</dataset>
1118+
1119+
<dataset name="product_with_3_sizes">
1120+
<field name="name" xsi:type="string">Configurable product with sizes %isolation%</field>
1121+
<field name="sku" xsi:type="string">sku_configurable_product_with_sizes_%isolation%</field>
1122+
<field name="product_has_weight" xsi:type="string">This item has weight</field>
1123+
<field name="weight" xsi:type="string">2</field>
1124+
<field name="status" xsi:type="string">Yes</field>
1125+
<field name="visibility" xsi:type="string">Catalog, Search</field>
1126+
<field name="tax_class_id" xsi:type="array">
1127+
<item name="dataset" xsi:type="string">taxable_goods</item>
1128+
</field>
1129+
<field name="url_key" xsi:type="string">configurable-product-with-size-%isolation%</field>
1130+
<field name="configurable_attributes_data" xsi:type="array">
1131+
<item name="dataset" xsi:type="string">size_3_items</item>
1132+
</field>
1133+
<field name="quantity_and_stock_status" xsi:type="array">
1134+
<item name="is_in_stock" xsi:type="string">In Stock</item>
1135+
</field>
1136+
<field name="website_ids" xsi:type="array">
1137+
<item name="0" xsi:type="array">
1138+
<item name="dataset" xsi:type="string">default</item>
1139+
</item>
1140+
</field>
1141+
<field name="category_ids" xsi:type="array">
1142+
<item name="dataset" xsi:type="string">default_anchor_subcategory</item>
1143+
</field>
1144+
<field name="attribute_set_id" xsi:type="array">
1145+
<item name="dataset" xsi:type="string">default</item>
1146+
</field>
1147+
<field name="price" xsi:type="array">
1148+
<item name="value" xsi:type="string">170</item>
1149+
</field>
1150+
</dataset>
11181151
</repository>
11191152
</config>

dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct/ConfigurableAttributesData.xml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1166,5 +1166,43 @@
11661166
</item>
11671167
</field>
11681168
</dataset>
1169+
1170+
<dataset name="size_3_items">
1171+
<field name="attributes_data" xsi:type="array">
1172+
<item name="attribute_key_0" xsi:type="array">
1173+
<item name="options" xsi:type="array">
1174+
<item name="option_key_0" xsi:type="array">
1175+
<item name="pricing_value" xsi:type="string">40.00</item>
1176+
<item name="include" xsi:type="string">Yes</item>
1177+
</item>
1178+
<item name="option_key_1" xsi:type="array">
1179+
<item name="pricing_value" xsi:type="string">42.00</item>
1180+
<item name="include" xsi:type="string">Yes</item>
1181+
</item>
1182+
<item name="option_key_2" xsi:type="array">
1183+
<item name="pricing_value" xsi:type="string">44.00</item>
1184+
<item name="include" xsi:type="string">Yes</item>
1185+
</item>
1186+
</item>
1187+
</item>
1188+
</field>
1189+
<field name="attributes" xsi:type="array">
1190+
<item name="attribute_key_0" xsi:type="string">catalogProductAttribute::sizes_S_M_L_Filterable</item>
1191+
</field>
1192+
<field name="matrix" xsi:type="array">
1193+
<item name="attribute_key_0:option_key_0" xsi:type="array">
1194+
<item name="qty" xsi:type="string">100</item>
1195+
<item name="weight" xsi:type="string">1</item>
1196+
</item>
1197+
<item name="attribute_key_0:option_key_1" xsi:type="array">
1198+
<item name="qty" xsi:type="string">100</item>
1199+
<item name="weight" xsi:type="string">1</item>
1200+
</item>
1201+
<item name="attribute_key_0:option_key_2" xsi:type="array">
1202+
<item name="qty" xsi:type="string">100</item>
1203+
<item name="weight" xsi:type="string">1</item>
1204+
</item>
1205+
</field>
1206+
</dataset>
11691207
</repository>
11701208
</config>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\ConfigurableProduct\Test\TestCase;
8+
9+
use Magento\Mtf\TestCase\Scenario;
10+
11+
/**
12+
* Preconditions:
13+
1. Choose an attribute for configurable options or create it and set attribute properties to
14+
2. is_filterable = Filterable (with results)
15+
3. is_filterable_in_search = Yes
16+
*
17+
* Steps:
18+
* 1. Log in to Admin.
19+
* 2. Open Catalog -> Products.
20+
* 3. Create a configurable product with an attribute from preconditions.
21+
* 4. Search and open child of configurable product from preconditions.
22+
* 4. Fill in data according to dataset.
23+
* 5. Save product.
24+
* 6. Perform all assertions.
25+
*
26+
* @group Configurable_Product
27+
* @ZephyrId MAGETWO-89751
28+
*/
29+
class VerifyConfigurableProductLayeredNavigationTest extends Scenario
30+
{
31+
/**
32+
* Verify configurable product options in layered navigation.
33+
*
34+
* @return array
35+
*/
36+
public function test()
37+
{
38+
$this->executeScenario();
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!--
3+
/**
4+
* Copyright © 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\VerifyConfigurableProductLayeredNavigationTest" summary="Verify OOS option configurable product in Layered Navigation on storefront">
10+
<variation name="VerifyConfigurableProductEntityPriceTestVariation2" summary="Verify the out of stock configurable attribute option doesn't show in Layered navigation" ticketId="MAGETWO-89745">
11+
<data name="product" xsi:type="string">configurableProduct::product_with_3_sizes</data>
12+
<data name="productUpdate/childProductUpdate" xsi:type="array">
13+
<item name="data" xsi:type="array">
14+
<item name="quantity_and_stock_status" xsi:type="array">
15+
<item name="is_in_stock" xsi:type="string">Out of Stock</item>
16+
</item>
17+
</item>
18+
</data>
19+
<data name="productUpdate/optionNumber" xsi:type="string">1</data>
20+
<data name="outOfStockOption" xsi:type="string">SIZE_S</data>
21+
<constraint name="Magento\ConfigurableProduct\Test\Constraint\AssertConfigurableProductAttributeOptionInLayeredNavigation" />
22+
</variation>
23+
</testCase>
24+
</config>

dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/etc/testcase.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,8 @@
1717
<step name="createProduct" module="Magento_Catalog" next="updateChildProduct" />
1818
<step name="updateChildProduct" module="Magento_ConfigurableProduct" />
1919
</scenario>
20+
<scenario name="VerifyConfigurableProductLayeredNavigationTest" firstStep="createProduct">
21+
<step name="createProduct" module="Magento_Catalog" next="updateChildProduct" />
22+
<step name="updateChildProduct" module="Magento_ConfigurableProduct" />
23+
</scenario>
2024
</config>

dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Block/Navigation.php

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,8 @@ public function getFilters()
102102
*/
103103
public function applyFilter($filter, $linkPattern)
104104
{
105-
$expandFilterButton = sprintf($this->optionTitle, $filter);
106105
$links = sprintf($this->filterLink, $filter);
107-
108-
$this->waitForElementVisible($this->loadedNarrowByList);
109-
if (!$this->_rootElement->find($links, Locator::SELECTOR_XPATH)->isVisible()) {
110-
$this->_rootElement->find($expandFilterButton, Locator::SELECTOR_XPATH)->click();
111-
}
106+
$this->openFilterContainer($filter, $links);
112107

113108
$links = $this->_rootElement->getElements($links, Locator::SELECTOR_XPATH);
114109
foreach ($links as $link) {
@@ -134,4 +129,47 @@ public function isCategoryVisible(Category $category, $qty)
134129
Locator::SELECTOR_XPATH
135130
)->isVisible();
136131
}
132+
133+
/**
134+
* Get Layered Navigation filter options.
135+
*
136+
* @param string $attributeLabel
137+
* @return array
138+
*/
139+
public function getFilterContents($attributeLabel)
140+
{
141+
$data = [];
142+
143+
if (trim($attributeLabel) === '') {
144+
return $data;
145+
}
146+
147+
$link = sprintf($this->filterLink, $attributeLabel);
148+
$this->openFilterContainer($attributeLabel, $link);
149+
150+
$optionContents = $this->_rootElement->getElements($link, Locator::SELECTOR_XPATH);
151+
152+
foreach ($optionContents as $optionContent) {
153+
$data[] = trim(strtoupper($optionContent->getText()));
154+
}
155+
156+
return $data;
157+
}
158+
159+
/**
160+
* Open filter container.
161+
*
162+
* @param string $filter
163+
* @param string $link
164+
* @return void
165+
*/
166+
private function openFilterContainer($filter, $link)
167+
{
168+
$expandFilterButton = sprintf($this->optionTitle, $filter);
169+
170+
$this->waitForElementVisible($this->loadedNarrowByList);
171+
if (!$this->_rootElement->find($link, Locator::SELECTOR_XPATH)->isVisible()) {
172+
$this->_rootElement->find($expandFilterButton, Locator::SELECTOR_XPATH)->click();
173+
}
174+
}
137175
}

0 commit comments

Comments
 (0)