diff --git a/dev/tests/functional/composer.json b/dev/tests/functional/composer.json index 6514ced02709b700ad494d85a0b8dced6a798737..5f941b700f5402a510723d4e33ae4bfb570b8467 100644 --- a/dev/tests/functional/composer.json +++ b/dev/tests/functional/composer.json @@ -1,6 +1,6 @@ { "require": { - "magento/mtf": "1.0.0-rc33", + "magento/mtf": "1.0.0-rc35", "php": "~5.5.0|~5.6.0|~7.0.0", "phpunit/phpunit": "4.1.0", "phpunit/phpunit-selenium": ">=1.2" diff --git a/dev/tests/functional/etc/events.xml b/dev/tests/functional/etc/events.xml index 76fddfc79e67510e30f9d1b773dd16bf52214948..e838968e1c2a20a92b0431055088cf24f249aded 100644 --- a/dev/tests/functional/etc/events.xml +++ b/dev/tests/functional/etc/events.xml @@ -6,4 +6,9 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="events.xsd"> + <preset name="base"> + <observer class="Magento\Mtf\System\Observer\WebapiResponse"> + <tag name="webapi_failed"/> + </observer> + </preset> </config> diff --git a/dev/tests/functional/lib/Magento/Mtf/System/Observer/WebapiResponse.php b/dev/tests/functional/lib/Magento/Mtf/System/Observer/WebapiResponse.php new file mode 100644 index 0000000000000000000000000000000000000000..2956d7c0269bde89c4b25d89734bbd535497ec7d --- /dev/null +++ b/dev/tests/functional/lib/Magento/Mtf/System/Observer/WebapiResponse.php @@ -0,0 +1,32 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Mtf\System\Observer; + +use Magento\Mtf\System\Event\Event; + +/** + * Observer for obtaining response of web api handler. + */ +class WebapiResponse extends AbstractObserver +{ + /** + * File name of response source. + */ + const FILE_NAME = 'webapi_response.log'; + + /** + * Collect response source artifact to storage. + * + * @param Event $event + * @return void + */ + public function process(Event $event) + { + $directory = $this->createDestinationDirectory('webapi-response'); + $this->logger->log(json_encode($event->getSubjects()[0]), $directory . '/' . $event->getIdentifier() . '.json'); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Authorizenet/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Authorizenet/Test/TestCase/OnePageCheckoutTest.xml index 1ccc6bde71ecff23979d44f995e55f7300d3680d..74541d4f5662e088e0aee224a14701b6ed7c4035 100644 --- a/dev/tests/functional/tests/app/Magento/Authorizenet/Test/TestCase/OnePageCheckoutTest.xml +++ b/dev/tests/functional/tests/app/Magento/Authorizenet/Test/TestCase/OnePageCheckoutTest.xml @@ -7,7 +7,7 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> <testCase name="Magento\Checkout\Test\TestCase\OnePageCheckoutTest"> - <variation name="OnePageCheckoutTestVariation17" summary="Check Out as a Guest with Authorize.Net and Offline Shipping method" ticketId="MAGETWO-12832"> + <variation name="OnePageCheckoutAuthorizenetTestVariation1" summary="Check Out as a Guest with Authorize.Net and Offline Shipping method" ticketId="MAGETWO-12832"> <data name="products" xsi:type="string">catalogProductSimple::product_10_dollar, configurableProduct::with_one_option, bundleProduct::bundle_fixed_100_dollar_product</data> <data name="taxRule" xsi:type="string">us_ca_ny_rule</data> <data name="customer/dataset" xsi:type="string">default</data> diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache/Additional.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache/Additional.php index 605afd986421b6a62248c9c0719f59fd47d41402..291174b60bbd43f125ac243fba8b5e3a30c74518 100644 --- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache/Additional.php +++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache/Additional.php @@ -19,7 +19,7 @@ class Additional extends Block * * @var string */ - protected $flushButton = './/div/button[normalize-space(.)= "%s"]'; + protected $flushButton = './/button[normalize-space(.)= "%s"]'; /** * Flush cache in 'Additional Cache Management'. diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml index ecfd99d31c1e93bfb1533143b41672d6aeae4a64..bb9fc78299f5ddecdcc0f1baa66690879baef977 100644 --- a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml +++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml @@ -9,6 +9,6 @@ <page name="AdminCache" area="Adminhtml" mca="admin/cache/" module="Magento_Backend"> <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages .messages" strategy="css selector"/> <block name="actionsBlock" class="Magento\Backend\Test\Block\Cache" locator="div.page-actions" strategy="css selector"/> - <block name="additionalBlock" class="Magento\Backend\Test\Block\Cache\Additional" locator="div.fieldset.additional-cache-management" strategy="css selector"/> + <block name="additionalBlock" class="Magento\Backend\Test\Block\Cache\Additional" locator="div.additional-cache-management" strategy="css selector"/> </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/Repository/BundleProduct.xml b/dev/tests/functional/tests/app/Magento/Bundle/Test/Repository/BundleProduct.xml index 6a9b0ac7f9b8509c077a9ecb509643f4015966a0..6912520e995e2c9f315df8b7793dfd1b5e85f1d4 100644 --- a/dev/tests/functional/tests/app/Magento/Bundle/Test/Repository/BundleProduct.xml +++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/Repository/BundleProduct.xml @@ -7,50 +7,23 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/Magento/Mtf/Repository/etc/repository.xsd"> <repository class="Magento\Bundle\Test\Repository\BundleProduct"> - <dataset name="BundleDynamic_sku_1073507449"> - <field name="sku" xsi:type="string">BundleDynamic_sku_10735074493</field> - <field name="name" xsi:type="string">BundleDynamic 1073507449</field> + <dataset name="default"> + <field name="name" xsi:type="string">Bundle dynamic product %isolation%</field> + <field name="url_key" xsi:type="string">bundle-dynamic-product-%isolation%</field> + <field name="sku" xsi:type="string">sku_bundle_dynamic_product_%isolation%</field> + <field name="sku_type" xsi:type="string">Dynamic</field> + <field name="price_type" xsi:type="string">Dynamic</field> <field name="price" xsi:type="array"> - <item name="price_from" xsi:type="string">1</item> - <item name="price_to" xsi:type="string">2</item> - </field> - <field name="short_description" xsi:type="string" /> - <field name="description" xsi:type="string"/> - <field name="tax_class_id" xsi:type="array"> - <item name="dataset" xsi:type="string">taxable_goods</item> + <item name="dataset" xsi:type="string">bundle_dynamic_with_category</item> </field> - <field name="sku_type" xsi:type="string">0</field> - <field name="price_type" xsi:type="string">0</field> - <field name="weight_type" xsi:type="string">0</field> - <field name="status" xsi:type="string">Product online</field> - <field name="shipment_type" xsi:type="string">1</field> - <field name="url_key" xsi:type="string">bundle-dynamic-product-%isolation%</field> - <field name="mtf_dataset_name" xsi:type="string">BundleDynamic_sku_1073507449</field> <field name="website_ids" xsi:type="array"> <item name="0" xsi:type="string">Main Website</item> </field> - </dataset> - - <dataset name="BundleDynamic_sku_215249172"> - <field name="sku" xsi:type="string">BundleDynamic_sku_215249172</field> - <field name="name" xsi:type="string">BundleDynamic 215249172</field> - <field name="price" xsi:type="array"> - <item name="price_from" xsi:type="string">3</item> - <item name="price_to" xsi:type="string">4</item> - </field> - <field name="short_description" xsi:type="string" /> - <field name="description" xsi:type="string" /> - <field name="tax_class_id" xsi:type="array"> - <item name="dataset" xsi:type="string">taxable_goods</item> + <field name="bundle_selections" xsi:type="array"> + <item name="dataset" xsi:type="string">default_dynamic</item> </field> - <field name="sku_type" xsi:type="string">0</field> - <field name="weight_type" xsi:type="string">0</field> - <field name="price_type" xsi:type="string">0</field> - <field name="shipment_type" xsi:type="string">1</field> - <field name="url_key" xsi:type="string">bundle-dynamic-product-%isolation%</field> - <field name="mtf_dataset_name" xsi:type="string">BundleDynamic_sku_215249172</field> - <field name="website_ids" xsi:type="array"> - <item name="0" xsi:type="string">Main Website</item> + <field name="checkout_data" xsi:type="array"> + <item name="dataset" xsi:type="string">bundle_default</item> </field> </dataset> diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/DeleteProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/DeleteProductEntityTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..f86da3b3a9d699120caaeba904340e2e463d03fe --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/DeleteProductEntityTest.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/variations.xsd"> + <testCase name="Magento\Catalog\Test\TestCase\Product\DeleteProductEntityTest"> + <variation name="DeleteProductEntityTestVariation4"> + <data name="products" xsi:type="string">bundleProduct::bundle_dynamic_product</data> + <data name="isRequired" xsi:type="string">Yes</data> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductSuccessDeleteMessage" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductNotInGrid" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductIsNotDisplayingOnFrontend" /> + </variation> + <variation name="DeleteProductEntityTestVariation5"> + <data name="products" xsi:type="string">bundleProduct::bundle_fixed_product</data> + <data name="isRequired" xsi:type="string">No</data> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductSuccessDeleteMessage" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductNotInGrid" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductIsNotDisplayingOnFrontend" /> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/DeleteProductFromMiniShoppingCartTest.xml b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/DeleteProductFromMiniShoppingCartTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..475ac884e5d4ba04d217c016c3baad7f5cd42bb8 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/DeleteProductFromMiniShoppingCartTest.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> + <testCase name="Magento\Checkout\Test\TestCase\DeleteProductFromMiniShoppingCartTest" summary="Delete Bundle Product from Mini Shopping Cart" ticketId="MAGETWO-29104"> + <variation name="DeleteBundleProductFromMiniShoppingCartTestVariation"> + <data name="products" xsi:type="string">bundleProduct::default</data> + <data name="deletedProductIndex" xsi:type="string">0</data> + <constraint name="Magento\Checkout\Test\Constraint\AssertCartIsEmpty" /> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Price.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Price.php index 20d3e9d4f7cac01adb7bbebe555fcee453fb25fa..c8b8264673ca2e00d2783bc6eba98b42a6852d20 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Price.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Price.php @@ -27,7 +27,7 @@ class Price extends \Magento\Catalog\Test\Block\AbstractPriceBlock 'selector' => '.special-price .price', ], 'old_price' => [ - 'selector' => '.old-price .price-wrapper', + 'selector' => '.old-price .price-wrapper ', ], 'price_from' => [ 'selector' => '.price-from .price', diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php index 1002ab12091aa4284f5d745939cf5fb3c2204b24..95af5e8d573b95ae0998c6049ef8439077fbf474 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php @@ -140,6 +140,13 @@ class View extends AbstractConfigureBlock */ protected $successMessage = '[data-ui-id$=message-success]'; + /** + * Locator for page with ajax loading state. + * + * @var string + */ + protected $ajaxLoading = 'body.ajax-loading'; + /** * Get block price. * @@ -393,4 +400,14 @@ class View extends AbstractConfigureBlock { $this->_rootElement->find(sprintf($this->tabSelector, $name), Locator::SELECTOR_XPATH)->click(); } + + /** + * Wait loading block. + * + * @return void + */ + public function waitLoader() + { + $this->waitForElementNotVisible($this->ajaxLoading); + } } diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeOptionsOnProductForm.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeOptionsOnProductForm.php index 60f0df41ed6bb3691ce512d632457720494b3e85..ec2f9acaaad0f1593d516e047e36dfad9c60997c 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeOptionsOnProductForm.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeOptionsOnProductForm.php @@ -6,28 +6,57 @@ namespace Magento\Catalog\Test\Constraint; +use Magento\Mtf\Fixture\InjectableFixture; use Magento\Mtf\Constraint\AbstractConstraint; +use Magento\Catalog\Test\Fixture\CatalogProductAttribute; +use Magento\Catalog\Test\Page\Adminhtml\CatalogProductEdit; +use Magento\Catalog\Test\Page\Adminhtml\CatalogProductIndex; /** - * Class AssertAttributeOptionsOnProductForm + * Assert all product attribute options on product creation form. */ class AssertAttributeOptionsOnProductForm extends AbstractConstraint { /** * Assert all product attribute options on product creation form. * + * @param InjectableFixture $product + * @param CatalogProductIndex $productGrid + * @param CatalogProductAttribute $attribute + * @param CatalogProductEdit $productEdit * @return void */ - public function processAssert() - { - // + public function processAssert( + InjectableFixture $product, + CatalogProductIndex $productGrid, + CatalogProductAttribute $attribute, + CatalogProductEdit $productEdit + ) { + $productGrid->open(); + $productGrid->getProductGrid()->searchAndOpen(['sku' => $product->getSku()]); + + $attributeOptions = $attribute->getOptions(); + $options[] = $attribute->getFrontendLabel(); + foreach ($attributeOptions as $option) { + $options[] = $option['admin']; + } + $productAttributeOptions = $productEdit->getProductForm()->getAttributeElement($attribute)->getText(); + $productOptions = explode("\n", $productAttributeOptions); + $diff = array_diff($options, $productOptions); + + \PHPUnit_Framework_Assert::assertTrue( + empty($diff), + "Products attribute options are absent on product form: " . implode(', ', $diff) + ); } /** + * Returns a string representation of the object. + * * @return string */ public function toString() { - // + return 'All product attribute options are visible on product creation form.'; } } diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSearchableByLabel.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSearchableByLabel.php deleted file mode 100644 index fc84ae52d8a084bfdfc65444dc50cd52a2f7ca49..0000000000000000000000000000000000000000 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSearchableByLabel.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ - -namespace Magento\Catalog\Test\Constraint; - -use Magento\Mtf\Constraint\AbstractConstraint; - -/** - * Class AssertAttributeSearchableByLabel - */ -class AssertAttributeSearchableByLabel extends AbstractConstraint -{ - /** - * Assert that product attribute is searchable on Frontend. - * - * @return void - */ - public function processAssert() - { - // - } - - /** - * @return string - */ - public function toString() - { - // - } -} diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeIsUsedPromoRules.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeIsUsedPromoRules.php deleted file mode 100644 index a26a88439a0f53feeb7cbc1f62c78ab359e6e9f2..0000000000000000000000000000000000000000 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeIsUsedPromoRules.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ - -namespace Magento\Catalog\Test\Constraint; - -use Magento\Mtf\Constraint\AbstractConstraint; - -/** - * Class AssertProductAttributeIsUsedPromoRules - */ -class AssertProductAttributeIsUsedPromoRules extends AbstractConstraint -{ - /** - * Assert that product attribute can be used on promo rules conditions. - * - * @return void - */ - public function processAssert() - { - // - } - - /** - * @return string - */ - public function toString() - { - // - } -} diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductAttribute.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductAttribute.xml index c2606db97bb6dbeb83d5c1f47d9b9f3d22ff48ad..6c9fb2a326500be7e266b1b2114085eed7765695 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductAttribute.xml +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductAttribute.xml @@ -38,7 +38,7 @@ <field name="is_comparable" is_required="" group="frontend-properties" /> <field name="is_visible_on_front" is_required="" group="frontend-properties" /> <field name="is_html_allowed_on_front" is_required="" group="frontend-properties" /> - <field name="is_used_for_price_rules" is_required="" group="frontend-properties" /> + <field name="is_used_for_promo_rules" is_required="" group="frontend-properties" /> <field name="is_filterable_in_search" is_required="" group="frontend-properties" /> <field name="used_in_product_listing" is_required="" group="frontend-properties" /> <field name="used_for_sort_by" is_required="" group="frontend-properties" /> diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductAttribute/Curl.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductAttribute/Curl.php index 04baee216f3667fb923a20b9cec51ccf0f275294..169eb6805b3d38d984a20863933a6cc3f33d0272 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductAttribute/Curl.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductAttribute/Curl.php @@ -42,7 +42,11 @@ class Curl extends AbstractCurl implements CatalogProductAttributeInterface 'No' => 0, 'Filterable (with results)' => 1, 'Filterable (no results)' => 2 - ] + ], + 'is_used_for_promo_rules' => [ + 'No' => 0, + 'Yes' => 1, + ], ]; /** @@ -59,10 +63,10 @@ class Curl extends AbstractCurl implements CatalogProductAttributeInterface if (isset($data['options'])) { foreach ($data['options'] as $key => $values) { + $index = 'option_' . $key; if ($values['is_default'] == 'Yes') { - $data['default'][] = $values['view']; + $data['default'][] = $index; } - $index = 'option_' . $key; $data['option']['value'][$index] = [$values['admin'], $values['view']]; $data['option']['order'][$index] = $key; } diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Curl.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Curl.php index 0200bb8373530d849e38c74f8530a327fa7ae1ef..8ca825b8df56217bd1488e6f16401f403d19efeb 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Curl.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Curl.php @@ -404,6 +404,9 @@ class Curl extends AbstractCurl implements CatalogProductSimpleInterface */ protected function createProduct(array $data, array $config) { + $config['create_url_params']['set'] = isset($data['product']['attribute_set_id']) + ? $data['product']['attribute_set_id'] + : $config['create_url_params']['set']; $url = $this->getUrl($config); $curl = new BackendDecorator(new CurlTransport(), $this->_configuration); $curl->addOption(CURLOPT_HEADER, 1); diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Category/Webapi.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Category/Webapi.php index eaee68128cdac506c9909860b33778053e029a1c..340f0f0f8793a654095e6089e2aeb1be5fe2b661 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Category/Webapi.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Category/Webapi.php @@ -78,7 +78,7 @@ class Webapi extends AbstractWebapi implements CategoryInterface $this->webapiTransport->close(); if (empty($response['id'])) { - $this->eventManager->dispatchEvent(['curl_failed'], [$response]); + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); throw new \Exception('Category creation by webapi handler was not successful!'); } @@ -147,6 +147,7 @@ class Webapi extends AbstractWebapi implements CategoryInterface $this->webapiTransport->close(); if ('true' != $response) { + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); throw new \Exception('Assign product to category was not successful!'); } } diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogAttributeSet.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogAttributeSet.xml index 3d89c92046b048bb62f39a09f44ffeea350a9ffe..e51d91e2a6d862518511ff8bb5deb8973d2edbdc 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogAttributeSet.xml +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogAttributeSet.xml @@ -28,5 +28,15 @@ <item name="dataset" xsi:type="string">attribute_type_fpt</item> </field> </dataset> + + <dataset name="custom_attribute_set_with_colors"> + <field name="attribute_set_name" xsi:type="string">Custom_attribute_set_with_colors_%isolation%</field> + <field name="skeleton_set" xsi:type="array"> + <item name="dataset" xsi:type="string">default</item> + </field> + <field name="assigned_attributes" xsi:type="array"> + <item name="dataset" xsi:type="string">color_for_promo_rules</item> + </field> + </dataset> </repository> </config> diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductAttribute.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductAttribute.xml index 82f92677fd218755c054785d7bc40ccf9ed8eea0..9ef0bcfd31196057111439f69587c7f090dc53b0 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductAttribute.xml +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductAttribute.xml @@ -96,6 +96,31 @@ </field> </dataset> + <dataset name="color_for_promo_rules"> + <field name="frontend_label" xsi:type="string">color_%isolation%</field> + <field name="attribute_code" xsi:type="string">color_%isolation%</field> + <field name="frontend_input" xsi:type="string">Dropdown</field> + <field name="is_required" xsi:type="string">No</field> + <field name="is_used_for_promo_rules" xsi:type="string">Yes</field> + <field name="options" xsi:type="array"> + <item name="0" xsi:type="array"> + <item name="is_default" xsi:type="string">Yes</item> + <item name="admin" xsi:type="string">red</item> + <item name="view" xsi:type="string">red_%isolation%</item> + </item> + <item name="1" xsi:type="array"> + <item name="is_default" xsi:type="string">No</item> + <item name="admin" xsi:type="string">green</item> + <item name="view" xsi:type="string">green_%isolation%</item> + </item> + <item name="2" xsi:type="array"> + <item name="is_default" xsi:type="string">No</item> + <item name="admin" xsi:type="string">blue</item> + <item name="view" xsi:type="string">blue_%isolation%</item> + </item> + </field> + </dataset> + <dataset name="size"> <field name="frontend_label" xsi:type="string">size_%isolation%</field> <field name="attribute_code" xsi:type="string">size_%isolation%</field> diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductSimple.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductSimple.xml index fb8182b782d7786ef8cb3e74d31db0a66830dbf9..6be4a2275e35365d10655a382d0fdb93b265f618 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductSimple.xml +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductSimple.xml @@ -35,6 +35,61 @@ </field> </dataset> + <dataset name="product_with_special_symbols_in_name"> + <field name="attribute_set_id" xsi:type="array"> + <item name="dataset" xsi:type="string">default</item> + </field> + <field name="name" xsi:type="string">Product \'!@#$%^&*()+:;\\|}{][?=-~` %isolation%</field> + <field name="sku" xsi:type="string">sku_simple_product_%isolation%</field> + <field name="is_virtual" xsi:type="string">No</field> + <field name="weight" xsi:type="string">1</field> + <field name="quantity_and_stock_status" xsi:type="array"> + <item name="qty" xsi:type="string">25</item> + <item name="is_in_stock" xsi:type="string">In Stock</item> + </field> + <field name="price" xsi:type="array"> + <item name="value" xsi:type="string">560</item> + </field> + <field name="tax_class_id" xsi:type="array"> + <item name="dataset" xsi:type="string">taxable_goods</item> + </field> + <field name="website_ids" xsi:type="array"> + <item name="0" xsi:type="string">Main Website</item> + </field> + <field name="visibility" xsi:type="string">Catalog, Search</field> + <field name="url_key" xsi:type="string">simple-product-%isolation%</field> + <field name="checkout_data" xsi:type="array"> + <item name="dataset" xsi:type="string">simple_order_default</item> + </field> + </dataset> + + <dataset name="product_with_custom_color_attribute"> + <field name="name" xsi:type="string">Simple Product %isolation%</field> + <field name="sku" xsi:type="string">simple_product_%isolation%</field> + <field name="attribute_set_id" xsi:type="array"> + <item name="dataset" xsi:type="string">custom_attribute_set_with_colors</item> + </field> + <field name="quantity_and_stock_status" xsi:type="array"> + <item name="qty" xsi:type="string">25</item> + <item name="is_in_stock" xsi:type="string">In Stock</item> + </field> + <field name="weight" xsi:type="string">1</field> + <field name="price" xsi:type="array"> + <item name="value" xsi:type="string">560</item> + <item name="dataset" xsi:type="string" /> + </field> + <field name="category_ids" xsi:type="array"> + <item name="dataset" xsi:type="string">default_subcategory</item> + </field> + <field name="website_ids" xsi:type="array"> + <item name="0" xsi:type="string">Main Website</item> + </field> + <field name="checkout_data" xsi:type="array"> + <item name="dataset" xsi:type="string">simple_order_default</item> + </field> + <field name="url_key" xsi:type="string">simple-product-%isolation%</field> + </dataset> + <dataset name="product_10_dollar"> <field name="attribute_set_id" xsi:type="array"> <item name="dataset" xsi:type="string">default</item> diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductVirtual/CheckoutData.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductVirtual/CheckoutData.xml index 7a9a25ede99799eb8a9833ee558efb6b61142d0b..8eb6be9661f11a23e0458b13b1182666914a3a99 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductVirtual/CheckoutData.xml +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductVirtual/CheckoutData.xml @@ -31,5 +31,9 @@ <item name="custom_price" xsi:type="string">100</item> </field> </dataset> + + <dataset name="virtual_update_mini_shopping_cart"> + <field name="qty" xsi:type="string">2</field> + </dataset> </repository> </config> diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.php index dc239565c49d01471c82b5b1a62c17ae0244605e..a14088898d976107c3c22773e7461296037f0fed 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.php @@ -43,21 +43,21 @@ class AddCompareProductsTest extends AbstractCompareProductsTest * Test creation for adding compare products. * * @param string $products - * @param string $requireCustomerLogin + * @param string $isCustomerLoggedIn * @param AssertProductCompareSuccessAddMessage $assertProductCompareSuccessAddMessage * @param CatalogProductCompare $catalogProductCompare * @return array */ public function test( $products, - $requireCustomerLogin, + $isCustomerLoggedIn, AssertProductCompareSuccessAddMessage $assertProductCompareSuccessAddMessage, CatalogProductCompare $catalogProductCompare ) { //Steps $this->catalogProductCompare = $catalogProductCompare; $this->cmsIndex->open(); - if ($requireCustomerLogin == 'Yes') { + if ($isCustomerLoggedIn == 'Yes') { $this->loginCustomer(); } $this->products = $this->createProducts($products); diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.xml index de2da8b34bbf2b06162b4a41f0ea30a95d571dbb..7e106eb611f86ddb15c13da1611ed7bbbc64d3f0 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.xml +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.xml @@ -9,27 +9,27 @@ <testCase name="Magento\Catalog\Test\TestCase\Product\AddCompareProductsTest" summary="Add Products to Compare" ticketId="MAGETWO-25843"> <variation name="AddCompareProductsTestVariation1"> <data name="products" xsi:type="string">catalogProductSimple::simple_for_composite_products</data> - <data name="requireCustomerLogin" xsi:type="string">No</data> + <data name="isCustomerLoggedIn" xsi:type="string">No</data> <constraint name="Magento\Catalog\Test\Constraint\AssertProductCompareItemsLink" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductComparePage" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductCompareBlockOnCmsPage" /> </variation> <variation name="AddCompareProductsTestVariation2"> <data name="products" xsi:type="string">catalogProductSimple::simple_for_composite_products,bundleProduct::bundle_dynamic_product</data> - <data name="requireCustomerLogin" xsi:type="string">No</data> + <data name="isCustomerLoggedIn" xsi:type="string">No</data> <constraint name="Magento\Catalog\Test\Constraint\AssertProductCompareItemsLink" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductComparePage" /> </variation> <variation name="AddCompareProductsTestVariation3"> <data name="products" xsi:type="string">configurableProduct::default</data> - <data name="requireCustomerLogin" xsi:type="string">Yes</data> + <data name="isCustomerLoggedIn" xsi:type="string">Yes</data> <constraint name="Magento\Catalog\Test\Constraint\AssertProductCompareItemsLink" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductComparePage" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductCompareBlockOnCmsPage" /> </variation> <variation name="AddCompareProductsTestVariation4"> <data name="products" xsi:type="string">catalogProductSimple::simple_for_composite_products,catalogProductVirtual::default,downloadableProduct::default,groupedProduct::grouped_product_with_price,configurableProduct::default,bundleProduct::bundle_dynamic_product,bundleProduct::bundle_fixed_product</data> - <data name="requireCustomerLogin" xsi:type="string">Yes</data> + <data name="isCustomerLoggedIn" xsi:type="string">Yes</data> <constraint name="Magento\Catalog\Test\Constraint\AssertProductCompareItemsLink" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductComparePage" /> </variation> diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/DeleteCompareProductsTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/DeleteCompareProductsTest.php index c4771496cc0883bd64a33cce1f967517ae23babd..cf945dac7cbb8aa9a55e7937cc9050e39f841667 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/DeleteCompareProductsTest.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/DeleteCompareProductsTest.php @@ -57,20 +57,20 @@ class DeleteCompareProductsTest extends AbstractCompareProductsTest * * @param string $products * @param string $removeProductIndex - * @param string $requireCustomerLogin + * @param string $isCustomerLoggedIn * @param CatalogProductCompare $catalogProductCompare * @return array */ public function test( $products, $removeProductIndex, - $requireCustomerLogin, + $isCustomerLoggedIn, CatalogProductCompare $catalogProductCompare ) { //Steps $this->catalogProductCompare = $catalogProductCompare; $this->cmsIndex->open(); - if ($requireCustomerLogin == 'Yes') { + if ($isCustomerLoggedIn == 'Yes') { $this->loginCustomer(); } $this->products = $this->createProducts($products); diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/DeleteCompareProductsTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/DeleteCompareProductsTest.xml index 78a9e6af18713cfeb28a365f8926257bbc8b002c..4a9f009213c4a195d03cc300b23b4fe03b5a691e 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/DeleteCompareProductsTest.xml +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/DeleteCompareProductsTest.xml @@ -10,14 +10,14 @@ <variation name="DeleteCompareProductsTestVariation1"> <data name="products" xsi:type="string">catalogProductSimple::simple_for_composite_products,catalogProductVirtual::default,downloadableProduct::default,groupedProduct::grouped_product_with_price,configurableProduct::default,bundleProduct::bundle_dynamic_product,bundleProduct::bundle_fixed_product</data> <data name="removeProductIndex" xsi:type="string">1</data> - <data name="requireCustomerLogin" xsi:type="string">No</data> + <data name="isCustomerLoggedIn" xsi:type="string">No</data> <constraint name="Magento\Catalog\Test\Constraint\AssertProductCompareSuccessRemoveMessage" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductIsNotVisibleInComparePage" /> </variation> <variation name="DeleteCompareProductsTestVariation2"> <data name="products" xsi:type="string">catalogProductSimple::simple_for_composite_products,catalogProductVirtual::default,downloadableProduct::default,groupedProduct::grouped_product_with_price,configurableProduct::default,bundleProduct::bundle_dynamic_product,bundleProduct::bundle_fixed_product</data> <data name="removeProductIndex" xsi:type="string">6</data> - <data name="requireCustomerLogin" xsi:type="string">Yes</data> + <data name="isCustomerLoggedIn" xsi:type="string">Yes</data> <constraint name="Magento\Catalog\Test\Constraint\AssertProductCompareSuccessRemoveMessage" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductIsNotVisibleInComparePage" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductIsNotVisibleInCompareBlock" /> @@ -25,7 +25,7 @@ <variation name="DeleteCompareProductsTestVariation3"> <data name="products" xsi:type="string">bundleProduct::bundle_dynamic_product</data> <data name="removeProductIndex" xsi:type="string">1</data> - <data name="requireCustomerLogin" xsi:type="string">Yes</data> + <data name="isCustomerLoggedIn" xsi:type="string">Yes</data> <constraint name="Magento\Catalog\Test\Constraint\AssertProductCompareSuccessRemoveMessage" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductCompareRemoveLastProductMessage" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductIsNotVisibleInCompareBlock" /> diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/DeleteProductEntityTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/DeleteProductEntityTest.php new file mode 100644 index 0000000000000000000000000000000000000000..98c9c91b7e455f6e86a78696f4ddfcfac33848c2 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/DeleteProductEntityTest.php @@ -0,0 +1,102 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Catalog\Test\TestCase\Product; + +use Magento\Catalog\Test\Fixture\Category; +use Magento\Catalog\Test\Page\Adminhtml\CatalogProductIndex; +use Magento\Mtf\Fixture\FixtureFactory; +use Magento\Mtf\TestCase\Injectable; + +/** + * Preconditions: + * 1. Create product according to data set. + * + * Steps: + * 1. Login to backend. + * 2. Navigate Products->Catalog. + * 3. Select products created in preconditions. + * 4. Select delete from mass-action. + * 5. Submit form. + * 6. Perform asserts. + * + * @group Products_(MX) + * @ZephyrId MAGETWO-23272 + */ +class DeleteProductEntityTest extends Injectable +{ + /* tags */ + const MVP = 'yes'; + const DOMAIN = 'MX'; + /* end tags */ + + /** + * Product page with a grid. + * + * @var CatalogProductIndex + */ + protected $catalogProductIndex; + + /** + * Prepare data. + * + * @param Category $category + * @return array + */ + public function __prepare(Category $category) + { + $category->persist(); + return [ + 'category' => $category + ]; + } + + /** + * Injection data. + * + * @param CatalogProductIndex $catalogProductIndexPage + * @return void + */ + public function __inject(CatalogProductIndex $catalogProductIndexPage) + { + $this->catalogProductIndex = $catalogProductIndexPage; + } + + /** + * Run delete product test. + * + * @param string $products + * @param FixtureFactory $fixtureFactory + * @param Category $category + * @return array + */ + public function test($products, FixtureFactory $fixtureFactory, Category $category) + { + //Steps + $products = explode(',', $products); + $deleteProducts = []; + foreach ($products as &$product) { + list($fixture, $dataset) = explode('::', $product); + $product = $fixtureFactory->createByCode( + $fixture, + [ + 'dataset' => $dataset, + 'data' => [ + 'category_ids' => [ + 'category' => $category, + ], + ] + ] + ); + $product->persist(); + $deleteProducts[] = ['sku' => $product->getSku()]; + } + $this->catalogProductIndex->open(); + $this->catalogProductIndex->getProductGrid()->massaction($deleteProducts, 'Delete', true); + + return ['product' => $products]; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/DeleteProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/DeleteProductEntityTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..76dd8a27ab1d9b09928e375a29db9d00097f5479 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/DeleteProductEntityTest.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/variations.xsd"> + <testCase name="Magento\Catalog\Test\TestCase\Product\DeleteProductEntityTest" summary="Delete products (Simple, Grouped, Configurable)" ticketId="MAGETWO-23272"> + <variation name="DeleteProductEntityTestVariation1"> + <data name="products" xsi:type="string">catalogProductSimple::default</data> + <data name="isRequired" xsi:type="string">Yes</data> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductSuccessDeleteMessage" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductNotInGrid" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductIsNotDisplayingOnFrontend" /> + </variation> + <variation name="DeleteProductEntityTestVariation2"> + <data name="products" xsi:type="string">catalogProductVirtual::default</data> + <data name="isRequired" xsi:type="string">Yes</data> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductSuccessDeleteMessage" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductNotInGrid" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductIsNotDisplayingOnFrontend" /> + </variation> + <variation name="DeleteProductEntityTestVariation3"> + <data name="products" xsi:type="string">catalogProductSimple::with_one_custom_option</data> + <data name="isRequired" xsi:type="string">Yes</data> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductSuccessDeleteMessage" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductNotInGrid" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductIsNotDisplayingOnFrontend" /> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityTest.xml index 8eace54087cac573def16b1dec37b03a92c4a759..03cf25cfa8abe5a3886f025398dd4427231b3fb6 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityTest.xml +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityTest.xml @@ -36,7 +36,7 @@ <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeForm" /> <constraint name="Magento\Catalog\Test\Constraint\AssertAddedProductAttributeOnProductForm" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsRequired" /> - <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSearchableByLabel" /> + <constraint name="Magento\CatalogSearch\Test\Constraint\AssertAttributeSearchableByLabel" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeDisplayingOnSearchForm" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsComparable" /> </variation> @@ -54,12 +54,13 @@ <data name="productAttribute/data/is_comparable" xsi:type="string">No</data> <data name="productAttribute/data/is_visible_on_front" xsi:type="string">Yes</data> <data name="productAttribute/data/used_in_product_listing" xsi:type="string">Yes</data> + <data name="productAttribute/data/is_used_for_promo_rules" xsi:type="string">Yes</data> <data name="productAttribute/data/used_for_sort_by" xsi:type="string">Yes</data> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeInGrid" /> <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeForm" /> <constraint name="Magento\Catalog\Test\Constraint\AssertAddedProductAttributeOnProductForm" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsUsedInSortOnFrontend" /> - <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsUsedPromoRules" /> + <constraint name="Magento\CatalogRule\Test\Constraint\AssertProductAttributeIsUsedPromoRules" /> </variation> <variation name="CreateProductAttributeEntityTestVariation4"> <data name="productTemplate/dataset" xsi:type="string">custom_attribute_set</data> @@ -99,7 +100,7 @@ <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsComparable" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsFilterable" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsFilterableInSearch" /> - <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSearchableByLabel" /> + <constraint name="Magento\CatalogSearch\Test\Constraint\AssertAttributeSearchableByLabel" /> <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeOptionsOnProductForm" /> </variation> <variation name="CreateProductAttributeEntityTestVariation6"> @@ -127,7 +128,7 @@ <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsGlobal" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeDisplayingOnFrontend" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeDisplayingOnSearchForm" /> - <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSearchableByLabel" /> + <constraint name="Magento\CatalogSearch\Test\Constraint\AssertAttributeSearchableByLabel" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsComparable" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsUsedInSortOnFrontend" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsFilterable" /> @@ -151,7 +152,7 @@ <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeInGrid" /> <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeForm" /> <constraint name="Magento\Catalog\Test\Constraint\AssertAddedProductAttributeOnProductForm" /> - <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSearchableByLabel" /> + <constraint name="Magento\CatalogSearch\Test\Constraint\AssertAttributeSearchableByLabel" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeDisplayingOnSearchForm" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsFilterable" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsFilterableInSearch" /> diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Block/Adminhtml/Promo/Catalog/Edit/PromoForm.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Block/Adminhtml/Promo/Catalog/Edit/PromoForm.php index ed6797e5656997827bc7dda19f5dcd1af66874cd..62b27d30a0738c08ee576c1caae308cc01afade3 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Block/Adminhtml/Promo/Catalog/Edit/PromoForm.php +++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Block/Adminhtml/Promo/Catalog/Edit/PromoForm.php @@ -9,16 +9,30 @@ namespace Magento\CatalogRule\Test\Block\Adminhtml\Promo\Catalog\Edit; use Magento\Backend\Test\Block\Widget\FormTabs; use Magento\Mtf\Client\Element\SimpleElement; use Magento\Mtf\Client\Element; +use Magento\Mtf\Client\Locator; use Magento\Mtf\Fixture\FixtureInterface; /** - * Class PromoForm - * Form for creation of a Catalog Price Rule + * Form for creation of a Catalog Price Rule. */ class PromoForm extends FormTabs { /** - * Fill form with tabs + * Add button. + * + * @var string + */ + protected $addButton = '.rule-param-new-child a'; + + /** + * Locator for Customer Segment Conditions. + * + * @var string + */ + protected $conditionFormat = '//*[@id="conditions__1__new_child"]//option[contains(.,"%s")]'; + + /** + * Fill form with tabs. * * @param FixtureInterface $fixture * @param SimpleElement $element @@ -35,7 +49,7 @@ class PromoForm extends FormTabs } /** - * Replace placeholders in each values of data + * Replace placeholders in each values of data. * * @param array $tabs * @param array $replace @@ -57,4 +71,19 @@ class PromoForm extends FormTabs return $tabs; } + + /** + * Check if attribute is available in conditions. + * + * @param string $name + * @return bool + */ + public function isAttributeInConditions($name) + { + $this->_rootElement->find($this->addButton)->click(); + return $this->_rootElement->find( + sprintf($this->conditionFormat, $name), + Locator::SELECTOR_XPATH + )->isVisible(); + } } diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedCatalogPage.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedCatalogPage.php index 7e425f21585dc2f9474fd4593fe8d692093a9fd2..0739420ac1e9c11ac37f71606ffc1eb17cb7537e 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedCatalogPage.php +++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedCatalogPage.php @@ -40,7 +40,10 @@ class AssertCatalogPriceRuleAppliedCatalogPage extends AbstractConstraint '\Magento\Customer\Test\TestStep\LoginCustomerOnFrontendStep', ['customer' => $customer] )->run(); + } else { + $this->objectManager->create('\Magento\Customer\Test\TestStep\LogoutCustomerOnFrontendStep')->run(); } + $cmsIndexPage->open(); foreach ($products as $key => $product) { $categoryName = $product->getCategoryIds()[0]; diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedProductPage.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedProductPage.php index 9b6fe9ffbafbbed143f91319ee8e8e4ae8f0d8a7..119a77cfa0085e81b6bda688e25d1f6421e983c7 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedProductPage.php +++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedProductPage.php @@ -41,12 +41,17 @@ class AssertCatalogPriceRuleAppliedProductPage extends AbstractConstraint '\Magento\Customer\Test\TestStep\LoginCustomerOnFrontendStep', ['customer' => $customer] )->run(); + } else { + $this->objectManager->create('\Magento\Customer\Test\TestStep\LogoutCustomerOnFrontendStep')->run(); } + $cmsIndexPage->open(); foreach ($products as $key => $product) { $categoryName = $product->getCategoryIds()[0]; $cmsIndexPage->getTopmenu()->selectCategoryByName($categoryName); $catalogCategoryViewPage->getListProductBlock()->getProductItem($product)->open(); + + $catalogProductViewPage->getViewBlock()->waitLoader(); $productPriceBlock = $catalogProductViewPage->getViewBlock()->getPriceBlock(); $actualPrice['regular'] = $productPriceBlock->getOldPrice(); $actualPrice['special'] = $productPriceBlock->getSpecialPrice(); diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedShoppingCart.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedShoppingCart.php index e3b15f78366b04ad70e2e0d10c46518d0ae46a50..7a4e4b605ef4b7c64a09c0ac6d613159167002c2 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedShoppingCart.php +++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedShoppingCart.php @@ -39,7 +39,10 @@ class AssertCatalogPriceRuleAppliedShoppingCart extends AbstractConstraint '\Magento\Customer\Test\TestStep\LoginCustomerOnFrontendStep', ['customer' => $customer] )->run(); + } else { + $this->objectManager->create('\Magento\Customer\Test\TestStep\LogoutCustomerOnFrontendStep')->run(); } + $this->objectManager->create( '\Magento\Checkout\Test\TestStep\AddProductsToTheCartStep', ['products' => $products] diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertProductAttributeIsUsedPromoRules.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertProductAttributeIsUsedPromoRules.php new file mode 100644 index 0000000000000000000000000000000000000000..c0d88eac2804e23a07c77dd111413992d5e1b79b --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertProductAttributeIsUsedPromoRules.php @@ -0,0 +1,51 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\CatalogRule\Test\Constraint; + +use Magento\Mtf\Constraint\AbstractConstraint; +use Magento\Catalog\Test\Fixture\CatalogProductAttribute; +use Magento\CatalogRule\Test\Page\Adminhtml\CatalogRuleNew; +use Magento\CatalogRule\Test\Page\Adminhtml\CatalogRuleIndex; + +/** + * Create a Catalog Price Rules and check whether this attribute visible in Dropdown on Conditions tab. + */ +class AssertProductAttributeIsUsedPromoRules extends AbstractConstraint +{ + /** + * Assert that product attribute can be used on promo rules conditions. + * + * @param CatalogRuleIndex $catalogRuleIndex + * @param CatalogRuleNew $catalogRuleNew + * @param CatalogProductAttribute $attribute + * @return void + */ + public function processAssert( + CatalogRuleIndex $catalogRuleIndex, + CatalogRuleNew $catalogRuleNew, + CatalogProductAttribute $attribute + ) { + $catalogRuleIndex->open(); + $catalogRuleIndex->getGridPageActions()->addNew(); + $catalogRuleNew->getEditForm()->openTab('conditions'); + + \PHPUnit_Framework_Assert::assertTrue( + $catalogRuleNew->getEditForm()->isAttributeInConditions($attribute->getFrontendLabel()), + 'Product attribute can\'t be used on promo rules conditions.' + ); + } + + /** + * Returns a string representation of the object. + * + * @return string + */ + public function toString() + { + return 'Product attribute can be used on promo rules conditions.'; + } +} diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Repository/CatalogRule.xml b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Repository/CatalogRule.xml index ae748f108af441345fe6420cb68940e33583c40c..bbaa64df71ac0bd2e3053abea686df5648c1bb64 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Repository/CatalogRule.xml +++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Repository/CatalogRule.xml @@ -17,7 +17,7 @@ <field name="customer_group_ids" xsi:type="array"> <item name="0" xsi:type="string">NOT LOGGED IN</item> </field> - <field name="simple_action" xsi:type="string">By Percentage of the Original Price</field> + <field name="simple_action" xsi:type="string">Apply as percentage of original</field> <field name="discount_amount" xsi:type="string">50</field> </dataset> diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/CreateCatalogRuleTest.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/CreateCatalogRuleTest.php index 72e040caa781185b32251cf15652ca989a4044de..94868c236dfdda5d5d11352167f334e0672b3403 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/CreateCatalogRuleTest.php +++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/CreateCatalogRuleTest.php @@ -37,22 +37,18 @@ class CreateCatalogRuleTest extends AbstractCatalogRuleEntityTest * Create Catalog Price Rule. * * @param CatalogRule $catalogPriceRule - * @param Customer $customer * @param string $product + * @param string $conditionEntity + * @param Customer $customer * @return array */ - public function testCreate(CatalogRule $catalogPriceRule, $product, Customer $customer = null) + public function testCreate(CatalogRule $catalogPriceRule, $product, $conditionEntity, Customer $customer = null) { + /** @var CatalogProductSimple $productSimple */ $productSimple = $this->fixtureFactory->createByCode('catalogProductSimple', ['dataset' => $product]); // Prepare data $catalogPriceRule = $this->applyCustomerGroup($catalogPriceRule, $customer); - $replace = [ - 'conditions' => [ - 'conditions' => [ - '%category_1%' => $productSimple->getDataFieldConfig('category_ids')['source']->getIds()[0], - ], - ], - ]; + $replace = $this->prepareCondition($productSimple, $conditionEntity); // Open Catalog Price Rule page $this->catalogRuleIndex->open(); @@ -107,4 +103,36 @@ class CreateCatalogRuleTest extends AbstractCatalogRuleEntityTest return $catalogPriceRule; } + + /** + * Prepare condition for catalog price rule. + * + * @param CatalogProductSimple $productSimple + * @param string $conditionEntity + * @return array + */ + protected function prepareCondition(CatalogProductSimple $productSimple, $conditionEntity) + { + $result = []; + + switch ($conditionEntity) { + case 'category': + $result['%category_id%'] = $productSimple->getDataFieldConfig('category_ids')['source']->getIds()[0]; + break; + case 'attribute': + /** @var \Magento\Catalog\Test\Fixture\CatalogProductAttribute[] $attrs */ + $attributes = $productSimple->getDataFieldConfig('attribute_set_id')['source'] + ->getAttributeSet()->getDataFieldConfig('assigned_attributes')['source']->getAttributes(); + + $result['%attribute_name%'] = $attributes[0]->getFrontendLabel(); + $result['%attribute_value%'] = $attributes[0]->getOptions()[0]['view']; + break; + } + + return [ + 'conditions' => [ + 'conditions' => $result, + ], + ]; + } } diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/CreateCatalogRuleTest.xml b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/CreateCatalogRuleTest.xml index 37f84f3977d3f5df44c12963421c15a996d71647..7f7147a08383771b6a5df5a4ab58b7f5ee63d987 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/CreateCatalogRuleTest.xml +++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/CreateCatalogRuleTest.xml @@ -13,7 +13,8 @@ <data name="catalogPriceRule/data/is_active" xsi:type="string">Active</data> <data name="catalogPriceRule/data/website_ids" xsi:type="string">Main Website</data> <data name="catalogPriceRule/data/customer_group_ids" xsi:type="string">NOT LOGGED IN</data> - <data name="catalogPriceRule/data/conditions" xsi:type="string">[Category|is|%category_1%]</data> + <data name="conditionEntity" xsi:type="string">category</data> + <data name="catalogPriceRule/data/conditions" xsi:type="string">[Category|is|%category_id%]</data> <data name="catalogPriceRule/data/simple_action" xsi:type="string">Adjust final price to this percentage</data> <data name="catalogPriceRule/data/discount_amount" xsi:type="string">90</data> <data name="cartPrice/sub_total" xsi:type="string">90</data> @@ -33,7 +34,8 @@ <data name="catalogPriceRule/data/name" xsi:type="string">rule_name%isolation%</data> <data name="catalogPriceRule/data/is_active" xsi:type="string">Active</data> <data name="catalogPriceRule/data/website_ids" xsi:type="string">Main Website</data> - <data name="catalogPriceRule/data/conditions" xsi:type="string">[Category|is|%category_1%]</data> + <data name="conditionEntity" xsi:type="string">category</data> + <data name="catalogPriceRule/data/conditions" xsi:type="string">[Category|is|%category_id%]</data> <data name="catalogPriceRule/data/simple_action" xsi:type="string">Apply as percentage of original</data> <data name="catalogPriceRule/data/discount_amount" xsi:type="string">50</data> <data name="cartPrice/sub_total" xsi:type="string">5</data> @@ -42,7 +44,7 @@ <data name="productPrice/0/special" xsi:type="string">5</data> <data name="productPrice/0/sub_total" xsi:type="string">5</data> <data name="productPrice/0/regular" xsi:type="string">10</data> - <data name="tag" xsi:type="string">test_type:acceptance_test, stable:no</data> + <data name="tag" xsi:type="string">test_type:acceptance_test</data> <constraint name="Magento\CatalogRule\Test\Constraint\AssertCatalogPriceRuleInGrid" /> <constraint name="Magento\CatalogRule\Test\Constraint\AssertCatalogPriceRuleNotAppliedCatalogPage" /> <constraint name="Magento\CatalogRule\Test\Constraint\AssertCatalogPriceRuleNotAppliedProductPage" /> @@ -51,5 +53,24 @@ <constraint name="Magento\CatalogRule\Test\Constraint\AssertCatalogPriceRuleAppliedProductPage" /> <constraint name="Magento\CatalogRule\Test\Constraint\AssertCatalogPriceRuleAppliedShoppingCart" /> </variation> + <variation name="CreateCatalogRuleTestVariation3" summary="Create and Apply Catalog Price Rule with Product Attribute in Condition" ticketId="MAGETWO-30095"> + <data name="product" xsi:type="string">product_with_custom_color_attribute</data> + <data name="catalogPriceRule/data/name" xsi:type="string">Catalog Price Rule %isolation%</data> + <data name="catalogPriceRule/data/is_active" xsi:type="string">Active</data> + <data name="catalogPriceRule/data/website_ids" xsi:type="string">Main Website</data> + <data name="catalogPriceRule/data/customer_group_ids/option_0" xsi:type="string">NOT LOGGED IN</data> + <data name="conditionEntity" xsi:type="string">attribute</data> + <data name="catalogPriceRule/data/conditions" xsi:type="string">[%attribute_name%|is|%attribute_value%]</data> + <data name="catalogPriceRule/data/simple_action" xsi:type="string">Apply as percentage of original</data> + <data name="catalogPriceRule/data/discount_amount" xsi:type="string">50</data> + <data name="cartPrice/sub_total" xsi:type="string">280</data> + <data name="cartPrice/grand_total" xsi:type="string">285</data> + <data name="productPrice/0/discount_amount" xsi:type="string">280</data> + <data name="productPrice/0/special" xsi:type="string">280</data> + <data name="productPrice/0/sub_total" xsi:type="string">280</data> + <data name="productPrice/0/regular" xsi:type="string">560</data> + <constraint name="Magento\CatalogRule\Test\Constraint\AssertCatalogPriceRuleAppliedProductPage" /> + <constraint name="Magento\CatalogRule\Test\Constraint\AssertCatalogPriceRuleAppliedShoppingCart" /> + </variation> </testCase> </config> diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertAttributeSearchableByLabel.php b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertAttributeSearchableByLabel.php new file mode 100644 index 0000000000000000000000000000000000000000..52396b06ebe2b0716d764cfa40d05d4b44bc8d0f --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertAttributeSearchableByLabel.php @@ -0,0 +1,93 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\CatalogSearch\Test\Constraint; + +use Magento\Cms\Test\Page\CmsIndex; +use Magento\Mtf\Fixture\InjectableFixture; +use Magento\Mtf\Constraint\AbstractConstraint; +use Magento\CatalogSearch\Test\Page\CatalogsearchResult; +use Magento\Catalog\Test\Fixture\CatalogProductAttribute; + +/** + * Assert that product attribute is searchable on Frontend. + */ +class AssertAttributeSearchableByLabel extends AbstractConstraint +{ + /** + * Assert that product attribute is searchable on Frontend. + * + * @param CatalogProductAttribute $attribute + * @param CmsIndex $cmsIndex + * @param InjectableFixture $product + * @param CatalogsearchResult $catalogSearchResult + * @return void + */ + public function processAssert( + CatalogProductAttribute $attribute, + CmsIndex $cmsIndex, + InjectableFixture $product, + CatalogsearchResult $catalogSearchResult + ) { + $searchValue = $this->getSearchValue($attribute); + + $cmsIndex->open(); + $cmsIndex->getSearchBlock()->search($searchValue); + + $isVisible = $catalogSearchResult->getListProductBlock()->getProductItem($product)->isVisible(); + while (!$isVisible && $catalogSearchResult->getBottomToolbar()->nextPage()) { + $isVisible = $catalogSearchResult->getListProductBlock()->getProductItem($product)->isVisible(); + } + + \PHPUnit_Framework_Assert::assertTrue($isVisible, 'Product attribute is not searchable on Frontend.'); + } + + /** + * Get search value for product attribute. + * + * @param CatalogProductAttribute $attribute + * @return string + */ + protected function getSearchValue(CatalogProductAttribute $attribute) + { + $searchValue = ''; + + switch ($attribute->getFrontendInput()) { + case 'Multiple Select': + case 'Dropdown': + foreach ($attribute->getOptions() as $option) { + if ($option['is_default'] == 'Yes') { + $searchValue = $option['admin']; + } + } + break; + case 'Text Field': + $searchValue = $attribute->getDefaultValueText(); + break; + case 'Text Area': + $searchValue = $attribute->getDefaultValueTextarea(); + break; + case 'Date': + $searchValue = $attribute->getDefaultValueDate(); + break; + case 'Yes/No': + $searchValue = $attribute->getDefaultValueYesno(); + break; + } + + return $searchValue; + } + + /** + * Returns string representation of object. + * + * @return string + */ + public function toString() + { + return 'Product attribute is searchable on Frontend.'; + } +} diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertCatalogSearchNoResult.php b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertCatalogSearchNoResult.php new file mode 100644 index 0000000000000000000000000000000000000000..ed109f1f790b113d4c940062b1a2434773425ee5 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertCatalogSearchNoResult.php @@ -0,0 +1,40 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\CatalogSearch\Test\Constraint; + +use Magento\Mtf\Constraint\AbstractConstraint; +use Magento\CatalogSearch\Test\Page\CatalogsearchResult; + +/** + * Assert search has no results. + */ +class AssertCatalogSearchNoResult extends AbstractConstraint +{ + /** + * Assert search has no results and product list in absent. + * + * @param CatalogsearchResult $catalogsearchResult + * @return void + */ + public function processAssert(CatalogsearchResult $catalogsearchResult) + { + \PHPUnit_Framework_Assert::assertFalse( + $catalogsearchResult->getListProductBlock()->isVisible(), + 'Search result has been found.' + ); + } + + /** + * Returns a string representation of the object. + * + * @return string + */ + public function toString() + { + return 'Search result has not been found.'; + } +} diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertCatalogSearchNoResultMessage.php b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertCatalogSearchNoResultMessage.php new file mode 100644 index 0000000000000000000000000000000000000000..752cb5346dd0fc06cb1a3d3982e676445efa16a2 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertCatalogSearchNoResultMessage.php @@ -0,0 +1,45 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\CatalogSearch\Test\Constraint; + +use Magento\Mtf\Constraint\AbstractConstraint; +use Magento\CatalogSearch\Test\Page\CatalogsearchResult; + +/** + * Assert that notice message is visible. + */ +class AssertCatalogSearchNoResultMessage extends AbstractConstraint +{ + /** + * Notice message about no results on search. + */ + const NOTICE_MESSAGE = 'Your search returned no results.'; + + /** + * Assert that 'Your search returned no results.' is visible. + * + * @param CatalogsearchResult $catalogSearchResult + * @return void + */ + public function processAssert(CatalogsearchResult $catalogSearchResult) + { + \PHPUnit_Framework_Assert::assertTrue( + $catalogSearchResult->getSearchResultBlock()->isVisibleMessages(self::NOTICE_MESSAGE), + 'Wrong message is displayed or no message at all.' + ); + } + + /** + * Returns a string representation of the object. + * + * @return string + */ + public function toString() + { + return 'Notice message is visible.'; + } +} diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/CatalogsearchResult.xml b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/CatalogsearchResult.xml index bca2d33440a57f9bae02de8ad2df50ce7351495d..5f594f7acf59b390313ff4519973c7b767549bfd 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/CatalogsearchResult.xml +++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/CatalogsearchResult.xml @@ -6,8 +6,9 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="CatalogsearchResult" mca="catalogsearch/result" module="Magento_CatalogSearch"> - <block name="listProductBlock" class="Magento\Catalog\Test\Block\Product\ListProduct" locator=".search.results" strategy="css selector"/> - <block name="bottomToolbar" class="Magento\Catalog\Test\Block\Product\ProductList\BottomToolbar" locator=".//*[contains(@class,'toolbar-products')][2]" strategy="xpath"/> - </page> + <page name="CatalogsearchResult" mca="catalogsearch/result" module="Magento_CatalogSearch"> + <block name="listProductBlock" class="Magento\Catalog\Test\Block\Product\ListProduct" locator=".search.results" strategy="css selector" /> + <block name="bottomToolbar" class="Magento\Catalog\Test\Block\Product\ProductList\BottomToolbar" locator=".//*[contains(@class,'toolbar-products')][2]" strategy="xpath" /> + <block name="searchResultBlock" class="Magento\CatalogSearch\Test\Block\Advanced\Result" locator=".column.main" strategy="css selector" /> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/SearchEntityResultsTest.xml b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/SearchEntityResultsTest.xml index 42ffc74b8e4e2ca928c251eb3a294adecc8842d3..7af934c5cff4c3bfda0c58e982e096cc019386ca 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/SearchEntityResultsTest.xml +++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/SearchEntityResultsTest.xml @@ -47,5 +47,18 @@ <data name="catalogSearch/data/query_text/value" xsi:type="string">bundleProduct::bundle_fixed_product::bundle</data> <constraint name="Magento\CatalogSearch\Test\Constraint\AssertCatalogSearchResult" /> </variation> + <variation name="SearchEntityResultsTestVariation9"> + <data name="catalogSearch/data/query_text/value" xsi:type="string">catalogProductSimple::default::name</data> + <constraint name="Magento\CatalogSearch\Test\Constraint\AssertProductCanBeOpenedFromSearchResult" /> + </variation> + <variation name="SearchEntityResultsTestVariation10"> + <data name="catalogSearch/data/query_text/value" xsi:type="string">catalogProductSimple::product_with_special_symbols_in_name::name</data> + <constraint name="Magento\CatalogSearch\Test\Constraint\AssertProductCanBeOpenedFromSearchResult" /> + </variation> + <variation name="SearchEntityResultsTestVariation11"> + <data name="catalogSearch/data/query_text/value" xsi:type="string">TryToFindMeAndI'llFindYOU</data> + <constraint name="Magento\CatalogSearch\Test\Constraint\AssertCatalogSearchNoResultMessage" /> + <constraint name="Magento\CatalogSearch\Test\Constraint\AssertCatalogSearchNoResult" /> + </variation> </testCase> </config> diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/etc/di.xml b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/etc/di.xml index 28eeb838b406626fa6ae72e6f94ee9c82df8e0a6..66de584a1e52390abae29f3977358bb2319f5808 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/etc/di.xml +++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/etc/di.xml @@ -5,90 +5,96 @@ * See COPYING.txt for license details. */ --> -<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd"> - <type name="Magento\CatalogSearch\Test\Constraint\AssertSuggestSearchingResult"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertAdvancedSearchProductsResult"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertCatalogSearchResult"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermForm"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermInGrid"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermOnFrontend"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermSuccessSaveMessage"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermSynonymOnFrontend"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermSuccessDeleteMessage"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermNotInGrid"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermNotOnFrontend"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchSynonymNotOnFrontend"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermSuccessMassDeleteMessage"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermMassActionsNotInGrid"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermMassActionNotOnFrontend"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchSynonymMassActionNotOnFrontend"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> - <type name="Magento\CatalogSearch\Test\Constraint\AssertProductCanBeOpenedFromSearchResult"> - <arguments> - <argument name="severity" xsi:type="string">high</argument> - </arguments> - </type> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd"> + <type name="Magento\CatalogSearch\Test\Constraint\AssertSuggestSearchingResult"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertAdvancedSearchProductsResult"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertCatalogSearchResult"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermForm"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermInGrid"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermOnFrontend"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermSuccessSaveMessage"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermSynonymOnFrontend"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermSuccessDeleteMessage"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermNotInGrid"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermNotOnFrontend"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchSynonymNotOnFrontend"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermSuccessMassDeleteMessage"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermMassActionsNotInGrid"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchTermMassActionNotOnFrontend"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertSearchSynonymMassActionNotOnFrontend"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertProductCanBeOpenedFromSearchResult"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> + <type name="Magento\CatalogSearch\Test\Constraint\AssertCatalogSearchNoResult"> + <arguments> + <argument name="severity" xsi:type="string">high</argument> + </arguments> + </type> </config> diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CmsIndex.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CmsIndex.xml new file mode 100644 index 0000000000000000000000000000000000000000..05d380b450464ebe3f1d888c9f1c7d00d1331d06 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CmsIndex.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/pages.xsd"> + <page name="CmsIndex" mca="cms/index/index"> + <block name="cartSidebarBlock" class="Magento\Checkout\Test\Block\Cart\Sidebar" locator="[data-block='minicart']" strategy="css selector" /> + </page> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutTest.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutTest.php new file mode 100644 index 0000000000000000000000000000000000000000..6d9516684512359904181b06d7899f8af8f7021e --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutTest.php @@ -0,0 +1,57 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Checkout\Test\TestCase; + +use Magento\Mtf\TestCase\Scenario; + +/** + * Preconditions: + * 1. Configure shipping method. + * 2. Configure payment method. + * 3. Create products. + * 4. Create and setup customer. + * 5. Create sales rule according to dataset. + * + * Steps: + * 1. Go to Frontend. + * 2. Add products to the cart. + * 3. Apply discounts in shopping cart according to dataset. + * 4. In 'Estimate Shipping and Tax' section specify destination using values from Test Data + * 5. Click the 'Get a Quote' button + * 6. In the section appeared select Shipping method, click the 'Update Total' button + * 7. Click the 'Proceed to Checkout' button. + * 8. Select checkout method according to dataset. + * 9. Fill billing information and select the 'Ship to this address' option. + * 10. Select shipping method. + * 11. Select payment method (use reward points and store credit if available). + * 12. Verify order total on review step. + * 13. Place order. + * 14. Perform assertions. + * + * @group One_Page_Checkout_(CS) + * @ZephyrId MAGETWO-27485, MAGETWO-12412, MAGETWO-12429 + * @ZephyrId MAGETWO-12444, MAGETWO-12848, MAGETWO-12849, MAGETWO-12850 + */ +class OnePageCheckoutTest extends Scenario +{ + /* tags */ + const MVP = 'yes'; + const DOMAIN = 'CS'; + const TEST_TYPE = 'acceptance_test, 3rd_party_test'; + const TO_MAINTAIN = 'yes'; + /* end tags */ + + /** + * Runs one page checkout test. + * + * @return void + */ + public function test() + { + $this->executeScenario(); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutTest.xml index 582997ee52ca18bddcc064bfb632be6395d4695d..696bf1324beea2c303bda0496702588f2b70be3a 100644 --- a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutTest.xml +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutTest.xml @@ -7,6 +7,101 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> <testCase name="Magento\Checkout\Test\TestCase\OnePageCheckoutTest" summary="OnePageCheckout within Offline Payment Methods" ticketId="MAGETWO-27485"> - <variation name="OnePageCheckoutTestVariation1" /> + <variation name="OnePageCheckoutTestVariation1" summary="Checkout as UK guest with virtual product using coupon for not logged in customers"> + <data name="products" xsi:type="string">catalogProductVirtual::default</data> + <data name="salesRule" xsi:type="string">active_sales_rule_with_percent_price_discount_coupon</data> + <data name="customer/dataset" xsi:type="string">default</data> + <data name="billingAddress/dataset" xsi:type="string">UK_address</data> + <data name="checkoutMethod" xsi:type="string">guest</data> + <data name="prices" xsi:type="array"> + <item name="grandTotal" xsi:type="string">5.00</item> + </data> + <data name="payment/method" xsi:type="string">checkmo</data> + <data name="status" xsi:type="string">Pending</data> + <data name="orderButtonsAvailable" xsi:type="string">Back, Cancel, Send Notification, Hold, Invoice, Edit</data> + <data name="configData" xsi:type="string">checkmo_specificcountry_gb</data> + <constraint name="Magento\Checkout\Test\Constraint\AssertOrderSuccessPlacedMessage" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderStatusIsCorrect" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderButtonsAvailable" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderGrandTotal" /> + </variation> + <variation name="OnePageCheckoutTestVariation2" summary="US customer during checkout using coupon for all customer groups"> + <data name="products" xsi:type="string">catalogProductSimple::default</data> + <data name="salesRule" xsi:type="string">active_sales_rule_for_all_groups</data> + <data name="customer/dataset" xsi:type="string">default</data> + <data name="billingAddress/dataset" xsi:type="string">US_address_1</data> + <data name="checkoutMethod" xsi:type="string">guest</data> + <data name="shipping/shipping_service" xsi:type="string">Flat Rate</data> + <data name="shipping/shipping_method" xsi:type="string">Fixed</data> + <data name="prices" xsi:type="array"> + <item name="grandTotal" xsi:type="string">285.00</item> + </data> + <data name="payment/method" xsi:type="string">banktransfer</data> + <data name="status" xsi:type="string">Pending</data> + <data name="orderButtonsAvailable" xsi:type="string">Back, Cancel, Send Notification, Hold, Reorder, Invoice, Edit</data> + <data name="configData" xsi:type="string">banktransfer</data> + <constraint name="Magento\Checkout\Test\Constraint\AssertOrderSuccessPlacedMessage" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderStatusIsCorrect" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderButtonsAvailable" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderGrandTotal" /> + </variation> + <variation name="OnePageCheckoutTestVariation3" summary="Checkout as UK guest with virtual product"> + <data name="products" xsi:type="string">catalogProductVirtual::default</data> + <data name="customer/dataset" xsi:type="string">default</data> + <data name="billingAddress/dataset" xsi:type="string">UK_address</data> + <data name="checkoutMethod" xsi:type="string">guest</data> + <data name="prices" xsi:type="array"> + <item name="grandTotal" xsi:type="string">10.00</item> + </data> + <data name="payment/method" xsi:type="string">banktransfer</data> + <data name="status" xsi:type="string">Pending</data> + <data name="orderButtonsAvailable" xsi:type="string">Back, Cancel, Send Notification, Hold, Invoice, Edit</data> + <data name="configData" xsi:type="string">banktransfer_specificcountry_gb</data> + <constraint name="Magento\Checkout\Test\Constraint\AssertOrderSuccessPlacedMessage" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderStatusIsCorrect" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderButtonsAvailable" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderGrandTotal" /> + </variation> + <variation name="OnePageCheckoutTestVariation4" summary="One Page Checkout Products with Special Prices" ticketId="MAGETWO-12429"> + <data name="products" xsi:type="string">catalogProductSimple::product_with_special_price, configurableProduct::product_with_special_price</data> + <data name="customer/dataset" xsi:type="string">default</data> + <data name="shippingAddress/dataset" xsi:type="string">US_address_1_without_email</data> + <data name="checkoutMethod" xsi:type="string">login</data> + <data name="shipping/shipping_service" xsi:type="string">Flat Rate</data> + <data name="shipping/shipping_method" xsi:type="string">Fixed</data> + <data name="prices" xsi:type="array"> + <item name="grandTotal" xsi:type="string">20.00</item> + </data> + <data name="cart/data/subtotal" xsi:type="string">10.00</data> + <data name="cart/data/shipping_amount" xsi:type="string">10.00</data> + <data name="cart/data/grand_total" xsi:type="string">20.00</data> + <data name="billingCheckboxState" xsi:type="string">Yes</data> + <data name="payment/method" xsi:type="string">checkmo</data> + <data name="tag" xsi:type="string">test_type:acceptance_test</data> + <data name="configData" xsi:type="string">checkmo</data> + <constraint name="Magento\Checkout\Test\Constraint\AssertOrderSuccessPlacedMessage"/> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderGrandTotal"/> + </variation> + <variation name="OnePageCheckoutTestVariation5" summary="Guest Checkout using Check/Money Order and Free Shipping with Prices/Taxes Verifications" ticketId="MAGETWO-12412"> + <data name="products" xsi:type="string">catalogProductSimple::product_10_dollar, configurableProduct::with_one_option, bundleProduct::bundle_fixed_100_dollar_product</data> + <data name="taxRule" xsi:type="string">us_ca_ny_rule</data> + <data name="shippingAddress/dataset" xsi:type="string">US_address_1</data> + <data name="checkoutMethod" xsi:type="string">guest</data> + <data name="shipping/shipping_service" xsi:type="string">Free Shipping</data> + <data name="shipping/shipping_method" xsi:type="string">Free</data> + <data name="prices" xsi:type="array"> + <item name="grandTotal" xsi:type="string">130.98</item> + </data> + <data name="cart/data/subtotal" xsi:type="string">121.00</data> + <data name="cart/data/tax_amount" xsi:type="string">9.98</data> + <data name="cart/data/shipping_amount" xsi:type="string">0.00</data> + <data name="cart/data/grand_total" xsi:type="string">130.98</data> + <data name="billingCheckboxState" xsi:type="string">Yes</data> + <data name="payment/method" xsi:type="string">checkmo</data> + <data name="configData" xsi:type="string">checkmo, freeshipping_minimum_order_amount_100</data> + <data name="tag" xsi:type="string">test_type:acceptance_test</data> + <constraint name="Magento\Checkout\Test\Constraint\AssertOrderSuccessPlacedMessage"/> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderGrandTotal"/> + </variation> </testCase> </config> diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/UpdateProductFromMiniShoppingCartEntityTest.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/UpdateProductFromMiniShoppingCartEntityTest.xml index 06d7a080176c96e2389c3fdd308e20c03da1299b..95eb13b50a2f9b87ceacd0028cfddce00faeaf4c 100644 --- a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/UpdateProductFromMiniShoppingCartEntityTest.xml +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/UpdateProductFromMiniShoppingCartEntityTest.xml @@ -41,5 +41,12 @@ <constraint name="Magento\Checkout\Test\Constraint\AssertProductQtyInShoppingCart" /> <constraint name="Magento\Checkout\Test\Constraint\AssertProductOptionsAbsentInShoppingCart" /> </variation> + <variation name="UpdateProductFromMiniShoppingCartEntityTestVariation5"> + <data name="description" xsi:type="string">Update Virtual product in mini shopping cart</data> + <data name="originalProduct" xsi:type="string">catalogProductVirtual::default</data> + <data name="checkoutData/dataset" xsi:type="string">virtual_update_mini_shopping_cart</data> + <constraint name="Magento\Checkout\Test\Constraint\AssertProductQtyInMiniShoppingCart" /> + <constraint name="Magento\Checkout\Test\Constraint\AssertProductQtyInShoppingCart" /> + </variation> </testCase> </config> diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestCase/CreateTermEntityTest.php b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestCase/CreateTermEntityTest.php index 2025417f5da0940fa84abf249f9e233d87d4e4da..ee6191a0a7d8d7802d00c786e381c66383efe0a7 100644 --- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestCase/CreateTermEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestCase/CreateTermEntityTest.php @@ -20,7 +20,7 @@ use Magento\Mtf\TestCase\Scenario; * 5. Perform all assertions * * @group Terms_and_Conditions_(CS) - * @ZephyrId MAGETWO-29586 + * @ZephyrId MAGETWO-29586, MAGETWO-32499 */ class CreateTermEntityTest extends Scenario { diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestCase/CreateTermEntityTest.xml b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestCase/CreateTermEntityTest.xml index 843e26dc329231d699c346536f8452367ea49616..7471bf899ef868e8ea3ea100fcd90f33834c00cf 100644 --- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestCase/CreateTermEntityTest.xml +++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestCase/CreateTermEntityTest.xml @@ -79,8 +79,7 @@ <constraint name="Magento\CheckoutAgreements\Test\Constraint\AssertTermInGrid" /> <constraint name="Magento\CheckoutAgreements\Test\Constraint\AssertTermAbsentOnCheckout" /> </variation> - <variation name="CreateTermEntityTestVariation5"> - <data name="description" xsi:type="string">Create enabled term, check with multishipping</data> + <variation name="CreateTermEntityTestVariation5" summary="Terms and conditions on multishipping" ticketId="MAGETWO-32499"> <data name="configData" xsi:type="string">checkout_term_condition</data> <data name="products" xsi:type="string">catalogProductSimple::default, catalogProductSimple::default</data> <data name="agreement/data/name" xsi:type="string">name%isolation%</data> diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/CmsIndex.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/CmsIndex.xml index 94be490f81adc65a229701a7794ae5747679b139..105673dceb26d659cad816f2ec7f9764a0ae43fd 100644 --- a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/CmsIndex.xml +++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/CmsIndex.xml @@ -13,7 +13,6 @@ <block name="footerBlock" class="Magento\Theme\Test\Block\Html\Footer" locator="footer.page-footer" strategy="css selector" /> <block name="linksBlock" class="Magento\Theme\Test\Block\Links" locator=".header .links" strategy="css selector" /> <block name="storeSwitcherBlock" class="Magento\Store\Test\Block\Switcher" locator="[data-ui-id='language-switcher']" strategy="css selector" /> - <block name="cartSidebarBlock" class="Magento\Checkout\Test\Block\Cart\Sidebar" locator="[data-block='minicart']" strategy="css selector" /> <block name="currencyBlock" class="Magento\Directory\Test\Block\Currency\Switcher" locator=".switcher.currency" strategy="css selector" /> <block name="cmsPageBlock" class="Magento\Cms\Test\Block\Page" locator=".page-main" strategy="css selector" /> <block name="widgetView" class="Magento\Widget\Test\Block\WidgetView" locator=".widget" strategy="css selector" /> diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/DeleteProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/DeleteProductEntityTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..e3dfb35aa29c68699d8b58319b2f38fa76205623 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/DeleteProductEntityTest.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/variations.xsd"> + <testCase name="Magento\Catalog\Test\TestCase\Product\DeleteProductEntityTest"> + <variation name="DeleteProductEntityTestVariation9"> + <data name="products" xsi:type="string">configurableProduct::default</data> + <data name="isRequired" xsi:type="string">Yes</data> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductSuccessDeleteMessage" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductNotInGrid" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductIsNotDisplayingOnFrontend" /> + </variation> + <variation name="DeleteProductEntityTestVariation10"> + <data name="products" xsi:type="string">configurableProduct::with_one_option</data> + <data name="isRequired" xsi:type="string">Yes</data> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductSuccessDeleteMessage" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductNotInGrid" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductIsNotDisplayingOnFrontend" /> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/DeleteProductFromMiniShoppingCartTest.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/DeleteProductFromMiniShoppingCartTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..fc24de8c1c44157d3cd4a1ffb95e49dbad2f9099 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/DeleteProductFromMiniShoppingCartTest.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> + <testCase name="Magento\Checkout\Test\TestCase\DeleteProductFromMiniShoppingCartTest" summary="Delete Configurable Product from Mini Shopping Cart" ticketId="MAGETWO-29104"> + <variation name="DeleteConfigurableProductFromMiniShoppingCartTestVariation"> + <data name="products" xsi:type="string">configurableProduct::default</data> + <data name="deletedProductIndex" xsi:type="string">0</data> + <constraint name="Magento\Checkout\Test\Constraint\AssertCartIsEmpty" /> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Customer/Webapi.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Customer/Webapi.php new file mode 100644 index 0000000000000000000000000000000000000000..1934bc456d92061105b2faae79919f69de35293f --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Customer/Webapi.php @@ -0,0 +1,180 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Customer\Test\Handler\Customer; + +use Magento\Customer\Test\Fixture\Customer; +use Magento\Mtf\Fixture\FixtureInterface; +use Magento\Mtf\Handler\Webapi as AbstractWebapi; + +/** + * Webapi handler for creating customer. + */ +class Webapi extends AbstractWebapi implements CustomerInterface +{ + /** + * Default customer group. + */ + const GENERAL_GROUP = '1'; + + /** + * Mapping values for data. + * + * @var array + */ + protected $mappingData = [ + 'country_id' => [ + 'United States' => 'US', + 'United Kingdom' => 'GB' + ], + 'region_id' => [ + 'California' => 12, + 'New York' => 43, + 'Texas' => 57, + ], + ]; + + /** + * Create customer via Web API. + * + * @param FixtureInterface|null $customer + * @return array + * @throws \Exception + */ + public function persist(FixtureInterface $customer = null) + { + /** @var Customer $customer */ + $data = $this->prepareData($customer); + $url = $_ENV['app_frontend_url'] . 'rest/V1/customers'; + + $this->webapiTransport->write($url, $data); + $response = json_decode($this->webapiTransport->read(), true); + $this->webapiTransport->close(); + + if (empty($response['id'])) { + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); + throw new \Exception('Customer creation by Web API handler was not successful!'); + } + + return ['id' => $response['id']]; + } + + /** + * Prepare customer data for Web API. + * + * @param Customer $customer + * @return array + */ + protected function prepareData(Customer $customer) + { + $data['customer'] = $customer->getData(); + $data['customer']['group_id'] = $this->getCustomerGroup($customer); + $data['password'] = $data['customer']['password']; + unset($data['customer']['password']); + unset($data['customer']['password_confirmation']); + $data = $this->prepareAddressData($data); + + return $data; + } + + /** + * Get customer group. + * + * @param Customer $customer + * @return string + */ + protected function getCustomerGroup(Customer $customer) + { + return $customer->hasData('group_id') + ? $customer->getDataFieldConfig('group_id')['source']->getCustomerGroup()->getCustomerGroupId() + : self::GENERAL_GROUP; + } + + /** + * Prepare address data for Web API. + * + * @param array $data + * @return array + */ + protected function prepareAddressData(array $data) + { + if (!isset($data['customer']['address'])) { + return $data; + } + foreach ($data['customer']['address'] as $key => $addressData) { + $addressData['country_id'] = $this->mappingData['country_id'][$addressData['country_id']]; + $addressData = $this->prepareRegionData($addressData); + $addressData = $this->prepareStreetData($addressData); + $addressData = $this->prepareDefaultAddressData($addressData); + unset($addressData['email']); + $data['customer']['addresses'][$key] = $addressData; + } + unset($data['customer']['address']); + + return $data; + } + + /** + * Prepare region data for the address. + * + * @param array $addressData + * @return array + */ + protected function prepareRegionData(array $addressData) + { + if (isset($addressData['region'])) { + $addressData['region'] = [ + 'region' => $addressData['region'], + ]; + } + if (isset($addressData['region_id'])) { + $addressData['region'] = [ + 'region_id' => $this->mappingData['region_id'][$addressData['region_id']] + ]; + unset($addressData['region_id']); + } + + return $addressData; + } + + /** + * Prepare street data for the address. + * + * @param array $addressData + * @return array + */ + protected function prepareStreetData(array $addressData) + { + if (!is_array($addressData['street'])) { + $street[] = $addressData['street']; + $addressData['street'] = $street; + } + + return $addressData; + } + + /** + * Prepare default address data. + * + * @param array $addressData + * @return array + */ + protected function prepareDefaultAddressData(array $addressData) + { + if (isset($addressData['default_billing']) && $addressData['default_billing'] === 'Yes') { + $addressData['default_billing'] = true; + } else { + $addressData['default_billing'] = false; + } + if (isset($addressData['default_shipping']) && $addressData['default_shipping'] === 'Yes') { + $addressData['default_shipping'] = true; + } else { + $addressData['default_shipping'] = false; + } + + return $addressData; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Repository/Customer.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Repository/Customer.xml index 15df2b81f2518ed677cb21e5a3b9a3692808c093..ca4a46913b3b86ccc06462b957e1a7b23bdefded 100644 --- a/dev/tests/functional/tests/app/Magento/Customer/Test/Repository/Customer.xml +++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Repository/Customer.xml @@ -118,6 +118,14 @@ </field> </dataset> + <dataset name="register_customer"> + <field name="firstname" xsi:type="string">John</field> + <field name="lastname" xsi:type="string">Doe</field> + <field name="email" xsi:type="string">JohnDoe_%isolation%@example.com</field> + <field name="password" xsi:type="string">123123q</field> + <field name="password_confirmation" xsi:type="string">123123q</field> + </dataset> + <dataset name="backend_customer"> <field name="firstname" xsi:type="string">John</field> <field name="lastname" xsi:type="string">Doe%isolation%</field> diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/etc/webapi/di.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/etc/webapi/di.xml new file mode 100644 index 0000000000000000000000000000000000000000..f6bea2a0ec5a86821934152c13ed90d4e220a6f4 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Customer/Test/etc/webapi/di.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" ?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd"> + <preference for="Magento\Customer\Test\Handler\Customer\CustomerInterface" type="\Magento\Customer\Test\Handler\Customer\Webapi" /> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Dhl/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Dhl/Test/TestCase/OnePageCheckoutTest.xml index a6daf3cbaf38f42758a1076b933de63a36a44c87..a9e54ed517058c2711cdc2096426944a0a04be6f 100644 --- a/dev/tests/functional/tests/app/Magento/Dhl/Test/TestCase/OnePageCheckoutTest.xml +++ b/dev/tests/functional/tests/app/Magento/Dhl/Test/TestCase/OnePageCheckoutTest.xml @@ -7,7 +7,7 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> <testCase name="Magento\Checkout\Test\TestCase\OnePageCheckoutTest"> - <variation name="OnePageCheckoutTestVariation20" summary="Use DHL International (EU) Online Shipping Carrier on Checkout as a Registered Customer" ticketId="MAGETWO-12850"> + <variation name="OnePageCheckoutDhlTestVariation1" summary="Use DHL International (EU) Online Shipping Carrier on Checkout as a Registered Customer" ticketId="MAGETWO-12850"> <data name="products" xsi:type="string">catalogProductSimple::default, configurableProduct::default, bundleProduct::bundle_fixed_product</data> <data name="checkoutMethod" xsi:type="string">login</data> <data name="customer/dataset" xsi:type="string">customer_DE</data> diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/DeleteProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/DeleteProductEntityTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..3eefc2707c0aee440522a6ead9a4d6053b500418 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/DeleteProductEntityTest.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/variations.xsd"> + <testCase name="Magento\Catalog\Test\TestCase\Product\DeleteProductEntityTest"> + <variation name="DeleteProductEntityTestVariation7" firstConstraint="Magento\Catalog\Test\Constraint\AssertProductSuccessDeleteMessage" method="test"> + <data name="products" xsi:type="string">downloadableProduct::default</data> + <data name="isRequired" xsi:type="string">Yes</data> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductSuccessDeleteMessage" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductNotInGrid" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductIsNotDisplayingOnFrontend" /> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/DeleteProductFromMiniShoppingCartTest.xml b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/DeleteProductFromMiniShoppingCartTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..5b18f4e3521337ea6d90ea8d1f60732e2a7454e2 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/DeleteProductFromMiniShoppingCartTest.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> + <testCase name="Magento\Checkout\Test\TestCase\DeleteProductFromMiniShoppingCartTest" summary="Delete Downloadable Product from Mini Shopping Cart" ticketId="MAGETWO-29104"> + <variation name="DeleteDownloadableProductFromMiniShoppingCartTestVariation"> + <data name="products" xsi:type="string">downloadableProduct::default</data> + <data name="deletedProductIndex" xsi:type="string">0</data> + <constraint name="Magento\Checkout\Test\Constraint\AssertCartIsEmpty" /> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Fedex/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Fedex/Test/TestCase/OnePageCheckoutTest.xml index 2e0864df7daba455eec74359bad4fa8f45093a13..d53852fef4800cd19fa6adbf896c89cf29c983c6 100644 --- a/dev/tests/functional/tests/app/Magento/Fedex/Test/TestCase/OnePageCheckoutTest.xml +++ b/dev/tests/functional/tests/app/Magento/Fedex/Test/TestCase/OnePageCheckoutTest.xml @@ -7,8 +7,7 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> <testCase name="Magento\Checkout\Test\TestCase\OnePageCheckoutTest"> - <variation name="OnePageCheckoutTestVariation22"> - <data name="description" xsi:type="string">Check Out as Guest using FedEx with US shipping origin and UK customer</data> + <variation name="OnePageCheckoutFedexTestVariation1" summary="Check Out as Guest using FedEx with US shipping origin and UK customer"> <data name="products" xsi:type="string">catalogProductSimple::default, configurableProduct::default, bundleProduct::bundle_fixed_product</data> <data name="checkoutMethod" xsi:type="string">guest</data> <data name="customer/dataset" xsi:type="string">default</data> @@ -23,7 +22,7 @@ <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGrid"/> <constraint name="Magento\Checkout\Test\Constraint\AssertCartIsEmpty"/> </variation> - <variation name="OnePageCheckoutTestVariation23" summary="MAGETWO-12849" ticketId="Use FedEx Online Shipping Carrier on Checkout as a Registered Customer"> + <variation name="OnePageCheckoutFedexTestVariation2" summary="Use FedEx Online Shipping Carrier on Checkout as a Registered Customer" ticketId="MAGETWO-12849"> <data name="products" xsi:type="string">catalogProductSimple::default, configurableProduct::default, bundleProduct::bundle_fixed_product</data> <data name="checkoutMethod" xsi:type="string">login</data> <data name="customer/dataset" xsi:type="string">customer_DE</data> diff --git a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Cart/Sidebar.php b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Cart/Sidebar.php new file mode 100644 index 0000000000000000000000000000000000000000..259eaab021c6c262c55598a9663bbf37d74fa008 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Cart/Sidebar.php @@ -0,0 +1,55 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\GroupedProduct\Test\Block\Cart; + +use Magento\Mtf\Fixture\FixtureInterface; +use Magento\GroupedProduct\Test\Fixture\GroupedProduct; +use Magento\Checkout\Test\Block\Cart\Sidebar as MiniShoppingCart; + +/** + * Mini shopping cart block. + */ +class Sidebar extends MiniShoppingCart +{ + /** + * Get cart item block. + * + * @param FixtureInterface $product + * @return \Magento\GroupedProduct\Test\Block\Cart\Sidebar\Item + */ + public function getCartItem(FixtureInterface $product) + { + return $this->blockFactory->create( + 'Magento\GroupedProduct\Test\Block\Cart\Sidebar\Item', + [ + 'element' => $this->_rootElement, + 'config' => [ + 'associated_cart_items' => $this->findCartItems($product), + ] + ] + ); + } + + /** + * Find cart item blocks for associated products. + * + * @param FixtureInterface $product + * @return array + */ + protected function findCartItems(FixtureInterface $product) + { + $cartItems = []; + + /** @var GroupedProduct $product */ + $associatedProducts = $product->getAssociated()['products']; + foreach ($associatedProducts as $product) { + $cartItems[$product->getSku()] = parent::getCartItem($product); + } + + return $cartItems; + } +} diff --git a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Cart/Sidebar/Item.php b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Cart/Sidebar/Item.php new file mode 100644 index 0000000000000000000000000000000000000000..a9bbf2f8ae33108f01a756380183c159f21d0fa3 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Cart/Sidebar/Item.php @@ -0,0 +1,28 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\GroupedProduct\Test\Block\Cart\Sidebar; + +use Magento\Checkout\Test\Block\Cart\Sidebar\Item as ProductItem; + +/** + * Grouped Product item block on mini Cart. + */ +class Item extends ProductItem +{ + /** + * Remove grouped product item from mini cart. + * + * @return void + */ + public function removeItemFromMiniCart() + { + foreach ($this->config['associated_cart_items'] as $productItem) { + /** @var ProductItem $productItem */ + $productItem->removeItemFromMiniCart(); + } + } +} diff --git a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Page/CmsIndex.xml b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Page/CmsIndex.xml new file mode 100644 index 0000000000000000000000000000000000000000..73c7c92e6b77abc9bcfaede1fee006773d9fa97c --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Page/CmsIndex.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/pages.xsd"> + <page name="CmsIndex" mca="cms/index/index"> + <block name="cartSidebarBlock"> + <render name="grouped" class="Magento\GroupedProduct\Test\Block\Cart\Sidebar"/> + </block> + </page> +</config> diff --git a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/DeleteProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/DeleteProductEntityTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..3f8e22cc953bc5b0c94f435dc69341da10c38893 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/DeleteProductEntityTest.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/variations.xsd"> + <testCase name="Magento\Catalog\Test\TestCase\Product\DeleteProductEntityTest"> + <variation name="DeleteProductEntityTestVariation8" firstConstraint="Magento\Catalog\Test\Constraint\AssertProductSuccessDeleteMessage" method="test"> + <data name="products" xsi:type="string">groupedProduct::default</data> + <data name="isRequired" xsi:type="string">Yes</data> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductSuccessDeleteMessage" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductNotInGrid" /> + <constraint name="Magento\Catalog\Test\Constraint\AssertProductIsNotDisplayingOnFrontend" /> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/DeleteProductFromMiniShoppingCartTest.xml b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/DeleteProductFromMiniShoppingCartTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..af0b284725291c71795a6ac08e8c7cdc14ba8f96 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/DeleteProductFromMiniShoppingCartTest.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> + <testCase name="Magento\Checkout\Test\TestCase\DeleteProductFromMiniShoppingCartTest" summary="Delete Grouped Product from Mini Shopping Cart" ticketId="MAGETWO-29104"> + <variation name="DeleteGroupedProductFromMiniShoppingCartTestVariation"> + <data name="products" xsi:type="string">groupedProduct::default</data> + <data name="deletedProductIndex" xsi:type="string">0</data> + <constraint name="Magento\Checkout\Test\Constraint\AssertCartIsEmpty" /> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Block/Navigation.php b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Block/Navigation.php index 602316510e825dda680c14eb39eaff5f18a04f45..256d0caa1d980bfe82719e296395b8ed9e89d69a 100644 --- a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Block/Navigation.php +++ b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Block/Navigation.php @@ -14,6 +14,13 @@ use Magento\Mtf\Client\Locator; */ class Navigation extends Block { + /** + * Locator for loaded "narrow-by-list" block. + * + * @var string + */ + protected $loadedNarrowByList = '#narrow-by-list[role="tablist"]'; + /** * Locator value for "Clear All" link. * @@ -59,11 +66,14 @@ class Navigation extends Block */ public function getFilters() { + $this->waitForElementVisible($this->loadedNarrowByList); + $options = $this->_rootElement->getElements(sprintf($this->optionTitle, ''), Locator::SELECTOR_XPATH); $data = []; foreach ($options as $option) { $data[] = strtoupper($option->getText()); } + return $data; } @@ -80,6 +90,7 @@ class Navigation extends Block $expandFilterButton = sprintf($this->optionTitle, $filter); $links = sprintf($this->filterLink, $filter); + $this->waitForElementVisible($this->loadedNarrowByList); if (!$this->_rootElement->find($links, Locator::SELECTOR_XPATH)->isVisible()) { $this->_rootElement->find($expandFilterButton, Locator::SELECTOR_XPATH)->click(); } diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Handler/OrderInjectable/Webapi.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Handler/OrderInjectable/Webapi.php new file mode 100644 index 0000000000000000000000000000000000000000..a1e89784737ae43635a12599a3ff534ed65c86c4 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Handler/OrderInjectable/Webapi.php @@ -0,0 +1,329 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Sales\Test\Handler\OrderInjectable; + +use Magento\Bundle\Test\Fixture\BundleProduct; +use Magento\ConfigurableProduct\Test\Fixture\ConfigurableProduct; +use Magento\Downloadable\Test\Fixture\DownloadableProduct; +use Magento\Sales\Test\Fixture\OrderInjectable; +use Magento\Mtf\Fixture\FixtureInterface; +use Magento\Mtf\Util\Protocol\CurlTransport; +use Magento\Mtf\Handler\Webapi as AbstractWebapi; +use Magento\Mtf\Util\Protocol\CurlTransport\WebapiDecorator; + +/** + * Create new order via web API. + */ +class Webapi extends AbstractWebapi implements OrderInjectableInterface +{ + /** + * Mapping values for data. + * + * @var array + */ + protected $mappingData = [ + 'region_id' => [ + 'California' => '12', + ], + 'country_id' => [ + 'United States' => 'US', + ], + ]; + + /** + * Order quote value. + * + * @var string + */ + protected $quote; + + /** + * First part of Web API url for creating order. + * + * @var string + */ + protected $url; + + /** + * Creating order using quote via web API. + * + * @param FixtureInterface|null $fixture [optional] + * @return array + */ + public function persist(FixtureInterface $fixture = null) + { + /** @var OrderInjectable $fixture */ + $this->createQuote($fixture); + $this->url = $_ENV['app_frontend_url'] . 'rest/V1/carts/' . (int)$this->quote; + $this->setProducts($fixture); + $this->setCoupon($fixture); + $this->setAddress($fixture, 'billing'); + $this->setAddress($fixture, 'shipping'); + $this->setShippingMethod($fixture); + $this->setPaymentMethod($fixture); + $orderId = $this->placeOrder(); + + return ['id' => sprintf("%09d", $orderId)]; + } + + /** + * Create checkout quote. + * + * @param OrderInjectable $order + * @return void + * @throws \Exception + */ + protected function createQuote(OrderInjectable $order) + { + $url = $_ENV['app_frontend_url'] . 'rest/V1/customers/' . $order->getCustomerId()->getId() . '/carts'; + $data = '{"customerId": "' . $order->getCustomerId()->getId() . '"}'; + $this->webapiTransport->write($url, $data); + $response = json_decode($this->webapiTransport->read(), true); + $this->webapiTransport->close(); + if (!is_numeric($response)) { + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); + throw new \Exception('Could not create checkout quote viw web API!'); + } + $this->quote = $response; + } + + /** + * Add products to quote. + * + * @param OrderInjectable $order + * @return void + * @throws \Exception + */ + protected function setProducts(OrderInjectable $order) + { + $url = $_ENV['app_frontend_url'] . 'rest/V1/carts/items'; + $products = $order->getEntityId()['products']; + foreach ($products as $product) { + $data = [ + 'cartItem' => [ + 'sku' => $product->getSku(), + 'qty' => isset($product->getCheckoutData()['qty']) ? $product->getCheckoutData()['qty'] : 1, + 'quote_id' => $this->quote + ] + ]; + $methodName = 'prepare' . ucfirst($product->getDataConfig()['type_id']) . 'Options'; + if (method_exists($this, $methodName)) { + $data['cartItem']['product_option'] = $this->$methodName($product); + } + $this->webapiTransport->write($url, $data); + $response = (array)json_decode($this->webapiTransport->read(), true); + $this->webapiTransport->close(); + if (isset($response['message'])) { + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); + throw new \Exception('Could not add product item to quote!'); + } + } + } + + /** + * Set coupon to quote. + * + * @param OrderInjectable $order + * @return void + * @throws \Exception + */ + protected function setCoupon(OrderInjectable $order) + { + if (!$order->hasData('coupon_code')) { + return; + } + $url = $this->url . '/coupons/' . $order->getCouponCode()->getCouponCode(); + $data = [ + 'cartId' => $this->quote, + 'couponCode' => $order->getCouponCode()->getCouponCode() + ]; + $this->webapiTransport->write($url, $data, WebapiDecorator::PUT); + $response = json_decode($this->webapiTransport->read(), true); + $this->webapiTransport->close(); + if ($response !== true) { + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); + throw new \Exception('Could not apply coupon code!'); + } + } + + /** + * Set address to quote. + * + * @param OrderInjectable $order + * @param string $addressType billing|shipping + * @return void + * @throws \Exception + */ + protected function setAddress(OrderInjectable $order, $addressType) + { + $url = $this->url . "/$addressType-address"; + if ($addressType == 'billing') { + $address = $order->getBillingAddressId(); + } else { + if (!$order->hasData('shipping_method')) { + return; + } + $address = $order->hasData('shipping_address_id') + ? $order->getShippingAddressId() + : $order->getBillingAddressId(); + } + unset($address['default_billing']); + unset($address['default_shipping']); + foreach (array_keys($this->mappingData) as $key) { + if (isset($address[$key])) { + $address[$key] = $this->mappingData[$key][$address[$key]]; + } + } + $data = ["address" => $address]; + $this->webapiTransport->write($url, $data); + $response = json_decode($this->webapiTransport->read(), true); + $this->webapiTransport->close(); + if (!is_numeric($response)) { + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); + throw new \Exception("Could not set $addressType addresss to quote!"); + } + } + + /** + * Set shipping method to quote. + * + * @param OrderInjectable $order + * @return void + * @throws \Exception + */ + protected function setShippingMethod(OrderInjectable $order) + { + if (!$order->hasData('shipping_method')) { + return; + } + $url = $this->url . '/selected-shipping-method'; + list($carrier, $method) = explode('_', $order->getShippingMethod()); + $data = [ + "carrierCode" => $carrier, + "methodCode" => $method + ]; + $this->webapiTransport->write($url, $data, WebapiDecorator::PUT); + $response = json_decode($this->webapiTransport->read(), true); + $this->webapiTransport->close(); + if ($response !== true) { + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); + throw new \Exception('Could not set shipping method to quote!'); + } + } + + /** + * Set payment method to quote. + * + * @param OrderInjectable $order + * @return void + * @throws \Exception + */ + protected function setPaymentMethod(OrderInjectable $order) + { + $url = $this->url . '/selected-payment-method'; + $data = [ + "cartId" => $this->quote, + "method" => $order->getPaymentAuthExpiration() + ]; + $this->webapiTransport->write($url, $data, WebapiDecorator::PUT); + $response = json_decode($this->webapiTransport->read(), true); + $this->webapiTransport->close(); + if (!is_numeric($response)) { + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); + throw new \Exception('Could not set payment method to quote!'); + } + } + + /** + * Place order. + * + * @return array + * @throws \Exception + */ + protected function placeOrder() + { + $url = $this->url . '/order'; + $data = ["cartId" => $this->quote]; + $this->webapiTransport->write($url, $data, WebapiDecorator::PUT); + $response = json_decode($this->webapiTransport->read(), true); + $this->webapiTransport->close(); + if (!is_numeric($response)) { + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); + throw new \Exception('Could not place order via web API!'); + } + + return $response; + } + + /** + * Prepare configurable product options. + * + * @param ConfigurableProduct $product + * @return array + */ + protected function prepareConfigurableOptions(ConfigurableProduct $product) + { + $options = []; + $attributesData = $product->getDataFieldConfig('configurable_attributes_data')['source']->getAttributesData(); + foreach ($product->getCheckoutData()['options']['configurable_options'] as $checkoutOption) { + $options[] = [ + 'option_id' => $attributesData[$checkoutOption['title']]['attribute_id'], + 'option_value' => $attributesData[$checkoutOption['title']]['options'][$checkoutOption['value']]['id'], + ]; + } + + return ['extension_attributes' => ['configurable_item_options' => $options]]; + } + + /** + * Prepare bundle product options. + * + * @param BundleProduct $product + * @return array + */ + protected function prepareBundleOptions(BundleProduct $product) + { + $options = []; + foreach ($product->getCheckoutData()['options']['bundle_options'] as $checkoutOption) { + foreach ($product->getBundleSelections()['bundle_options'] as $productOption) { + if (strpos($productOption['title'], $checkoutOption['title']) !== false) { + $option = []; + foreach ($productOption['assigned_products'] as $productData) { + if (strpos($productData['search_data']['name'], $checkoutOption['value']['name']) !== false) { + $qty = isset($checkoutOption['qty']) + ? $checkoutOption['qty'] + : $productData['data']['selection_qty']; + $option['option_id'] = $productData['option_id']; + $option['option_selections'][] = $productData['selection_id']; + $option['option_qty'] = $qty; + } + } + $options[] = $option; + } + } + } + + return ['extension_attributes' => ['bundle_options' => $options]]; + } + + /** + * Prepare downloadable product options. + * + * @param DownloadableProduct $product + * @return array + */ + protected function prepareDownloadableOptions(DownloadableProduct $product) + { + $checkoutData = $product->getCheckoutData(); + $links = []; + foreach ($checkoutData['options']['links'] as $link) { + $links[] = $link['id']; + } + + return ['extension_attributes' => ['downloadable_option' => ['downloadable_links' => $links]]]; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Repository/OrderInjectable.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/Repository/OrderInjectable.xml index 1429cfef5546424faeae806818033ebb5e03172e..8949fe1957d60a49352cd14af40215a94a697e03 100644 --- a/dev/tests/functional/tests/app/Magento/Sales/Test/Repository/OrderInjectable.xml +++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Repository/OrderInjectable.xml @@ -221,7 +221,6 @@ <field name="store_id" xsi:type="array"> <item name="dataset" xsi:type="string">default_store_view</item> </field> - <field name="shipping_method" xsi:type="string">flatrate_flatrate</field> <field name="payment_auth_expiration" xsi:type="array"> <item name="method" xsi:type="string">checkmo</item> </field> diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/etc/webapi/di.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/etc/webapi/di.xml new file mode 100644 index 0000000000000000000000000000000000000000..cfc53a1e744c0916c115a370f8aedb8613c92c70 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Sales/Test/etc/webapi/di.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" ?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd"> + <preference for="\Magento\Sales\Test\Handler\OrderInjectable\OrderInjectableInterface" type="\Magento\Sales\Test\Handler\OrderInjectable\Webapi" /> +</config> diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Constraint/AssertCartPriceRuleForm.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Constraint/AssertCartPriceRuleForm.php index d8a6445267051487c7f813a13dc62be1c8fd6981..bbfd4495e63d6844c8b2c2b764dc614a47a12dac 100644 --- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Constraint/AssertCartPriceRuleForm.php +++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Constraint/AssertCartPriceRuleForm.php @@ -26,7 +26,7 @@ class AssertCartPriceRuleForm extends AbstractConstraint 'actions_serialized', 'from_date', 'to_date', - 'id' + 'rule_id' ]; /** diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Fixture/SalesRule.xml b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Fixture/SalesRule.xml index e02f275c2dfdd37e68790c5bb936cdf3704ce7d8..c82680f07a6f4751898e3ce76a81a329a100153a 100644 --- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Fixture/SalesRule.xml +++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Fixture/SalesRule.xml @@ -14,7 +14,7 @@ repository_class="Magento\SalesRule\Test\Repository\SalesRule" handler_interface="Magento\SalesRule\Test\Handler\SalesRule\SalesRuleInterface" class="Magento\SalesRule\Test\Fixture\SalesRule"> - <field name="rule_id" is_required="1" /> + <field name="rule_id" is_required="0" group="null"/> <field name="name" group="rule_information" /> <field name="description" group="rule_information" /> <field name="from_date" group="rule_information" source="Magento\Backend\Test\Fixture\Source\Date" /> @@ -38,7 +38,6 @@ <field name="use_auto_generation" group="rule_information" /> <field name="uses_per_coupon" group="rule_information" /> <field name="simple_free_shipping" group="actions" /> - <field name="id" /> <field name="website_ids" group="rule_information" /> <field name="customer_group_ids" group="rule_information" /> <field name="store_labels" group="labels" /> diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Handler/SalesRule/Curl.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Handler/SalesRule/Curl.php index 8de3162663eb03999d0758b59ba8278e0d61f4ed..e6a910a76fa656acc36dbb993f47efb476c89d9e 100644 --- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Handler/SalesRule/Curl.php +++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Handler/SalesRule/Curl.php @@ -10,12 +10,27 @@ use Magento\Backend\Test\Handler\Conditions; use Magento\Mtf\Fixture\FixtureInterface; use Magento\Mtf\Util\Protocol\CurlTransport; use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator; +use Magento\SalesRule\Test\Fixture\SalesRule; /** * Curl handler for creating sales rule. */ class Curl extends Conditions implements SalesRuleInterface { + /** + * Sales rule instance. + * + * @var SalesRule + */ + protected $fixture; + + /** + * Prepared data for request to create sales rule. + * + * @var array + */ + protected $data; + /** * Map of type parameter. * @@ -69,7 +84,7 @@ class Curl extends Conditions implements SalesRuleInterface ], 'is_rss' => [ 'Yes' => 1, - 'No' => 2, + 'No' => 0, ], 'simple_action' => [ 'Percent of product price discount' => 'by_percent', @@ -79,11 +94,11 @@ class Curl extends Conditions implements SalesRuleInterface ], 'apply_to_shipping' => [ 'Yes' => 1, - 'No' => 2, + 'No' => 0, ], 'stop_rules_processing' => [ 'Yes' => 1, - 'No' => 2, + 'No' => 0, ], 'simple_free_shipping' => [ 'No' => 0, @@ -123,23 +138,9 @@ class Curl extends Conditions implements SalesRuleInterface public function persist(FixtureInterface $fixture = null) { $this->mapTypeParams = array_merge($this->mapTypeParams, $this->additionalMapTypeParams); - $url = $_ENV['app_backend_url'] . 'sales_rule/promo_quote/save/'; - $data = $this->replaceMappingData($fixture->getData()); - $data['rule'] = []; - if (isset($data['conditions_serialized'])) { - $data['rule']['conditions'] = $this->prepareCondition($data['conditions_serialized']); - unset($data['conditions_serialized']); - } - $data['website_ids'] = $this->prepareWebsites($data); - $data['customer_group_ids'] = $this->prepareCustomerGroup($data); - - if (isset($data['actions_serialized'])) { - $this->mapTypeParams['Conditions combination']['type'] = - 'Magento\SalesRule\Model\Rule\Condition\Product\Combine'; - $data['rule']['actions'] = $this->prepareCondition($data['actions_serialized']); - unset($data['actions_serialized']); - } + $data = $this->prepareData($fixture); + $url = $_ENV['app_backend_url'] . 'sales_rule/promo_quote/save/'; $curl = new BackendDecorator(new CurlTransport(), $this->_configuration); $curl->write($url, $data); $response = $curl->read(); @@ -153,42 +154,70 @@ class Curl extends Conditions implements SalesRuleInterface throw new \Exception('Cannot find Sales Rule id'); } - return ['id' => $matches[1]]; + return ['rule_id' => $matches[1]]; + } + + /** + * Prepare data for creating sales rule request. + * + * @param FixtureInterface $fixture + * @return array + */ + public function prepareData(FixtureInterface $fixture) + { + $this->fixture = $fixture; + $this->data = $this->replaceMappingData($this->fixture->getData()); + + $this->data['rule'] = []; + if (isset($this->data['conditions_serialized'])) { + $this->data['rule']['conditions'] = $this->prepareCondition($this->data['conditions_serialized']); + unset($this->data['conditions_serialized']); + } + + $this->prepareWebsites(); + $this->prepareCustomerGroup(); + + if (isset($this->data['actions_serialized'])) { + $this->mapTypeParams['Conditions combination']['type'] = + 'Magento\SalesRule\Model\Rule\Condition\Product\Combine'; + $this->data['rule']['actions'] = $this->prepareCondition($this->data['actions_serialized']); + unset($this->data['actions_serialized']); + } + + return $this->data; } /** * Prepare website data for curl. * - * @param array $data * @return array */ - protected function prepareWebsites(array $data) + protected function prepareWebsites() { $websiteIds = []; - if (!empty($data['website_ids'])) { - foreach ($data['website_ids'] as $name) { + if (!empty($this->data['website_ids'])) { + foreach ($this->data['website_ids'] as $name) { $websiteIds[] = isset($this->websiteIds[$name]) ? $this->websiteIds[$name] : $name; } } - return $websiteIds; + $this->data['website_ids'] = $websiteIds; } /** * Prepare customer group data for curl. * - * @param array $data * @return array */ - protected function prepareCustomerGroup(array $data) + protected function prepareCustomerGroup() { $groupIds = []; - if (!empty($data['customer_group_ids'])) { - foreach ($data['customer_group_ids'] as $name) { + if (!empty($this->data['customer_group_ids'])) { + foreach ($this->data['customer_group_ids'] as $name) { $groupIds[] = isset($this->customerIds[$name]) ? $this->customerIds[$name] : $name; } } - return $groupIds; + $this->data['customer_group_ids'] = $groupIds; } } diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Handler/SalesRule/Webapi.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Handler/SalesRule/Webapi.php new file mode 100644 index 0000000000000000000000000000000000000000..66597cf0edfcdf2d94118d8217620442c2572de2 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Handler/SalesRule/Webapi.php @@ -0,0 +1,258 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\SalesRule\Test\Handler\SalesRule; + +use Magento\Mtf\Config\DataInterface; +use Magento\Mtf\Fixture\FixtureInterface; +use Magento\Mtf\System\Event\EventManagerInterface; +use Magento\Mtf\Util\Protocol\CurlTransport; +use Magento\Mtf\Util\Protocol\CurlTransport\WebapiDecorator; +use Magento\Mtf\Handler\Webapi as AbstractWebapi; +use Magento\SalesRule\Test\Fixture\SalesRule; + +/** + * Create new sales rule via webapi. + */ +class Webapi extends AbstractWebapi implements SalesRuleInterface +{ + /** + * Sales rule instance. + * + * @var SalesRule + */ + protected $fixture; + + /** + * Prepared data for creating sales rule. + * + * @var array + */ + protected $data; + + /** + * Curl handler instance. + * + * @var Curl + */ + protected $handlerCurl; + + /** + * List fields that only relate to coupon. + * + * @var array + */ + protected $couponFields = [ + 'coupon_code' + ]; + + + /** + * @constructor + * @param DataInterface $configuration + * @param EventManagerInterface $eventManager + * @param WebapiDecorator $webapiTransport + * @param Curl $handlerCurl + */ + public function __construct( + DataInterface $configuration, + EventManagerInterface $eventManager, + WebapiDecorator $webapiTransport, + Curl $handlerCurl + ) { + parent::__construct($configuration, $eventManager, $webapiTransport); + $this->handlerCurl = $handlerCurl; + } + + /** + * Post request for creating sales rule. + * + * @param FixtureInterface|null $fixture [optional] + * @return array + * @throws \Exception + */ + public function persist(FixtureInterface $fixture = null) + { + $data = $this->prepareData($fixture); + $url = $_ENV['app_frontend_url'] . 'rest/V1/salesRules'; + + $this->webapiTransport->write($url, $data); + $response = json_decode($this->webapiTransport->read(), true); + $this->webapiTransport->close(); + + if (empty($response['rule_id'])) { + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); + throw new \Exception('sales rule creation by webapi handler was not successful!'); + } + + $this->createCoupon($response['rule_id']); + + return ['rule_id' => $response['rule_id']]; + } + + /** + * Prepare sales rule data for webapi request. + * + * @param FixtureInterface $fixture + * @return array + */ + public function prepareData(FixtureInterface $fixture) + { + $this->fixture = $fixture; + $this->data = $this->handlerCurl->prepareData($fixture); + + $this->prepareRuleInformation(); + $this->prepareConditions(); + $this->prepareActions(); + $this->prepareLabels(); + + unset($this->data['rule']); + return ['rule' => $this->data]; + } + + /** + * Preparation of "Rule Information" tab. + * + * @return void + */ + protected function prepareRuleInformation() + { + $this->data = array_diff_key($this->data, array_flip($this->couponFields)); + $this->data['coupon_type'] = strtoupper(str_replace(' ', '_', $this->fixture->getCouponType())); + } + + /** + * Preparation of "Conditions" tab. + * + * @return void + */ + protected function prepareConditions() + { + if (isset($this->data['rule']['conditions'])) { + $this->data['condition'] = $this->convertCondition($this->data['rule']['conditions'])[0]; + } + } + + /** + * Preparation of "Actions" tab. + * + * @return void + */ + protected function prepareActions() + { + if (isset($this->data['rule']['actions'])) { + $this->data['action_condition'] = $this->convertCondition($this->data['rule']['actions'])[0]; + } + } + + /** + * Preparation of "Labels" tab. + * + * @return void + */ + protected function prepareLabels() + { + if (isset($this->data['store_labels'])) { + foreach ($this->data['store_labels'] as $storeId => $label) { + $this->data['store_labels'][$storeId] = [ + 'store_id' => $storeId, + 'store_label' => $label + ]; + } + } + } + + /** + * Create coupon related to sales rule . + * + * @param int $ruleId + * @return void + * @throws \Exception + */ + protected function createCoupon($ruleId) + { + if (!$this->fixture->hasData('coupon_code')) { + return; + } + + $url = $_ENV['app_frontend_url'] . 'rest/V1/coupons'; + $data = [ + 'coupon' => array_filter([ + 'rule_id' => $ruleId, + 'code' => $this->fixture->getCouponCode(), + 'type' => $this->data['coupon_type'], + 'usage_limit' => isset($this->data['uses_per_coupon']) + ? $this->data['uses_per_coupon'] + : null, + 'usage_per_customer' => isset($this->data['usage_per_customer']) + ? $this->data['usage_per_customer'] + : null, + 'is_primary' => true + ]) + ]; + + $this->webapiTransport->write($url, $data); + $response = json_decode($this->webapiTransport->read(), true); + $this->webapiTransport->close(); + + if (empty($response['coupon_id'])) { + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); + throw new \Exception('Coupon creation by webapi handler was not successful!'); + } + } + + /** + * Convert condition data to webapi structure request. + * + * @param array $condition + * @param string $prefix [optional] + * @param int $indent [optional] + * @return array + * + * @SuppressWarnings(PHPMD.NPathComplexity) + */ + protected function convertCondition(array $condition, $prefix = '', $indent = 1) + { + $result = []; + + $key = "{$prefix}{$indent}"; + $isContinue = isset($condition[$key]); + while ($isContinue) { + $childCondition = $this->convertCondition($condition, "{$prefix}{$indent}--", 1); + $result[] = array_filter([ + 'condition_type' => $condition[$key]['type'], + 'aggregator_type' => isset($condition[$key]['aggregator']) + ? $condition[$key]['aggregator'] + : null, + 'attribute_name' => isset($condition[$key]['attribute']) + ? $condition[$key]['attribute'] + : null, + 'operator' => isset($condition[$key]['operator']) + ? $condition[$key]['operator'] + : null, + 'value' => $condition[$key]['value'], + 'conditions' => empty($childCondition) ? null : $childCondition + ], [$this, 'filterCondition']); + + $indent += 1; + $key = "{$prefix}{$indent}"; + $isContinue = isset($condition[$key]); + } + + return $result; + } + + /** + * Filter condition data. + * + * @param mixed $var + * @return bool + */ + public function filterCondition($var) + { + return null !== $var; + } +} diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.xml b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.xml index 67409f56197164f79354a5d9f2c2645bce598c53..4c384ea3f8853265fa0ba9877a56492a871914dc 100644 --- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.xml +++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.xml @@ -11,14 +11,14 @@ <data name="salesRule/data/name" xsi:type="string">Cart Price Rule1 %isolation%</data> <data name="salesRule/data/description" xsi:type="string">Cart Price Rule Description %isolation%</data> <data name="salesRule/data/is_active" xsi:type="string">Active</data> - <data name="salesRule/data/website_ids/website_0" xsi:type="string">Main Website</data> - <data name="salesRule/data/customer_group_ids/group_0" xsi:type="string">NOT LOGGED IN</data> + <data name="salesRule/data/website_ids/0" xsi:type="string">Main Website</data> + <data name="salesRule/data/customer_group_ids/0" xsi:type="string">NOT LOGGED IN</data> <data name="salesRule/data/coupon_type" xsi:type="string">No Coupon</data> <data name="salesRule/data/simple_action" xsi:type="string">Percent of product price discount</data> <data name="salesRule/data/discount_amount" xsi:type="string">50</data> <data name="salesRule/data/apply_to_shipping" xsi:type="string">No</data> <data name="salesRule/data/simple_free_shipping" xsi:type="string">No</data> - <data name="salesRule/data/store_labels/store_labels_0" xsi:type="string">Sales Cart Rule labels</data> + <data name="salesRule/data/store_labels/0" xsi:type="string">Sales Cart Rule labels</data> <data name="productQuantity/productForSalesRule1" xsi:type="string">1</data> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleSuccessSaveMessage" /> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleForm" /> @@ -28,15 +28,15 @@ <data name="salesRule/data/name" xsi:type="string">Cart Price Rule2 %isolation%</data> <data name="salesRule/data/description" xsi:type="string">Cart Price Rule Description %isolation%</data> <data name="salesRule/data/is_active" xsi:type="string">Active</data> - <data name="salesRule/data/website_ids/website_0" xsi:type="string">Main Website</data> - <data name="salesRule/data/customer_group_ids/group_0" xsi:type="string">NOT LOGGED IN</data> + <data name="salesRule/data/website_ids/0" xsi:type="string">Main Website</data> + <data name="salesRule/data/customer_group_ids/0" xsi:type="string">NOT LOGGED IN</data> <data name="salesRule/data/coupon_type" xsi:type="string">Specific Coupon</data> <data name="salesRule/data/coupon_code" xsi:type="string">1A2B3C-456-zxc-%isolation%</data> <data name="salesRule/data/simple_action" xsi:type="string">Fixed amount discount</data> <data name="salesRule/data/discount_amount" xsi:type="string">35</data> <data name="salesRule/data/apply_to_shipping" xsi:type="string">No</data> <data name="salesRule/data/simple_free_shipping" xsi:type="string">No</data> - <data name="salesRule/data/store_labels/store_labels_0" xsi:type="string">Coupon code+fixed amount discount</data> + <data name="salesRule/data/store_labels/0" xsi:type="string">Coupon code+fixed amount discount</data> <data name="productQuantity/productForSalesRule1" xsi:type="string">2</data> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleSuccessSaveMessage" /> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleForm" /> @@ -46,15 +46,15 @@ <data name="salesRule/data/name" xsi:type="string">Cart Price Rule3 %isolation%</data> <data name="salesRule/data/description" xsi:type="string">Cart Price Rule Description %isolation%</data> <data name="salesRule/data/is_active" xsi:type="string">Active</data> - <data name="salesRule/data/website_ids/website_0" xsi:type="string">Main Website</data> - <data name="salesRule/data/customer_group_ids/group_0" xsi:type="string">NOT LOGGED IN</data> + <data name="salesRule/data/website_ids/0" xsi:type="string">Main Website</data> + <data name="salesRule/data/customer_group_ids/0" xsi:type="string">NOT LOGGED IN</data> <data name="salesRule/data/coupon_type" xsi:type="string">Specific Coupon</data> <data name="salesRule/data/coupon_code" xsi:type="string">Lorem ipsum dolor sit amet, consectetur adipiscing elit - %isolation%</data> <data name="salesRule/data/simple_action" xsi:type="string">Fixed amount discount for whole cart</data> <data name="salesRule/data/discount_amount" xsi:type="string">60</data> <data name="salesRule/data/apply_to_shipping" xsi:type="string">No</data> <data name="salesRule/data/simple_free_shipping" xsi:type="string">No</data> - <data name="salesRule/data/store_labels/store_labels_0" xsi:type="string">Coupon code+Fixed amount discount for whole cart</data> + <data name="salesRule/data/store_labels/0" xsi:type="string">Coupon code+Fixed amount discount for whole cart</data> <data name="productQuantity/productForSalesRule1" xsi:type="string">3</data> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleSuccessSaveMessage" /> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleForm" /> @@ -64,8 +64,8 @@ <data name="salesRule/data/name" xsi:type="string">Cart Price Rule4 %isolation%</data> <data name="salesRule/data/description" xsi:type="string">Cart Price Rule Description %isolation%</data> <data name="salesRule/data/is_active" xsi:type="string">Active</data> - <data name="salesRule/data/website_ids/website_0" xsi:type="string">Main Website</data> - <data name="salesRule/data/customer_group_ids/group_0" xsi:type="string">NOT LOGGED IN</data> + <data name="salesRule/data/website_ids/0" xsi:type="string">Main Website</data> + <data name="salesRule/data/customer_group_ids/0" xsi:type="string">NOT LOGGED IN</data> <data name="salesRule/data/coupon_type" xsi:type="string">Specific Coupon</data> <data name="salesRule/data/coupon_code" xsi:type="string">1A2B3C-456-zxc-%isolation%</data> <data name="salesRule/data/simple_action" xsi:type="string">Buy X get Y free (discount amount is Y)</data> @@ -73,7 +73,7 @@ <data name="salesRule/data/discount_step" xsi:type="string">3</data> <data name="salesRule/data/apply_to_shipping" xsi:type="string">No</data> <data name="salesRule/data/simple_free_shipping" xsi:type="string">No</data> - <data name="salesRule/data/store_labels/store_labels_0" xsi:type="string">Buy X get Y free</data> + <data name="salesRule/data/store_labels/0" xsi:type="string">Buy X get Y free</data> <data name="productQuantity/productForSalesRule1" xsi:type="string">4</data> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleSuccessSaveMessage" /> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleForm" /> @@ -84,8 +84,8 @@ <data name="salesRule/data/name" xsi:type="string">Cart Price Rule5 %isolation%</data> <data name="salesRule/data/description" xsi:type="string">Cart Price Rule Description %isolation%</data> <data name="salesRule/data/is_active" xsi:type="string">Active</data> - <data name="salesRule/data/website_ids/website_0" xsi:type="string">Main Website</data> - <data name="salesRule/data/customer_group_ids/group_0" xsi:type="string">General</data> + <data name="salesRule/data/website_ids/0" xsi:type="string">Main Website</data> + <data name="salesRule/data/customer_group_ids/0" xsi:type="string">General</data> <data name="salesRule/data/coupon_type" xsi:type="string">No Coupon</data> <data name="salesRule/data/simple_action" xsi:type="string">Percent of product price discount</data> <data name="salesRule/data/discount_amount" xsi:type="string">50</data> @@ -106,14 +106,14 @@ <data name="salesRule/data/name" xsi:type="string">Cart Price Rule6 %isolation%</data> <data name="salesRule/data/description" xsi:type="string">Cart Price Rule Description %isolation%</data> <data name="salesRule/data/is_active" xsi:type="string">Active</data> - <data name="salesRule/data/website_ids/website_0" xsi:type="string">Main Website</data> - <data name="salesRule/data/customer_group_ids/group_0" xsi:type="string">NOT LOGGED IN</data> + <data name="salesRule/data/website_ids/0" xsi:type="string">Main Website</data> + <data name="salesRule/data/customer_group_ids/0" xsi:type="string">NOT LOGGED IN</data> <data name="salesRule/data/coupon_type" xsi:type="string">No Coupon</data> <data name="salesRule/data/simple_action" xsi:type="string">Percent of product price discount</data> <data name="salesRule/data/discount_amount" xsi:type="string">50</data> <data name="salesRule/data/apply_to_shipping" xsi:type="string">Yes</data> <data name="salesRule/data/simple_free_shipping" xsi:type="string">No</data> - <data name="salesRule/data/store_labels/store_labels_0" xsi:type="string">Apply discount to Shipping Amount</data> + <data name="salesRule/data/store_labels/0" xsi:type="string">Apply discount to Shipping Amount</data> <data name="productQuantity/productForSalesRule1" xsi:type="string">1</data> <data name="productQuantity/productForSalesRule2" xsi:type="string">1</data> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleSuccessSaveMessage" /> @@ -129,14 +129,14 @@ <data name="salesRule/data/name" xsi:type="string">Cart Price Rule7 %isolation%</data> <data name="salesRule/data/description" xsi:type="string">Cart Price Rule Description %isolation%</data> <data name="salesRule/data/is_active" xsi:type="string">Active</data> - <data name="salesRule/data/website_ids/website_0" xsi:type="string">Main Website</data> - <data name="salesRule/data/customer_group_ids/group_0" xsi:type="string">NOT LOGGED IN</data> + <data name="salesRule/data/website_ids/0" xsi:type="string">Main Website</data> + <data name="salesRule/data/customer_group_ids/0" xsi:type="string">NOT LOGGED IN</data> <data name="salesRule/data/coupon_type" xsi:type="string">No Coupon</data> <data name="salesRule/data/simple_action" xsi:type="string">Percent of product price discount</data> <data name="salesRule/data/discount_amount" xsi:type="string">50</data> <data name="salesRule/data/apply_to_shipping" xsi:type="string">No</data> <data name="salesRule/data/simple_free_shipping" xsi:type="string">For matching items only</data> - <data name="salesRule/data/store_labels/store_labels_0" xsi:type="string">Free Shipping in conditions</data> + <data name="salesRule/data/store_labels/0" xsi:type="string">Free Shipping in conditions</data> <data name="productQuantity/productForSalesRule1" xsi:type="string">1</data> <data name="productQuantity/productForSalesRule2" xsi:type="string">1</data> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleSuccessSaveMessage" /> @@ -148,15 +148,15 @@ <data name="salesRule/data/name" xsi:type="string">Cart Price Rule8 %isolation%</data> <data name="salesRule/data/description" xsi:type="string">Cart Price Rule Description %isolation%</data> <data name="salesRule/data/is_active" xsi:type="string">Active</data> - <data name="salesRule/data/website_ids/website_0" xsi:type="string">Main Website</data> - <data name="salesRule/data/customer_group_ids/group_0" xsi:type="string">NOT LOGGED IN</data> + <data name="salesRule/data/website_ids/0" xsi:type="string">Main Website</data> + <data name="salesRule/data/customer_group_ids/0" xsi:type="string">NOT LOGGED IN</data> <data name="salesRule/data/coupon_type" xsi:type="string">No Coupon</data> <data name="salesRule/data/conditions_serialized" xsi:type="string">[Subtotal|is|150]</data> <data name="salesRule/data/simple_action" xsi:type="string">Percent of product price discount</data> <data name="salesRule/data/discount_amount" xsi:type="string">50</data> <data name="salesRule/data/apply_to_shipping" xsi:type="string">No</data> <data name="salesRule/data/simple_free_shipping" xsi:type="string">No</data> - <data name="salesRule/data/store_labels/store_labels_0" xsi:type="string">Sales Cart Rule labels</data> + <data name="salesRule/data/store_labels/0" xsi:type="string">Sales Cart Rule labels</data> <data name="productQuantity/productForSalesRule1" xsi:type="string">1</data> <data name="productQuantity/productForSalesRule2" xsi:type="string">1</data> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleSuccessSaveMessage" /> @@ -167,15 +167,15 @@ <data name="salesRule/data/name" xsi:type="string">Cart Price Rule9 %isolation%</data> <data name="salesRule/data/description" xsi:type="string">Cart Price Rule Description %isolation%</data> <data name="salesRule/data/is_active" xsi:type="string">Active</data> - <data name="salesRule/data/website_ids/website_0" xsi:type="string">Main Website</data> - <data name="salesRule/data/customer_group_ids/group_0" xsi:type="string">NOT LOGGED IN</data> + <data name="salesRule/data/website_ids/0" xsi:type="string">Main Website</data> + <data name="salesRule/data/customer_group_ids/0" xsi:type="string">NOT LOGGED IN</data> <data name="salesRule/data/coupon_type" xsi:type="string">No Coupon</data> <data name="salesRule/data/conditions_serialized" xsi:type="string">[Subtotal|is|150]</data> <data name="salesRule/data/simple_action" xsi:type="string">Percent of product price discount</data> <data name="salesRule/data/discount_amount" xsi:type="string">50</data> <data name="salesRule/data/apply_to_shipping" xsi:type="string">No</data> <data name="salesRule/data/simple_free_shipping" xsi:type="string">No</data> - <data name="salesRule/data/store_labels/store_labels_0" xsi:type="string">Subtotal Action-Condition test</data> + <data name="salesRule/data/store_labels/0" xsi:type="string">Subtotal Action-Condition test</data> <data name="productQuantity/productForSalesRule1" xsi:type="string">2</data> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleSuccessSaveMessage" /> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleForm" /> @@ -185,15 +185,15 @@ <data name="salesRule/data/name" xsi:type="string">Cart Price Rule10 %isolation%</data> <data name="salesRule/data/description" xsi:type="string">Cart Price Rule Description %isolation%</data> <data name="salesRule/data/is_active" xsi:type="string">Active</data> - <data name="salesRule/data/website_ids/website_0" xsi:type="string">Main Website</data> - <data name="salesRule/data/customer_group_ids/group_0" xsi:type="string">NOT LOGGED IN</data> + <data name="salesRule/data/website_ids/0" xsi:type="string">Main Website</data> + <data name="salesRule/data/customer_group_ids/0" xsi:type="string">NOT LOGGED IN</data> <data name="salesRule/data/coupon_type" xsi:type="string">No Coupon</data> <data name="salesRule/data/conditions_serialized" xsi:type="string">[Total Items Quantity|is|2]</data> <data name="salesRule/data/simple_action" xsi:type="string">Percent of product price discount</data> <data name="salesRule/data/discount_amount" xsi:type="string">50</data> <data name="salesRule/data/apply_to_shipping" xsi:type="string">No</data> <data name="salesRule/data/simple_free_shipping" xsi:type="string">No</data> - <data name="salesRule/data/store_labels/store_labels_0" xsi:type="string">Total Items Quantity is 2</data> + <data name="salesRule/data/store_labels/0" xsi:type="string">Total Items Quantity is 2</data> <data name="productQuantity/productForSalesRule1" xsi:type="string">2</data> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleSuccessSaveMessage" /> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleForm" /> @@ -203,15 +203,15 @@ <data name="salesRule/data/name" xsi:type="string">Cart Price Rule11 %isolation%</data> <data name="salesRule/data/description" xsi:type="string">Cart Price Rule Description %isolation%</data> <data name="salesRule/data/is_active" xsi:type="string">Active</data> - <data name="salesRule/data/website_ids/website_0" xsi:type="string">Main Website</data> - <data name="salesRule/data/customer_group_ids/group_0" xsi:type="string">NOT LOGGED IN</data> + <data name="salesRule/data/website_ids/0" xsi:type="string">Main Website</data> + <data name="salesRule/data/customer_group_ids/0" xsi:type="string">NOT LOGGED IN</data> <data name="salesRule/data/coupon_type" xsi:type="string">No Coupon</data> <data name="salesRule/data/conditions_serialized" xsi:type="string">[Total Weight|is|150]</data> <data name="salesRule/data/simple_action" xsi:type="string">Percent of product price discount</data> <data name="salesRule/data/discount_amount" xsi:type="string">50</data> <data name="salesRule/data/apply_to_shipping" xsi:type="string">No</data> <data name="salesRule/data/simple_free_shipping" xsi:type="string">No</data> - <data name="salesRule/data/store_labels/store_labels_0" xsi:type="string">Total Weight is 150</data> + <data name="salesRule/data/store_labels/0" xsi:type="string">Total Weight is 150</data> <data name="productQuantity/productForSalesRule1" xsi:type="string">1</data> <data name="productQuantity/productForSalesRule2" xsi:type="string">1</data> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleSuccessSaveMessage" /> @@ -227,15 +227,15 @@ <data name="salesRule/data/name" xsi:type="string">Cart Price Rule12 %isolation%</data> <data name="salesRule/data/description" xsi:type="string">Cart Price Rule Description %isolation%</data> <data name="salesRule/data/is_active" xsi:type="string">Active</data> - <data name="salesRule/data/website_ids/website_0" xsi:type="string">Main Website</data> - <data name="salesRule/data/customer_group_ids/group_0" xsi:type="string">NOT LOGGED IN</data> + <data name="salesRule/data/website_ids/0" xsi:type="string">Main Website</data> + <data name="salesRule/data/customer_group_ids/0" xsi:type="string">NOT LOGGED IN</data> <data name="salesRule/data/coupon_type" xsi:type="string">No Coupon</data> <data name="salesRule/data/conditions_serialized" xsi:type="string">{Conditions combination:[[Shipping Method|is|\[flatrate\] Fixed][Shipping Postcode|is|95814][Shipping State/Province|is|California][Shipping Country|is|United States]]}</data> <data name="salesRule/data/simple_action" xsi:type="string">Percent of product price discount</data> <data name="salesRule/data/discount_amount" xsi:type="string">50</data> <data name="salesRule/data/apply_to_shipping" xsi:type="string">No</data> <data name="salesRule/data/simple_free_shipping" xsi:type="string">No</data> - <data name="salesRule/data/store_labels/store_labels_0" xsi:type="string">Rule applied conditions combination</data> + <data name="salesRule/data/store_labels/0" xsi:type="string">Rule applied conditions combination</data> <data name="productQuantity/productForSalesRule1" xsi:type="string">1</data> <data name="productQuantity/productForSalesRule2" xsi:type="string">1</data> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleSuccessSaveMessage" /> @@ -246,15 +246,15 @@ <data name="salesRule/data/name" xsi:type="string">Cart Price Rule13 %isolation%</data> <data name="salesRule/data/description" xsi:type="string">Cart Price Rule Description %isolation%</data> <data name="salesRule/data/is_active" xsi:type="string">Active</data> - <data name="salesRule/data/website_ids/website_0" xsi:type="string">Main Website</data> - <data name="salesRule/data/customer_group_ids/group_0" xsi:type="string">NOT LOGGED IN</data> + <data name="salesRule/data/website_ids/0" xsi:type="string">Main Website</data> + <data name="salesRule/data/customer_group_ids/0" xsi:type="string">NOT LOGGED IN</data> <data name="salesRule/data/coupon_type" xsi:type="string">No Coupon</data> <data name="salesRule/data/conditions_serialized" xsi:type="string">{Product attribute combination:[Product Template|is|Default]}</data> <data name="salesRule/data/simple_action" xsi:type="string">Percent of product price discount</data> <data name="salesRule/data/discount_amount" xsi:type="string">50</data> <data name="salesRule/data/apply_to_shipping" xsi:type="string">No</data> <data name="salesRule/data/simple_free_shipping" xsi:type="string">No</data> - <data name="salesRule/data/store_labels/store_labels_0" xsi:type="string">Product attribute discount</data> + <data name="salesRule/data/store_labels/0" xsi:type="string">Product attribute discount</data> <data name="productQuantity/productForSalesRule1" xsi:type="string">1</data> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleSuccessSaveMessage" /> <constraint name="Magento\SalesRule\Test\Constraint\AssertCartPriceRuleForm" /> diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/etc/webapi/di.xml b/dev/tests/functional/tests/app/Magento/SalesRule/Test/etc/webapi/di.xml new file mode 100644 index 0000000000000000000000000000000000000000..d925be4507a3c05b84a14345d64c236b79ae421f --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/etc/webapi/di.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" ?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd"> + <preference for="Magento\SalesRule\Test\Handler\SalesRule\SalesRuleInterface" type="\Magento\SalesRule\Test\Handler\SalesRule\Webapi" /> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxClass/Webapi.php b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxClass/Webapi.php new file mode 100644 index 0000000000000000000000000000000000000000..e6a1ba3568948a2d07e428b47eab0caa849a76a0 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxClass/Webapi.php @@ -0,0 +1,41 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Tax\Test\Handler\TaxClass; + +use Magento\Mtf\Fixture\FixtureInterface; +use Magento\Mtf\Util\Protocol\CurlTransport; +use Magento\Mtf\Handler\Webapi as AbstractWebapi; + +/** + * Create Tax Class via Web API. + */ +class Webapi extends AbstractWebapi implements TaxClassInterface +{ + /** + * Persist Tax Class using Web API handler. + * + * @param FixtureInterface $fixture + * @return array + * @throws \Exception + */ + public function persist(FixtureInterface $fixture = null) + { + $data['taxClass'] = $fixture->getData(); + + $url = $_ENV['app_frontend_url'] . 'rest/V1/taxClasses'; + $this->webapiTransport->write($url, $data); + $response = json_decode($this->webapiTransport->read(), true); + $this->webapiTransport->close(); + + if (!is_numeric($response)) { + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); + throw new \Exception('Tax class creation by Web API handler was not successful!'); + } + + return ['id' => $response]; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRate/Curl.php b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRate/Curl.php index 2220821ccaa1ccbe14f2b8b5ad2ea39a97e988e8..8cb4ab4f8a99053d03ab641fdd394a7df18fe1a7 100644 --- a/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRate/Curl.php +++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRate/Curl.php @@ -6,53 +6,50 @@ namespace Magento\Tax\Test\Handler\TaxRate; +use Magento\Tax\Test\Fixture\TaxRate; use Magento\Mtf\Fixture\FixtureInterface; use Magento\Mtf\Handler\Curl as AbstractCurl; use Magento\Mtf\Util\Protocol\CurlTransport; use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator; /** - * Class Curl - * Curl handler for creating Tax Rate + * Curl handler for creating Tax Rate. */ class Curl extends AbstractCurl implements TaxRateInterface { /** - * Mapping for countries + * Mapping values for data. * * @var array */ - protected $countryId = [ - 'AU' => 'Australia', - 'US' => 'United States', - 'GB' => 'United Kingdom', + protected $mappingData = [ + 'tax_country_id' => [ + 'Australia' => 'AU', + 'United States' => 'US', + 'United Kingdom' => 'GB', + ], + 'tax_region_id' => [ + '*' => '0', + 'California' => '12', + 'New York' => '43', + 'Texas' => '57', + ], + 'zip_is_range' => [ + 'Yes' => '1', + 'No' => '0' + ] ]; /** - * Mapping for regions - * - * @var array - */ - protected $regionId = [ - '0' => '*', - '12' => 'California', - '43' => 'New York', - '57' => 'Texas', - ]; - - /** - * Post request for creating tax rate + * Post request for creating tax rate. * * @param FixtureInterface $fixture [optional] - * @return mixed|string + * @return array */ public function persist(FixtureInterface $fixture = null) { - $data = $fixture->getData(); - $data['tax_country_id'] = array_search($data['tax_country_id'], $this->countryId); - if (isset($data['tax_region_id'])) { - $data['tax_region_id'] = array_search($data['tax_region_id'], $this->regionId); - } + /** @var TaxRate $fixture */ + $data = $this->prepareData($fixture); $url = $_ENV['app_backend_url'] . 'tax/rate/ajaxSave/?isAjax=true'; $curl = new BackendDecorator(new CurlTransport(), $this->_configuration); @@ -65,7 +62,18 @@ class Curl extends AbstractCurl implements TaxRateInterface } /** - * Return saved tax rate id + * Prepare tax rate data. + * + * @param TaxRate $taxRate + * @return array + */ + public function prepareData(TaxRate $taxRate) + { + return $this->replaceMappingData($taxRate->getData()); + } + + /** + * Return saved tax rate id. * * @param $response * @return int|null diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRate/Webapi.php b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRate/Webapi.php new file mode 100644 index 0000000000000000000000000000000000000000..717e6927cc3c118faf637d485b8fae9b54724439 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRate/Webapi.php @@ -0,0 +1,70 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Tax\Test\Handler\TaxRate; + +use Magento\Tax\Test\Fixture\TaxRate; +use Magento\Mtf\Config\DataInterface; +use Magento\Mtf\Fixture\FixtureInterface; +use Magento\Mtf\Util\Protocol\CurlTransport; +use Magento\Mtf\Handler\Webapi as AbstractWebapi; +use Magento\Mtf\System\Event\EventManagerInterface; +use Magento\Mtf\Util\Protocol\CurlTransport\WebapiDecorator; + +/** + * Create Tax Rate via Web API. + */ +class Webapi extends AbstractWebapi implements TaxRateInterface +{ + /** + * Tax Rate cUrl handler. + * + * @var Curl + */ + protected $taxRateCurl; + + /** + * @constructor + * @param DataInterface $configuration + * @param EventManagerInterface $eventManager + * @param WebapiDecorator $webapiTransport + * @param Curl $taxRateCurl + */ + public function __construct( + DataInterface $configuration, + EventManagerInterface $eventManager, + WebapiDecorator $webapiTransport, + Curl $taxRateCurl + ) { + parent::__construct($configuration, $eventManager, $webapiTransport); + $this->taxRateCurl = $taxRateCurl; + } + + /** + * Persist Tax Rate using Web API handler. + * + * @param FixtureInterface $fixture + * @return array + * @throws \Exception + */ + public function persist(FixtureInterface $fixture = null) + { + /** @var TaxRate $fixture */ + $data['tax_rate'] = $this->taxRateCurl->prepareData($fixture); + + $url = $_ENV['app_frontend_url'] . 'rest/V1/taxRates'; + $this->webapiTransport->write($url, $data); + $response = json_decode($this->webapiTransport->read(), true); + $this->webapiTransport->close(); + + if (empty($response['id'])) { + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); + throw new \Exception('Tax rate creation by Web API handler was not successful!'); + } + + return ['id' => $response['id']]; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRule/Curl.php b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRule/Curl.php index 1e3d68e53e40f2dd391f5acaebf7f83b643c4230..3583e38bff8a5a3b1ef2258e0e6547ca87dad059 100644 --- a/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRule/Curl.php +++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRule/Curl.php @@ -6,19 +6,19 @@ namespace Magento\Tax\Test\Handler\TaxRule; +use Magento\Tax\Test\Fixture\TaxRule; use Magento\Mtf\Fixture\FixtureInterface; use Magento\Mtf\Handler\Curl as AbstractCurl; use Magento\Mtf\Util\Protocol\CurlTransport; use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator; /** - * Class Curl - * Curl handler for creating Tax Rule + * Curl handler for creating Tax Rule. */ class Curl extends AbstractCurl implements TaxRuleInterface { /** - * Default Tax Class values + * Default Tax Class values. * * @var array */ @@ -28,13 +28,15 @@ class Curl extends AbstractCurl implements TaxRuleInterface ]; /** - * Post request for creating tax rule + * Post request for creating tax rule. * * @param FixtureInterface $fixture - * @return mixed|null + * @return array + * @throws \Exception */ public function persist(FixtureInterface $fixture = null) { + /** @var TaxRule $fixture */ $data = $this->prepareData($fixture); $url = $_ENV['app_backend_url'] . 'tax/rule/save/?back=1'; @@ -44,42 +46,55 @@ class Curl extends AbstractCurl implements TaxRuleInterface $response = $curl->read(); $curl->close(); + if (!strpos($response, 'data-ui-id="messages-message-success"')) { + $this->_eventManager->dispatchEvent(['curl_failed'], [$response]); + throw new \Exception("Tax rate creation by curl handler was not successful!"); + } + preg_match("~Location: [^\s]*\/rule\/(\d+)~", $response, $matches); $id = isset($matches[1]) ? $matches[1] : null; + return ['id' => $id]; } /** - * Returns data for curl POST params + * Returns data for Web API params. * - * @param FixtureInterface $fixture - * @return mixed - * - * @SuppressWarnings(PHPMD.UnusedLocalVariable) + * @param TaxRule $fixture + * @return array */ - protected function prepareData($fixture) + protected function prepareData(TaxRule $fixture) { $data = $fixture->getData(); - $fields = [ - 'tax_rate', - 'tax_customer_class', - 'tax_product_class', - ]; + $data = $this->prepareFieldData($fixture, $data, 'tax_rate'); + $data = $this->prepareFieldData($fixture, $data, 'tax_product_class'); + $data = $this->prepareFieldData($fixture, $data, 'tax_customer_class'); - foreach ($fields as $field) { - if (!array_key_exists($field, $data)) { - $data[$field][] = $this->defaultTaxClasses[$field]; - continue; - } - $fieldFixture = $fixture->getDataFieldConfig($field); - $fieldFixture = $fieldFixture['source']->getFixture(); - foreach ($data[$field] as $key => $value) { - $id = $fieldFixture[$key]->getId(); - if ($id === null) { - $fieldFixture[$key]->persist(); - $id = $fieldFixture[$key]->getId(); + return $data; + } + + /** + * Prepare tax rule field data using new field. + * + * @param TaxRule $fixture + * @param array $data + * @param string $fixtureField + * @param string $newField + * @return array + */ + public function prepareFieldData(TaxRule $fixture, array $data, $fixtureField, $newField = null) + { + $newField = $newField === null ? $fixtureField : $newField; + unset($data[$fixtureField]); + + if (!$fixture->hasData($fixtureField)) { + $data[$newField][] = $this->defaultTaxClasses[$fixtureField]; + } else { + foreach ($fixture->getDataFieldConfig($fixtureField)['source']->getFixture() as $taxField) { + if (!$taxField->hasData('id')) { + $taxField->persist(); } - $data[$field][$key] = $id; + $data[$newField][] = $taxField->getId(); } } diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRule/Webapi.php b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRule/Webapi.php new file mode 100644 index 0000000000000000000000000000000000000000..2a875d965d0336fb957ef769bc472ed4756152ad --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRule/Webapi.php @@ -0,0 +1,86 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Tax\Test\Handler\TaxRule; + +use Magento\Tax\Test\Fixture\TaxRule; +use Magento\Mtf\Config\DataInterface; +use Magento\Mtf\Fixture\FixtureInterface; +use Magento\Mtf\Util\Protocol\CurlTransport; +use Magento\Mtf\Handler\Webapi as AbstractWebapi; +use Magento\Mtf\System\Event\EventManagerInterface; +use Magento\Mtf\Util\Protocol\CurlTransport\WebapiDecorator; + +/** + * Create Tax Rule via Web API handler. + */ +class Webapi extends AbstractWebapi implements TaxRuleInterface +{ + /** + * Tax Rule cUrl handler. + * + * @var Curl + */ + protected $taxRuleCurl; + + /** + * @constructor + * @param DataInterface $configuration + * @param EventManagerInterface $eventManager + * @param WebapiDecorator $webapiTransport + * @param Curl $taxRuleCurl + */ + public function __construct( + DataInterface $configuration, + EventManagerInterface $eventManager, + WebapiDecorator $webapiTransport, + Curl $taxRuleCurl + ) { + parent::__construct($configuration, $eventManager, $webapiTransport); + $this->taxRuleCurl = $taxRuleCurl; + } + + /** + * Web API request for creating Tax Rule. + * + * @param FixtureInterface $fixture + * @return array + * @throws \Exception + */ + public function persist(FixtureInterface $fixture = null) + { + /** @var TaxRule $fixture */ + $data = $this->prepareData($fixture); + + $url = $_ENV['app_frontend_url'] . 'rest/V1/taxRules'; + $this->webapiTransport->write($url, $data); + $response = json_decode($this->webapiTransport->read(), true); + $this->webapiTransport->close(); + + if (empty($response['id'])) { + $this->eventManager->dispatchEvent(['webapi_failed'], [$response]); + throw new \Exception('Tax rule creation by Web API handler was not successful!'); + } + + return ['id' => $response['id']]; + } + + /** + * Returns data for Web API params. + * + * @param TaxRule $fixture + * @return array + */ + protected function prepareData(TaxRule $fixture) + { + $data = $fixture->getData(); + $data = $this->taxRuleCurl->prepareFieldData($fixture, $data, 'tax_rate', 'tax_rate_ids'); + $data = $this->taxRuleCurl->prepareFieldData($fixture, $data, 'tax_product_class', 'product_tax_class_ids'); + $data = $this->taxRuleCurl->prepareFieldData($fixture, $data, 'tax_customer_class', 'customer_tax_class_ids'); + + return ['rule' => $data]; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Repository/TaxRule.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/Repository/TaxRule.xml index 33da36427e2d5bb4395042d4594e71d43abf3fc1..26d4869dbaff39e325128723044e04b15d743001 100644 --- a/dev/tests/functional/tests/app/Magento/Tax/Test/Repository/TaxRule.xml +++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Repository/TaxRule.xml @@ -10,7 +10,9 @@ <dataset name="default"> <field name="code" xsi:type="string">TaxIdentifier%isolation%</field> <field name="tax_rate" xsi:type="array"> - <item name="dataset" xsi:type="string">US-CA-Rate_1</item> + <item name="dataset" xsi:type="array"> + <item name="0" xsi:type="string">US-CA-Rate_1</item> + </item> </field> </dataset> diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/etc/webapi/di.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/etc/webapi/di.xml new file mode 100644 index 0000000000000000000000000000000000000000..decbd58959e191b1a9155347f98466161632e2e5 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Tax/Test/etc/webapi/di.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" ?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd"> + <preference for="\Magento\Tax\Test\Handler\TaxRule\TaxRuleInterface" type="\Magento\Tax\Test\Handler\TaxRule\Webapi" /> + <preference for="\Magento\Tax\Test\Handler\TaxClass\TaxClassInterface" type="\Magento\Tax\Test\Handler\TaxClass\Webapi" /> + <preference for="\Magento\Tax\Test\Handler\TaxRate\TaxRateInterface" type="\Magento\Tax\Test\Handler\TaxRate\Webapi" /> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php index 11ca409773a11262b8fb03de7692e267a2849984..f8091af4cc497cfc16cbef6222ec0e7e8c00c6d1 100644 --- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php +++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php @@ -88,11 +88,11 @@ class DataGrid extends Grid protected $actionButton = '.modal-inner-wrap .action-secondary'; /** - * Column header locator + * Column header locator. * * @var string */ - protected $columnHeader = "//th/span[.='%s']"; + protected $columnHeader = './/*[@data-role="grid-wrapper"]//th/span[.="%s"]'; /** * @var string diff --git a/dev/tests/functional/tests/app/Magento/Ups/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Ups/Test/TestCase/OnePageCheckoutTest.xml index 6af15ad6834b3f92e4814ee92a1d72f02fce3e26..6c3a76c5c99865bdc9bede513bd8ea350dd469b7 100644 --- a/dev/tests/functional/tests/app/Magento/Ups/Test/TestCase/OnePageCheckoutTest.xml +++ b/dev/tests/functional/tests/app/Magento/Ups/Test/TestCase/OnePageCheckoutTest.xml @@ -7,7 +7,7 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> <testCase name="Magento\Checkout\Test\TestCase\OnePageCheckoutTest"> - <variation name="OnePageCheckoutTestVariation24" summary="Use UPS Online Shipping Carrier on Checkout as a Registered Customer" ticketId="MAGETWO-12848"> + <variation name="OnePageCheckoutUpsTestVariation1" summary="Use UPS Online Shipping Carrier on Checkout as a Registered Customer" ticketId="MAGETWO-12848"> <data name="products" xsi:type="string">catalogProductSimple::default, configurableProduct::default, bundleProduct::bundle_fixed_product</data> <data name="checkoutMethod" xsi:type="string">login</data> <data name="customer/dataset" xsi:type="string">default</data> @@ -22,8 +22,7 @@ <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGrid"/> <constraint name="Magento\Checkout\Test\Constraint\AssertCartIsEmpty"/> </variation> - <variation name="OnePageCheckoutTestVariation25"> - <data name="description" xsi:type="string">Check Out as Guest using UPS with US shipping origin and UK customer</data> + <variation name="OnePageCheckoutUpsTestVariation2" summary="Check Out as Guest using UPS with US shipping origin and UK customer"> <data name="products" xsi:type="string">catalogProductSimple::default, configurableProduct::default, bundleProduct::bundle_fixed_product</data> <data name="checkoutMethod" xsi:type="string">guest</data> <data name="customer/dataset" xsi:type="string">default</data> diff --git a/dev/tests/functional/tests/app/Magento/Usps/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Usps/Test/TestCase/OnePageCheckoutTest.xml index acef9337057abceb6cf2f0715ad62315fe4b389a..7f049503781c6dd1ed7d4a5dee78fb57d79ad746 100644 --- a/dev/tests/functional/tests/app/Magento/Usps/Test/TestCase/OnePageCheckoutTest.xml +++ b/dev/tests/functional/tests/app/Magento/Usps/Test/TestCase/OnePageCheckoutTest.xml @@ -7,7 +7,7 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> <testCase name="Magento\Checkout\Test\TestCase\OnePageCheckoutTest"> - <variation name="OnePageCheckoutTestVariation26" summary="Use USPS Online Shipping Carrier on Checkout as a Registered Customer" ticketId="MAGETWO-12444"> + <variation name="OnePageCheckoutUspsTestVariation1" summary="Use USPS Online Shipping Carrier on Checkout as a Registered Customer" ticketId="MAGETWO-12444"> <data name="products" xsi:type="string">catalogProductSimple::default, configurableProduct::default, bundleProduct::bundle_fixed_product</data> <data name="checkoutMethod" xsi:type="string">login</data> <data name="customer/dataset" xsi:type="string">default</data> @@ -22,8 +22,7 @@ <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGrid"/> <constraint name="Magento\Checkout\Test\Constraint\AssertCartIsEmpty"/> </variation> - <variation name="OnePageCheckoutTestVariation27"> - <data name="description" xsi:type="string">Check Out as Guest using USPS with US shipping origin and UK customer</data> + <variation name="OnePageCheckoutUspsTestVariation2" summary="Check Out as Guest using USPS with US shipping origin and UK customer"> <data name="products" xsi:type="string">catalogProductSimple::default, configurableProduct::default, bundleProduct::bundle_fixed_product</data> <data name="checkoutMethod" xsi:type="string">guest</data> <data name="customer/dataset" xsi:type="string">default</data> diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist/Items/Product.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist/Items/Product.php index 0bc0507d993637ffe221abafbe2c508964fdfee6..02014d5bf7fe03e6e925825fda2af5c02e5264fb 100644 --- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist/Items/Product.php +++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist/Items/Product.php @@ -161,7 +161,7 @@ class Product extends Form */ public function hoverProductBlock() { - $this->_rootElement->find($this->price)->click(); + $this->_rootElement->find($this->price)->hover(); } /** @@ -172,6 +172,7 @@ class Product extends Form */ public function getWishlistData($qty = null) { + $this->hoverProductBlock(); $mapping = $this->dataMapping(); if (!is_numeric($qty)) { unset($mapping['qty']);