From c7d58927f294a5b0053ab643f37dfd59c49ae40f Mon Sep 17 00:00:00 2001 From: Maksym Aposov <maposov@ebay.com> Date: Mon, 7 Dec 2015 04:16:35 +0200 Subject: [PATCH] MAGETWO-45256: [TD] Fix functional tests related to Configurable products --- .htaccess | 3 + .../Test/Block/Product/View.php | 1 + .../Product/View/ConfigurableOptions.php | 57 ++++++++++++++++--- .../AssertConfigurableProductPage.php | 38 +++++++++---- .../UpdateConfigurableProductEntityTest.xml | 5 +- .../UpdateConfigurableProductStep.php | 1 - 6 files changed, 84 insertions(+), 21 deletions(-) diff --git a/.htaccess b/.htaccess index 50c06d4e3ae..33c76b7a256 100644 --- a/.htaccess +++ b/.htaccess @@ -39,6 +39,9 @@ php_value memory_limit 768M php_value max_execution_time 18000 + php_value session.gc_probability 0 + php_value session.gc_divisor 100000000 + php_value session.save_path /var/tmp ############################################ ## disable automatic session start diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View.php index ea17b756ba5..567192cf279 100644 --- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View.php +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View.php @@ -78,6 +78,7 @@ class View extends \Magento\Catalog\Test\Block\Product\View { $options = [ 'configurable_options' => $this->getConfigurableOptionsBlock()->getOptions($product), + 'matrix' => $this->getConfigurableOptionsBlock()->getOptionsPrices($product) ]; $options += parent::getOptions($product); diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View/ConfigurableOptions.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View/ConfigurableOptions.php index 61dee6b3552..14ba9f7c020 100644 --- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View/ConfigurableOptions.php +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View/ConfigurableOptions.php @@ -68,10 +68,35 @@ class ConfigurableOptions extends CustomOptions ? 'Yes' : 'No'; - foreach ($optionData['options'] as $key => $value) { - $optionData['options'][$key]['price'] = $this->getOptionPrice($title, $value['title']); - } $result[$title] = $optionData; + // Select first attribute option to be able proceed with next attribute + $this->selectOption($title, $optionData['options'][0]['title']); + } + + return $result; + } + + /** + * Get configurable attributes options prices + * + * @param FixtureInterface $product + * @return array + */ + public function getOptionsPrices(FixtureInterface $product) + { + /** @var ConfigurableProduct $product */ + $attributesData = $product->hasData('configurable_attributes_data') + ? $product->getConfigurableAttributesData()['attributes_data'] + : []; + $productVariations = $product->hasData('configurable_attributes_data') + ? $product->getConfigurableAttributesData()['matrix'] + : []; + $productVariations = array_keys($productVariations); + + $result = []; + foreach ($productVariations as $variation) { + $variationOptions = explode(' ', $variation); + $result[$variation]['price'] = $this->getOptionPrice($variationOptions, $attributesData); } return $result; @@ -80,14 +105,20 @@ class ConfigurableOptions extends CustomOptions /** * Get option price * - * @param $attributeTitle - * @param $optionTitle + * @param array $variationOptions + * @param array $attributesData * @return null|string */ - protected function getOptionPrice($attributeTitle, $optionTitle) + protected function getOptionPrice($variationOptions, $attributesData) { - $this->_rootElement->find(sprintf($this->optionSelector, $attributeTitle), Locator::SELECTOR_XPATH, 'select') - ->setValue($optionTitle); + //Select all options specified in variation + foreach ($variationOptions as $variationSelection) { + list ($attribute, $option) = explode(':', $variationSelection); + $attributeTitle = $attributesData[$attribute]['label']; + $optionTitle = $attributesData[$attribute]['options'][$option]['label']; + $this->selectOption($attributeTitle, $optionTitle); + } + $priceBlock = $this->getPriceBlock(); $price = ($priceBlock->isOldPriceVisible()) ? $priceBlock->getOldPrice() : $priceBlock->getPrice(); return $price; @@ -105,4 +136,14 @@ class ConfigurableOptions extends CustomOptions ['element' => $this->_rootElement->find($this->priceBlock, Locator::SELECTOR_XPATH)] ); } + + /** + * @param string $attributeTitle + * @param string $optionTitle + */ + protected function selectOption($attributeTitle, $optionTitle) + { + $this->_rootElement->find(sprintf($this->optionSelector, $attributeTitle), Locator::SELECTOR_XPATH, 'select') + ->setValue($optionTitle); + } } diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertConfigurableProductPage.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertConfigurableProductPage.php index a1f917925dc..f6fa5eac2bf 100644 --- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertConfigurableProductPage.php +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertConfigurableProductPage.php @@ -58,11 +58,11 @@ class AssertConfigurableProductPage extends AssertProductPage */ protected function verifyAttributes() { - $attributesData = $this->product->getConfigurableAttributesData()['attributes_data']; + $attributesData = $this->product->getConfigurableAttributesData(); $configurableOptions = []; - $formOptions = $this->productView->getOptions($this->product)['configurable_options']; + $formOptions = $this->productView->getOptions($this->product); - foreach ($attributesData as $attributeKey => $attributeData) { + foreach ($attributesData['attributes_data'] as $attributeKey => $attributeData) { $optionData = [ 'title' => $attributeData['frontend_label'], 'type' => $attributeData['frontend_input'], @@ -70,11 +70,10 @@ class AssertConfigurableProductPage extends AssertProductPage ]; foreach ($attributeData['options'] as $optionKey => $option) { - $price = $option['pricing_value']; - $optionData['options'][$optionKey] = [ 'title' => $option['label'], - 'price' => number_format($price, 2), + //Mock price validation + 'price' => 0 ]; } @@ -86,15 +85,34 @@ class AssertConfigurableProductPage extends AssertProductPage foreach ($configurableOptions as $key => $configurableOption) { $configurableOptions[$key] = $this->sortDataByPath($configurableOption, 'options::title'); } - $formOptions = $this->sortDataByPath($formOptions, '::title'); - foreach ($formOptions as $key => $formOption) { - $formOptions[$key] = $this->sortDataByPath($formOption, 'options::title'); + $configurableFormOptions = $formOptions['configurable_options']; + $configurableFormOptions = $this->sortDataByPath($configurableFormOptions, '::title'); + foreach ($configurableFormOptions as $key => $formOption) { + $configurableFormOptions[$key] = $this->sortDataByPath($formOption, 'options::title'); } - $errors = $this->verifyData($configurableOptions, $formOptions, true, false); + //Verify Attribute and options + $errors = $this->verifyData($configurableOptions, $configurableFormOptions, true, false); + + //Verify Attribute options prices + $errors += $this->verifyAttributesMatrix($formOptions['matrix'], $attributesData['matrix']); return empty($errors) ? null : $this->prepareErrors($errors, 'Error configurable options:'); } + /** + * Verify displayed product attributes prices on product page(front-end) equals passed from fixture + * + * @return string|null + */ + protected function verifyAttributesMatrix($variationsMatrix, $generatedMatrix) + { + $allowedKeys = ['price']; + foreach ($generatedMatrix as $key => $value) { + $generatedMatrix[$key] = array_intersect_key($value, array_flip($allowedKeys)); + } + return $this->verifyData($generatedMatrix, $variationsMatrix, true, false); + } + /** * Returns lowest possible price of configurable product. * diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/UpdateConfigurableProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/UpdateConfigurableProductEntityTest.xml index 543ffade21f..681d453f3b3 100644 --- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/UpdateConfigurableProductEntityTest.xml +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/UpdateConfigurableProductEntityTest.xml @@ -14,10 +14,11 @@ <data name="updatedProduct/data/url_key" xsi:type="string">configurable-product-%isolation%</data> <data name="updatedProduct/data/configurable_attributes_data/dataset" xsi:type="string">one_new_options</data> <data name="updatedProduct/data/checkout_data/dataset" xsi:type="string">configurable_two_attributes</data> - <data name="updatedProduct/data/checkout_data/cartItem/price" xsi:type="string">153</data> + <data name="updatedProduct/data/checkout_data/cartItem/price" xsi:type="string">42</data> <data name="updatedProduct/data/name" xsi:type="string">Configurable Product %isolation%</data> <data name="updatedProduct/data/sku" xsi:type="string">configurable_sku_%isolation%</data> - <data name="updatedProduct/data/price/value" xsi:type="string">99</data> + <!--lowest price of option--> + <data name="updatedProduct/data/price/value" xsi:type="string">40</data> <data name="updatedProduct/data/category_ids/dataset" xsi:type="string">default_subcategory</data> <data name="updatedProduct/data/short_description" xsi:type="string">Configurable short description</data> <data name="updatedProduct/data/description" xsi:type="string">Configurable Product description %isolation%</data> diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestStep/UpdateConfigurableProductStep.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestStep/UpdateConfigurableProductStep.php index 1381828eae8..d7c19a21e48 100644 --- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestStep/UpdateConfigurableProductStep.php +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestStep/UpdateConfigurableProductStep.php @@ -134,7 +134,6 @@ class UpdateConfigurableProductStep implements TestStepInterface $dataProduct['configurable_attributes_data'] = [ 'attributes_data' => $attributesData, - 'matrix' => $oldMatrix, ]; if ($product->hasData('category_ids')) { -- GitLab