From c19e2d86e1f13c1b068b37de89f28f01f7c52ccc Mon Sep 17 00:00:00 2001 From: Tom Reece Date: Tue, 19 Jun 2018 12:42:51 -0500 Subject: [PATCH 01/33] MC-191: Admin should be able to remove Product Images assigned as Base, Small and Thumbnail from Simple Product --- .../acceptance/tests/_data/adobe-base.jpg | Bin 0 -> 32145 bytes .../acceptance/tests/_data/adobe-small.jpg | Bin 0 -> 16561 bytes .../acceptance/tests/_data/adobe-thumb.jpg | Bin 0 -> 10219 bytes .../Section/AdminProductGridSection.xml | 1 + .../Section/AdminProductImagesSection.xml | 15 ++ .../StorefrontCategoryProductSection.xml | 1 + .../Test/AdminSimpleProductImagesTest.xml | 138 ++++++++++++++++++ 7 files changed, 155 insertions(+) create mode 100644 dev/tests/acceptance/tests/_data/adobe-base.jpg create mode 100644 dev/tests/acceptance/tests/_data/adobe-small.jpg create mode 100644 dev/tests/acceptance/tests/_data/adobe-thumb.jpg diff --git a/dev/tests/acceptance/tests/_data/adobe-base.jpg b/dev/tests/acceptance/tests/_data/adobe-base.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b8fdef3cf50ec6ba291e6836e44ecffeff11414 GIT binary patch literal 32145 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 OH(~x;hd=z1j{Of+SoH@0 literal 0 HcmV?d00001 diff --git a/dev/tests/acceptance/tests/_data/adobe-small.jpg b/dev/tests/acceptance/tests/_data/adobe-small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b9f44a16d91fe961bb0f9a05b5d13e044cac9c8 GIT binary patch literal 16561 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 Gx&H^8A?>#S literal 0 HcmV?d00001 diff --git a/dev/tests/acceptance/tests/_data/adobe-thumb.jpg b/dev/tests/acceptance/tests/_data/adobe-thumb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..31710b8e17ec62bf1c9322d47289773e5aada183 GIT binary patch literal 10219 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 Q|F^#o{C$%5-xk0BKM`-8uK)l5 literal 0 HcmV?d00001 diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml index e4f571f7f0d83..36cbd2ddde6ab 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml @@ -16,6 +16,7 @@ + diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductImagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductImagesSection.xml index 48155eae27686..e609ede16344f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductImagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductImagesSection.xml @@ -16,5 +16,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryProductSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryProductSection.xml index e8df8650e8dd8..aaec0600f8bf7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryProductSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryProductSection.xml @@ -17,6 +17,7 @@ + diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml index f706cf1a3cf6b..cacb58be92b53 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml @@ -163,4 +163,142 @@ + + + + + + + <description value="Admin should be able to remove Product Images assigned as Base, Small and Thumbnail from Simple Product"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-191"/> + <group value="Catalog"/> + </annotations> + + <before> + <createData entity="_defaultCategory" stepKey="category"/> + <createData entity="_defaultProduct" stepKey="product"> + <requiredEntity createDataKey="category"/> + </createData> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + </before> + + <after> + <deleteData createDataKey="category" stepKey="deletePreReqCategory"/> + <deleteData createDataKey="product" stepKey="deleteProduct"/> + <amOnPage url="admin/admin/auth/logout/" stepKey="amOnLogoutPage"/> + </after> + + <!-- Go to the product edit page --> + <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="goToProductIndex"/> + <waitForPageLoad stepKey="wait1"/> + <actionGroup ref="resetProductGridToDefaultView" stepKey="resetProductGrid"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterProductGridBySku"> + <argument name="product" value="$$product$$"/> + </actionGroup> + <actionGroup ref="openProducForEditByClickingRowXColumnYInProductGrid" stepKey="openProduct"/> + + <!-- Set url key --> + <click selector="{{AdminProductSEOSection.sectionHeader}}" stepKey="openSeoSection"/> + <fillField selector="{{AdminProductSEOSection.urlKeyInput}}" userInput="$$product.name$$" stepKey="fillUrlKey"/> + + <!-- Expand images section --> + <click selector="{{AdminProductImagesSection.productImagesToggle}}" stepKey="expandImages"/> + + <!-- Upload and set Base image --> + <attachFile selector="{{AdminProductImagesSection.imageFileUpload}}" userInput="adobe-base.jpg" stepKey="attach1"/> + <waitForPageLoad stepKey="waitForUpload1"/> + <click selector="{{AdminProductImagesSection.nthProductImage('1')}}" stepKey="openImageDetails1"/> + <waitForPageLoad stepKey="waitForSlideout1"/> + <conditionalClick selector="{{AdminProductImagesSection.roleBase}}" dependentSelector="{{AdminProductImagesSection.isBaseSelected}}" visible="false" stepKey="base1"/> + <conditionalClick selector="{{AdminProductImagesSection.roleSmall}}" dependentSelector="{{AdminProductImagesSection.isSmallSelected}}" visible="true" stepKey="small1"/> + <conditionalClick selector="{{AdminProductImagesSection.roleThumbnail}}" dependentSelector="{{AdminProductImagesSection.isThumbnailSelected}}" visible="true" stepKey="thumbnail1"/> + <conditionalClick selector="{{AdminProductImagesSection.roleSwatch}}" dependentSelector="{{AdminProductImagesSection.isSwatchSelected}}" visible="true" stepKey="swatch1"/> + <pressKey selector="{{AdminProductImagesSection.altText}}" parameterArray="[\Facebook\WebDriver\WebDriverKeys::ESCAPE]" stepKey="pressEsc1"/> + <waitForPageLoad stepKey="waitForHide1"/> + + <!-- Upload and set Small image --> + <attachFile selector="{{AdminProductImagesSection.imageFileUpload}}" userInput="adobe-small.jpg" stepKey="attach2"/> + <waitForPageLoad stepKey="waitForUpload2"/> + <click selector="{{AdminProductImagesSection.nthProductImage('2')}}" stepKey="openImageDetails2"/> + <waitForPageLoad stepKey="waitForSlideout2"/> + <conditionalClick selector="{{AdminProductImagesSection.roleBase}}" dependentSelector="{{AdminProductImagesSection.isBaseSelected}}" visible="true" stepKey="base2"/> + <conditionalClick selector="{{AdminProductImagesSection.roleSmall}}" dependentSelector="{{AdminProductImagesSection.isSmallSelected}}" visible="false" stepKey="small2"/> + <conditionalClick selector="{{AdminProductImagesSection.roleThumbnail}}" dependentSelector="{{AdminProductImagesSection.isThumbnailSelected}}" visible="true" stepKey="thumbnail2"/> + <conditionalClick selector="{{AdminProductImagesSection.roleSwatch}}" dependentSelector="{{AdminProductImagesSection.isSwatchSelected}}" visible="true" stepKey="swatch2"/> + <pressKey selector="{{AdminProductImagesSection.altText}}" parameterArray="[\Facebook\WebDriver\WebDriverKeys::ESCAPE]" stepKey="pressEsc2"/> + <waitForPageLoad stepKey="waitForHide2"/> + + <!-- Upload and set Thumbnail image --> + <attachFile selector="{{AdminProductImagesSection.imageFileUpload}}" userInput="adobe-thumb.jpg" stepKey="attach3"/> + <waitForPageLoad stepKey="waitForUpload3"/> + <click selector="{{AdminProductImagesSection.nthProductImage('3')}}" stepKey="openImageDetails3"/> + <waitForPageLoad stepKey="waitForSlideout3"/> + <conditionalClick selector="{{AdminProductImagesSection.roleBase}}" dependentSelector="{{AdminProductImagesSection.isBaseSelected}}" visible="true" stepKey="base3"/> + <conditionalClick selector="{{AdminProductImagesSection.roleSmall}}" dependentSelector="{{AdminProductImagesSection.isSmallSelected}}" visible="true" stepKey="small3"/> + <conditionalClick selector="{{AdminProductImagesSection.roleThumbnail}}" dependentSelector="{{AdminProductImagesSection.isThumbnailSelected}}" visible="false" stepKey="thumbnail3"/> + <conditionalClick selector="{{AdminProductImagesSection.roleSwatch}}" dependentSelector="{{AdminProductImagesSection.isSwatchSelected}}" visible="true" stepKey="swatch3"/> + <pressKey selector="{{AdminProductImagesSection.altText}}" parameterArray="[\Facebook\WebDriver\WebDriverKeys::ESCAPE]" stepKey="pressEsc3"/> + <waitForPageLoad stepKey="waitForHide3"/> + + <!-- Save the product with all 3 images --> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="saveProduct"/> + + <!-- Go to the admin grid and see the Thumbnail image --> + <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="goToProductIndex2"/> + <waitForPageLoad stepKey="wait2"/> + <actionGroup ref="resetProductGridToDefaultView" stepKey="resetProductGrid2"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterProductGridBySku2"> + <argument name="product" value="$$product$$"/> + </actionGroup> + <seeElement selector="{{AdminProductGridSection.productThumbnailBySrc('/adobe-thumb')}}" stepKey="seeBaseInGrid"/> + + <!-- Go to the category page and see the Small image --> + <amOnPage url="$$category.name$$.html" stepKey="goToCategoryPage"/> + <waitForPageLoad stepKey="wait3"/> + <seeElement selector="{{StorefrontCategoryProductSection.ProductImageBySrc('/adobe-small')}}" stepKey="seeThumb"/> + + <!-- Go to the product page and see the Base image --> + <amOnPage url="$$product.name$$.html" stepKey="goToProductPage"/> + <waitForPageLoad stepKey="wait4"/> + <seeElement selector="{{StorefrontProductMediaSection.imageFile('/adobe-base')}}" stepKey="seeBase"/> + + <!-- Go to the product edit page again --> + <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="goToProductIndex3"/> + <waitForPageLoad stepKey="wait5"/> + <actionGroup ref="resetProductGridToDefaultView" stepKey="resetProductGrid3"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterProductGridBySku3"> + <argument name="product" value="$$product$$"/> + </actionGroup> + <actionGroup ref="openProducForEditByClickingRowXColumnYInProductGrid" stepKey="openProduct3"/> + <click selector="{{AdminProductImagesSection.productImagesToggle}}" stepKey="expandImages2"/> + + <!-- Remove all images --> + <click selector="{{AdminProductImagesSection.nthRemoveImageBtn('1')}}" stepKey="removeImage1"/> + <click selector="{{AdminProductImagesSection.nthRemoveImageBtn('2')}}" stepKey="removeImage2"/> + <click selector="{{AdminProductImagesSection.nthRemoveImageBtn('3')}}" stepKey="removeImage3"/> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="saveProduct2"/> + + <!-- Check admin grid for placeholder --> + <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="goToProductIndex4"/> + <waitForPageLoad stepKey="wait6"/> + <actionGroup ref="resetProductGridToDefaultView" stepKey="resetProductGrid4"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterProductGridBySku4"> + <argument name="product" value="$$product$$"/> + </actionGroup> + <dontSeeElement selector="{{AdminProductGridSection.productThumbnailBySrc('/adobe-thumb')}}" stepKey="dontSeeBaseInGrid"/> + <seeElement selector="{{AdminProductGridSection.productThumbnailBySrc('/placeholder/thumbnail')}}" stepKey="seePlaceholderThumb"/> + + <!-- Check category page for placeholder --> + <amOnPage url="$$category.name$$.html" stepKey="goToCategoryPage2"/> + <waitForPageLoad stepKey="wait7"/> + <dontSeeElement selector="{{StorefrontCategoryProductSection.ProductImageBySrc('/adobe-small')}}" stepKey="dontSeeThumb"/> + <seeElement selector="{{StorefrontCategoryProductSection.ProductImageBySrc('placeholder/small_image')}}" stepKey="seePlaceholderSmall"/> + + <!-- Check product page for placeholder --> + <amOnPage url="$$product.name$$.html" stepKey="goToProductPage2"/> + <waitForPageLoad stepKey="wait8"/> + <dontSeeElement selector="{{StorefrontProductMediaSection.imageFile('/adobe-base')}}" stepKey="dontSeeBase"/> + <seeElement selector="{{StorefrontProductMediaSection.imageFile('placeholder/image')}}" stepKey="seePlaceholderBase"/> + </test> </tests> From c36f3b7921638a9e27ccba1694cfd6389e7bb02f Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Mon, 18 Jun 2018 15:13:12 -0500 Subject: [PATCH 02/33] MC-172: [Visual Merchandiser] Admin should be able to mass assign products to category by SKU - added mftf test (cherry picked from commit 34ed8a4) --- .../Catalog/ActionGroup/AdminCategoryActionGroup.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/ActionGroup/AdminCategoryActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/ActionGroup/AdminCategoryActionGroup.xml index e176447a91932..1125a776bbdbd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/ActionGroup/AdminCategoryActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/ActionGroup/AdminCategoryActionGroup.xml @@ -37,6 +37,16 @@ <see selector="{{AdminHeaderSection.pageTitle}}" userInput="New Category" stepKey="seeCategoryPageTitle"/> </actionGroup> + <!-- Go to admin category page by id --> + <actionGroup name="goToAdminCategoryPageById"> + <arguments> + <argument name="id" type="string"/> + </arguments> + <amOnPage url="{{AdminCategoryEditPage.url(id)}}" stepKey="amOnAdminCategoryPage"/> + <waitForPageLoad stepKey="waitForPageLoad"/> + <see selector="{{AdminHeaderSection.pageTitle}}" userInput="{{id}}" stepKey="seeCategoryPageTitle"/> + </actionGroup> + <!-- Fill category fields --> <actionGroup name="fillCategoryForm"> <arguments> @@ -202,7 +212,6 @@ <see selector="{{AdminCategoryBasicFieldSection.FieldError('uid')}}" userInput="This is a required field." stepKey="seeErrorMessage"/> </actionGroup> - <actionGroup name="switchCategoryStoreView"> <arguments> <argument name="Store"/> From a64063285ae4eddb447e27e909578dc12628cf64 Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 14:58:59 -0500 Subject: [PATCH 03/33] MC-186: Admin should be able to apply fixed pricing for Bundled Product - Supplementary files for: MC-186, MC-214, MC-216, MC-217, MC-218, MC-220, MC-221 --- .../AdminClearFiltersActionGroup.xml | 2 +- .../BundleProductFilterActionGroup.xml | 11 ++++---- .../CreateBundleProductActionGroup.xml | 1 + .../EnableDisableProductActionGroup.xml | 10 +++----- .../Bundle/Data/ProductData.xml | 2 ++ .../Section/AdminProductCatalogSection.xml | 25 +++++++++++-------- .../Section/AdminProductFormBundleSection.xml | 4 +++ .../Section/BundleStorefrontSection.xml | 2 ++ .../Section/StorefrontBundledSection.xml | 1 + .../Section/AdminProductFormSection.xml | 2 +- .../ActionGroup/ClearPageCacheActionGroup.xml | 19 ++++++++++++++ .../Section/AdminCacheManagementSection.xml | 5 +++- 12 files changed, 59 insertions(+), 25 deletions(-) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/ActionGroup/ClearPageCacheActionGroup.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/AdminClearFiltersActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/AdminClearFiltersActionGroup.xml index 8192c109d0876..ca9a249dd42b9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/AdminClearFiltersActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/AdminClearFiltersActionGroup.xml @@ -11,6 +11,6 @@ <actionGroup name="AdminClearFiltersActionGroup"> <amOnPage url="{{AdminCatalogProductPage.url}}" stepKey="GoToCatalogProductPage"/> <waitForPageLoad stepKey="WaitForPageToLoad"/> - <conditionalClick selector="{{AdminProductCatalog.clearFilters}}" dependentSelector="{{AdminProductCatalog.clearFilters}}" visible="true" stepKey="ClickOnButtonToRemoveFiltersIfPresent"/> + <conditionalClick selector="{{AdminProductCatalog.filtersClear}}" dependentSelector="{{AdminProductCatalog.filtersClear}}" visible="true" stepKey="ClickOnButtonToRemoveFiltersIfPresent"/> </actionGroup> </actionGroups> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/BundleProductFilterActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/BundleProductFilterActionGroup.xml index 17cd9f3cca537..a790c17ca4e9e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/BundleProductFilterActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/BundleProductFilterActionGroup.xml @@ -10,11 +10,10 @@ xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/actionGroupSchema.xsd"> <actionGroup name="BundleProductFilter"> <!--Setting filter--> - <amOnPage url="{{ProductCatalogPage.url}}" stepKey="GoToCatalogPage"/> - <waitForPageLoad stepKey="WaitForPageToLoadFully"/> - <click selector="{{AdminProductCatalog.clickOnFilter}}" stepKey="ClickOnFilter"/> - <click selector="{{AdminProductCatalog.clickOnTypeDropDown}}" stepKey="ClickOnTypeDropDown"/> - <click selector="{{AdminProductCatalog.clickOnBundleOption}}" stepKey="ClickOnBundleOption"/> - <click selector="{{AdminProductCatalog.clickOnApplyFilters}}" stepKey="ClickOnApplyFilters"/> + <!--Prereq: go to admin product catalog page--> + <click selector="{{AdminProductCatalog.filter}}" stepKey="ClickOnFilter"/> + <click selector="{{AdminProductCatalog.typeDropDown}}" stepKey="ClickOnTypeDropDown"/> + <click selector="{{AdminProductCatalog.bundleOption}}" stepKey="ClickOnBundleOption"/> + <click selector="{{AdminProductCatalog.applyFilters}}" stepKey="ClickOnApplyFilters"/> </actionGroup> </actionGroups> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/CreateBundleProductActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/CreateBundleProductActionGroup.xml index 7d9ae2592a121..fa44b7df150e4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/CreateBundleProductActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/CreateBundleProductActionGroup.xml @@ -9,6 +9,7 @@ <actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/actionGroupSchema.xsd"> <actionGroup name="CreateBasicBundleProduct"> + <!--Prereq: Go to bundle product creation page--> <!--Product name and SKU--> <fillField selector="{{AdminProductFormBundleSection.productName}}" userInput="{{BundleProduct.name}}" stepKey="fillProductName"/> <fillField selector="{{AdminProductFormBundleSection.productSku}}" userInput="{{BundleProduct.sku}}" stepKey="fillProductSku"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/EnableDisableProductActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/EnableDisableProductActionGroup.xml index f6a739dd75059..ede23d20fd294 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/EnableDisableProductActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/EnableDisableProductActionGroup.xml @@ -9,6 +9,7 @@ <actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/actionGroupSchema.xsd"> <actionGroup name="AncillaryPrepBundleProduct"> + <!--Prereq: go to bundle product creation page--> <fillField selector="{{AdminProductFormBundleSection.productName}}" userInput="{{BundleProduct.name}}" stepKey="fillProductName"/> <fillField selector="{{AdminProductFormBundleSection.productSku}}" userInput="{{BundleProduct.sku}}" stepKey="fillProductSku"/> @@ -20,18 +21,15 @@ <fillField userInput="{{BundleProduct.urlKey}}" selector="{{AdminProductFormBundleSection.urlKey}}" stepKey="FillsinSEOlinkExtension"/> </actionGroup> - <!--Enable/Disable Product Toggle--> - <actionGroup name="EnableDisableProduct"> - <click stepKey="ClickOnEnableDisableToggle" selector="{{AdminProductFormBundleSection.enableDisableToggle}}"/> - </actionGroup> - <!--Edit existing product by searching in product catalog--> <actionGroup name="FindProductToEdit"> <amOnPage url="{{ProductCatalogPage.url}}" stepKey="GoToProductCatalog"/> <waitForPageLoad stepKey="WaitForCatalogProductPageToLoad"/> + <conditionalClick selector="{{AdminProductCatalog.filtersClear}}" dependentSelector="{{AdminProductCatalog.filtersClear}}" visible="true" stepKey="ClickOnButtonToRemoveFiltersIfPresent"/> + <waitForPageLoad stepKey="RemovingFilters"/> <fillField userInput="{{BundleProduct.name}}" selector="#fulltext" stepKey="EnterProductNameInSearch"/> <click stepKey="ClickSearch" selector="{{AdminProductFormBundleSection.searchButton}}"/> <click stepKey="ClickOnProduct" selector="{{AdminProductFormBundleSection.firstCatalogProduct}}"/> <waitForPageLoad stepKey="WaitForProductEditPageToLoad"/> </actionGroup> -</actionGroups> \ No newline at end of file +</actionGroups> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Data/ProductData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Data/ProductData.xml index 25c286d8a3309..a6dec92f21bc0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Data/ProductData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Data/ProductData.xml @@ -26,6 +26,8 @@ <data key="default_quantity2">20</data> <data key="set">4</data> <data key="type">bundle</data> + <data key="fixedPrice">10</data> + <data key="fixedPriceFormatted">$10.00</data> </entity> <entity name="ApiBundleProduct" type="product2"> <data key="name" unique="suffix">Api Bundle Product</data> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml index 714c92b8d8782..9a9cdc065f57c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml @@ -9,15 +9,20 @@ <sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminProductCatalog"> - <element name="clickOnFilter" type="button" selector="//div[@class='data-grid-filters-action-wrap']/button" timeout="30"/> - <element name="clickOnTypeDropDown" type="multiselect" selector="//select[@name='type_id']" timeout="30"/> - <element name="clickOnBundleOption" type="multiselect" selector="//select[@name='type_id']/option[4]" timeout="30"/> - <element name="clickOnApplyFilters" type="button" selector="//button[@class='action-secondary']" timeout="30"/> - <element name="selectAllCheckBox" type="checkbox" selector="//div[@data-role='grid-wrapper']//label[@data-bind='attr: {for: ko.uid}']" timeout="30"/> - <element name="clickOnActions" type="button" selector="//div[@class='action-select-wrap']/button" timeout="30"/> - <element name="clickOnChangeStatus" type="multiselect" selector="//div[@class='action-menu-items']//li[2]" timeout="30"/> - <element name="clickOnDisable" type="multiselect" selector="//div[@class='action-menu-items']//ul[@class='action-submenu _active']//li[span='Disable']" timeout="30"/> - <element name="clickOnEnable" type="multiselect" selector="//div[@class='action-menu-items']//ul[@class='action-submenu _active']//li[span='Enable']" timeout="30"/> - <element name="clearFilters" type="button" selector="//div[@class='admin__data-grid-header']//button[@data-action='grid-filter-reset']" timeout="30"/> + <element name="filter" type="button" selector="//div[@class='data-grid-filters-action-wrap']/button" timeout="30"/> + <element name="typeDropDown" type="multiselect" selector="//select[@name='type_id']" timeout="30"/> + <element name="bundleOption" type="multiselect" selector="//select[@name='type_id']/option[4]" timeout="30"/> + <element name="applyFilters" type="button" selector="//button[@class='action-secondary']" timeout="30"/> + <element name="allCheckbox" type="checkbox" selector="//div[@data-role='grid-wrapper']//label[@data-bind='attr: {for: ko.uid}']" timeout="30"/> + <element name="actions" type="button" selector="//div[@class='action-select-wrap']/button" timeout="30"/> + <element name="changeStatus" type="multiselect" selector="//div[@class='action-menu-items']//li[2]" timeout="30"/> + <element name="delete" type="multiselect" selector="//div[@class='action-menu-items']//li[1]" timeout="30"/> + <element name="disable" type="multiselect" selector="//div[@class='action-menu-items']//ul[@class='action-submenu _active']//li[span='Disable']" timeout="30"/> + <element name="enable" type="multiselect" selector="//div[@class='action-menu-items']//ul[@class='action-submenu _active']//li[span='Enable']" timeout="30"/> + <element name="filtersClear" type="button" selector="//div[@class='admin__data-grid-header']//button[@data-action='grid-filter-reset']" timeout="30"/> + <element name="productType" type="text" selector="//tr[@data-repeat-index='{{var1}}']//td[5]//div[@class='data-grid-cell-content']" parameterized="true"/> + <element name="priceOfFirstRow" type="text" selector="//tr[@data-repeat-index='0']//div[contains(., '{{var1}}')]" parameterized="true"/> + <element name="AllProductsNotOfBundleType" type="text" selector="//td[5]/div[text() != 'Bundle Product']"/> + <element name="attributeSetOfFirstRow" type="text" selector="//tr[@data-repeat-index='0']//div[contains(., '{{var1}}')]" parameterized="true"/> </section> </sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductFormBundleSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductFormBundleSection.xml index 1c5019eeeea26..d5e3b9421372c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductFormBundleSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductFormBundleSection.xml @@ -38,6 +38,8 @@ <element name="contentDropDownIfNotShowing" type="button" selector="//div[@data-index='content']//div[contains(@class, '_hide')]"/> <element name="longDescription" type="input" selector="#product_form_description"/> <element name="shortDescription" type="input" selector="#product_form_short_description"/> + <!--BundleOptinsDropDown--> + <element name="bundleOptionsDropDown" type="button" selector="div[data-index='bundle-items']" timeout="30"/> <!--SEODropdownTab--> <element name="seoDropdown" type="button" selector="//div[@data-index='search-engine-optimization']"/> <element name="seoDependent" type="button" selector="//div[@data-index='search-engine-optimization']//div[contains(@class, '_show')]"/> @@ -50,5 +52,7 @@ <!--ClickOnFirstProductInCatalog--> <element name="firstCatalogProduct" type="button" selector="//table[@class='data-grid data-grid-draggable']/tbody/tr[@class='data-row']/td[4]"/> <element name="bundledItems" type="block" selector="[data-index=bundle-items]"/> + <element name="dynamicPrice" type="button" selector="//div[@data-index='price_type']//div[@data-role='switcher']" timeout="30"/> + <element name="priceField" type="input" selector="//div[@data-index='price']//input"/> </section> </sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/BundleStorefrontSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/BundleStorefrontSection.xml index 073a860564cc4..b7ca65b28c9bb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/BundleStorefrontSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/BundleStorefrontSection.xml @@ -18,5 +18,7 @@ <element name="shortDescriptionText" type="text" selector="//div[@class='product attribute overview']" timeout="30"/> <!--NameOfProductOnProductPage--> <element name="bundleProductName" type="text" selector="//*[@id='maincontent']//span[@itemprop='name']"/> + <!--PageNotFoundErrorMessage--> + <element name="pageNotFound" type="text" selector="//h1[@class='page-title']//span[contains(., 'Whoops, our bad...')]"/> </section> </sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/StorefrontBundledSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/StorefrontBundledSection.xml index 145f96b6e4648..346ff5c2ba0fc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/StorefrontBundledSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/StorefrontBundledSection.xml @@ -14,5 +14,6 @@ <element name="addToCartConfigured" type="button" selector="#product-addtocart-button" timeout="30"/> <element name="updateCart" type="button" selector="#product-updatecart-button" timeout="30"/> <element name="configuredPrice" type="block" selector=".price-configured_price .price"/> + <element name="fixedPricing" type="text" selector="//div[@class='price-box price-final_price']//span[@id]//..//span[contains(text(),'{{var1}}')]" parameterized="true"/> </section> </sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml index c81e4bd79997a..8d23204f4ecf2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml @@ -9,7 +9,7 @@ xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminProductFormSection"> <element name="attributeSet" type="select" selector="div[data-index='attribute_set_id'] .admin__field-control"/> - <element name="attributeSetFilter" type="input" selector="div[data-index='attribute_set_id'] .admin__field-control input"/> + <element name="attributeSetFilter" type="input" selector="div[data-index='attribute_set_id'] .admin__field-control input" timeout="30"/> <element name="attributeSetFilterResult" type="input" selector="div[data-index='attribute_set_id'] .action-menu-item._last" timeout="30"/> <element name="productName" type="input" selector=".admin__field[data-index=name] input"/> <element name="productSku" type="input" selector=".admin__field[data-index=sku] input"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/ActionGroup/ClearPageCacheActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/ActionGroup/ClearPageCacheActionGroup.xml new file mode 100644 index 0000000000000..f09ca7f1fe025 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/ActionGroup/ClearPageCacheActionGroup.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/actionGroupSchema.xsd"> + <actionGroup name="ClearPageCacheActionGroup"> + <amOnPage url="{{_ENV.MAGENTO_BACKEND_NAME}}/admin/cache/" stepKey="goToCacheManagementPage" /> + <waitForPageLoad stepKey="waitForPageLoad"/> + <click selector="{{AdminCacheManagementSection.actionDropDown}}" stepKey="actionSelection"/> + <click selector="{{AdminCacheManagementSection.refreshOption}}" stepKey="selectRefreshOption"/> + <click selector="{{AdminCacheManagementSection.pageCacheRowCheckbox}}" stepKey="selectPageCacheRowCheckbox"/> + <click selector="{{AdminCacheManagementSection.submit}}" stepKey="clickSubmit"/> + </actionGroup> +</actionGroups> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/Section/AdminCacheManagementSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/Section/AdminCacheManagementSection.xml index cb33e25c9ce6a..d5d1e7bf65cb8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/Section/AdminCacheManagementSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/Section/AdminCacheManagementSection.xml @@ -10,6 +10,9 @@ xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminCacheManagementSection"> <element name="FlushMagentoCache" type="button" selector="#flush_magento"/> + <element name="actionDropDown" type="multiselect" selector="//*[@id='cache_grid_massaction-select']//option[contains(., 'Action')]" timeout="30"/> + <element name="refreshOption" type="multiselect" selector="//*[@id='cache_grid_massaction-select']//option[@value='refresh']" timeout="30"/> + <element name="pageCacheRowCheckbox" type="checkbox" selector="//td[contains(., 'Page Cache')]/..//input[@type='checkbox']"/> + <element name="submit" type="button" selector="//button[@title='Submit']" timeout="30"/> </section> </sections> - From 47421bac79bb48d80e71a1f66708fa0409d95989 Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 15:03:34 -0500 Subject: [PATCH 04/33] =?UTF-8?q?MC-221:=20Admin=20should=20be=20able=20to?= =?UTF-8?q?=20select/edit=20the=20=E2=80=9CAttributes=20Set=E2=80=9D=20whe?= =?UTF-8?q?n=20creating/editing=20a=20bundle=20product?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Test/AdminAttributeSetSelectionTest.xml | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml new file mode 100644 index 0000000000000..d6839c89c7816 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <test name="AdminAttributeSetSelectionTest"> + <annotations> + <features value="Bundle"/> + <stories value="Create/Edit bundle product in Admin"/> + <title value="Admin should be able to select/edit the “Attributes Set” when creating/editing a bundle product"/> + <description value="Admin should be able to select/edit the “Attributes Set” when creating/editing a bundle product"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-221"/> + <group value="Bundle"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + </before> + <after> + <amOnPage url="{{AdminLogoutPage.url}}" stepKey="amOnLogoutPage"/> + </after> + <!-- Create a new attribute set --> + <amOnPage url="{{AdminProductAttributeSetGridPage.url}}" stepKey="goToAttributeSets"/> + <waitForPageLoad stepKey="wait1"/> + <click selector="{{AdminProductAttributeSetGridSection.addAttributeSetBtn}}" stepKey="clickAddAttributeSet"/> + <fillField selector="{{AdminProductAttributeSetSection.name}}" userInput="{{ProductAttributeFrontendLabel.label}}" stepKey="fillName"/> + <selectOption selector="{{AdminProductAttributeSetSection.basedOn}}" userInput="Default" stepKey="selectDefaultSet"/> + <click selector="{{AdminProductAttributeSetSection.saveBtn}}" stepKey="clickSave1"/> + <dragAndDrop selector1="{{AdminProductAttributeSetSection.attribute('meta_keyword')}}" selector2="{{AdminProductAttributeSetSection.attribute('manufacturer')}}" stepKey="unassign1"/> + <click selector="{{AdminProductAttributeSetSection.addNewGroupBtn}}" stepKey="clickAddNewGroup"/> + <fillField selector="{{AdminProductAttributeSetSection.newGroupName}}" userInput="TestGroupName" stepKey="fillNewGroupName"/> + <click selector="{{AdminProductAttributeSetSection.modalOk}}" stepKey="clickOkInModal"/> + <dragAndDrop selector1="{{AdminProductAttributeSetSection.attribute('manufacturer')}}" selector2="{{AdminProductAttributeSetSection.attribute('TestGroupName')}}" stepKey="assignManufacturer"/> + <click selector="{{AdminProductAttributeSetSection.saveBtn}}" stepKey="clickSave2"/> + + <!-- Go to new product page and see a default attribute --> + <!-- Switch from default attribute set to new attribute set --> + <amOnPage url="{{AdminProductCreatePage.url('4', 'bundle')}}" stepKey="goToNewProductPage"/> + <waitForPageLoad stepKey="wait2"/> + <click selector="{{AdminProductFormSection.attributeSet}}" stepKey="startEditAttrSet"/> + <fillField selector="{{AdminProductFormSection.attributeSetFilter}}" userInput="{{ProductAttributeFrontendLabel.label}}" stepKey="searchForAttrSet"/> + <click selector="{{AdminProductFormSection.attributeSetFilterResult}}" stepKey="selectAttrSet"/> + <fillField selector="{{AdminProductFormBundleSection.productName}}" userInput="{{BundleProduct.name}}" stepKey="fillProductName"/> + <fillField selector="{{AdminProductFormBundleSection.productSku}}" userInput="{{BundleProduct.sku}}" stepKey="fillProductSku"/> + + <!--save the product/published by default--> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButton"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="messageYouSavedTheProductIsShown"/> + + <!--Testing that price appears correctly in admin catalog--> + <!--Set filter to product name--> + <amOnPage url="{{AdminCatalogProductPage.url}}" stepKey="GoToCatalogProductPage"/> + <waitForPageLoad stepKey="WaitForPageToLoad"/> + <actionGroup ref="filterProductGridByName" stepKey="filterBundleProductOptionsDownToName"> + <argument name="product" value="BundleProduct"/> + </actionGroup> + <seeElement selector="{{AdminProductCatalog.attributeSetOfFirstRow(ProductAttributeFrontendLabel.label)}}" stepKey="seeAttributeSet"/> + </test> +</tests> From 17a5946c9249e0b27f86d5eafeab5d12dc510851 Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 15:04:22 -0500 Subject: [PATCH 05/33] MC-216: Admin should be able to delete a bundle product --- .../Bundle/Test/AdminDeleteABundleProduct.xml | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml new file mode 100644 index 0000000000000..59c0da77946d8 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <test name="AdminDeleteABundleProduct"> + <annotations> + <features value="Bundle"/> + <stories value="Admin list bundle products"/> + <title value="Admin should be able to delete a bundle product"/> + <description value="Admin should be able to delete a bundle product"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-216"/> + <group value="Bundle"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct1"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct2"/> + </before> + <after> + <amOnPage url="{{AdminLogoutPage.url}}" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="simpleProduct1" stepKey="deleteSimpleProduct1"/> + <deleteData createDataKey="simpleProduct2" stepKey="deleteSimpleProduct2"/> + </after> + + <!--Create bundle product--> + <amOnPage url="{{AdminProductCreatePage.url(BundleProduct.set, BundleProduct.type)}}" stepKey="goToBundleProductCreationPage"/> + <waitForPageLoad stepKey="waitForBundleProductCreationPage"/> + <conditionalClick selector="{{AdminProductFormBundleSection.bundleItemsToggle}}" dependentSelector="{{AdminProductFormBundleSection.bundleItemsToggle}}" visible="false" stepKey="conditionallyOpenSectionBundleItems"/> + <click selector="{{AdminProductFormBundleSection.addOption}}" stepKey="clickAddOption3"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" stepKey="waitForBundleOptions"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" userInput="{{BundleProduct.optionTitle1}}" stepKey="fillOptionTitle"/> + <selectOption selector="{{AdminProductFormBundleSection.bundleOptionXInputType('0')}}" userInput="{{BundleProduct.optionInputType1}}" stepKey="selectInputType"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="waitForAddProductsToBundle"/> + <click selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="clickAddProductsToOption"/> + <waitForPageLoad stepKey="waitForPageLoadAfterBundleProducts"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions"> + <argument name="product" value="$$simpleProduct1$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions2"> + <argument name="product" value="$$simpleProduct2$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow2"/> + <click selector="{{AdminAddProductsToOptionPanel.addSelectedProducts}}" stepKey="clickAddSelectedBundleProducts"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '0')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty1"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '1')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty2"/> + + <!--Fill out ancillary data on bundle product--> + <actionGroup ref="AncillaryPrepBundleProduct" stepKey="createBundledProductForTwoSimpleProducts"/> + + <!--Save the product--> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButton"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="messageYouSavedTheProductIsShown"/> + + <!--Go to catalog deletion page--> + <amOnPage url="{{AdminCatalogProductPage.url}}" stepKey="goToCatalogPage"/> + <waitForPageLoad stepKey="Loading"/> + + <!--Apply Name Filter--> + <actionGroup ref="filterProductGridByName" stepKey="filterBundleProductOptionsDownToName"> + <argument name="product" value="BundleProduct"/> + </actionGroup> + <click selector="{{AdminProductCatalog.allCheckbox}}" stepKey="SelectAllOnly1"/> + <waitForPageLoad stepKey="loading2"/> + + <!--Delete--> + <click selector="{{AdminProductCatalog.actions}}" stepKey="ClickOnActionsChangingView"/> + <click selector="{{AdminProductCatalog.delete}}" stepKey="ClickDelete"/> + <click selector="//button[@class='action-primary action-accept']" stepKey="ConfirmDelete"/> + <waitForPageLoad stepKey="loading3"/> + + <!--Testing deletion of product--> + <amOnPage url="{{BundleProduct.urlKey}}.html" stepKey="GoToProductPageAgain"/> + <waitForPageLoad stepKey="WaitForProductPageToLoadToShowElement"/> + <dontSeeElement stepKey="LookingForNameOfProductTwo" selector="{{BundleStorefrontSection.bundleProductName}}"/> + </test> +</tests> From 06660ae86403fe1c6aa802bd50d3820e73b0dd7d Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 15:06:17 -0500 Subject: [PATCH 06/33] MC-214: Admin should be able to filter product list by type = Bundle Product --- .../AdminFilterProductListByBundleProduct.xml | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminFilterProductListByBundleProduct.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminFilterProductListByBundleProduct.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminFilterProductListByBundleProduct.xml new file mode 100644 index 0000000000000..0f277ccff8b89 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminFilterProductListByBundleProduct.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <test name="AdminFilterProductListByBundleProduct"> + <annotations> + <features value="Bundle"/> + <stories value="Admin list bundle products"/> + <title value="Admin should be able to filter product list by type = Bundle Product"/> + <description value="Admin should be able to filter product list by type = Bundle Product"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-214"/> + <group value="Bundle"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct1"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct2"/> + </before> + <after> + <amOnPage url="{{AdminLogoutPage.url}}" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="simpleProduct1" stepKey="deleteSimpleProduct1"/> + <deleteData createDataKey="simpleProduct2" stepKey="deleteSimpleProduct2"/> + </after> + + <!--Create bundle product--> + <amOnPage url="{{AdminProductCreatePage.url(BundleProduct.set, BundleProduct.type)}}" stepKey="goToBundleProductCreationPage"/> + <waitForPageLoad stepKey="waitForBundleProductCreationPage"/> + <conditionalClick selector="{{AdminProductFormBundleSection.bundleItemsToggle}}" dependentSelector="{{AdminProductFormBundleSection.bundleItemsToggle}}" visible="false" stepKey="conditionallyOpenSectionBundleItems"/> + <click selector="{{AdminProductFormBundleSection.addOption}}" stepKey="clickAddOption3"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" stepKey="waitForBundleOptions"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" userInput="{{BundleProduct.optionTitle1}}" stepKey="fillOptionTitle"/> + <selectOption selector="{{AdminProductFormBundleSection.bundleOptionXInputType('0')}}" userInput="{{BundleProduct.optionInputType1}}" stepKey="selectInputType"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="waitForAddProductsToBundle"/> + <click selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="clickAddProductsToOption"/> + <waitForPageLoad stepKey="waitForPageLoadAfterBundleProducts"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions"> + <argument name="product" value="$$simpleProduct1$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions2"> + <argument name="product" value="$$simpleProduct2$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow2"/> + <click selector="{{AdminAddProductsToOptionPanel.addSelectedProducts}}" stepKey="clickAddSelectedBundleProducts"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '0')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty1"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '1')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty2"/> + + <!--Fill out ancillary data on bundle product--> + <actionGroup ref="AncillaryPrepBundleProduct" stepKey="createBundledProductForTwoSimpleProducts"/> + + <!--Save the product--> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButton"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="messageYouSavedTheProductIsShown"/> + + <!--Apply Bundle Product Filter--> + <!--Clear Filters--> + <actionGroup ref="AdminClearFiltersActionGroup" stepKey="ClearFilters"/> + + <!--Setting filter--> + <actionGroup ref="BundleProductFilter" stepKey="FilterForOnlyBundleProducts"/> + + <!--Testing application of filter--> + <see selector="{{AdminProductCatalog.productType('0')}}" userInput="Bundle Product" stepKey="correcType0"/> + <dontSeeElement selector="{{AdminProductCatalog.AllProductsNotOfBundleType}}" stepKey="checkingRowsForIncorrectType"/> + </test> +</tests> From ba8ae0c1f37f71ed26ecb8d970a30f5f410b7829 Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 15:07:11 -0500 Subject: [PATCH 07/33] MC-218: Admin should be able to mass delete bundle products --- .../Test/AdminMassDeleteBundleProducts.xml | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml new file mode 100644 index 0000000000000..97ce86a902978 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <test name="AdminMassDeleteBundleProductsTest"> + <annotations> + <features value="Bundle"/> + <stories value="Admin list bundle products"/> + <title value="Admin should be able to mass delete bundle products"/> + <description value="Admin should be able to mass delete bundle products"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-218"/> + <group value="Bundle"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct1"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct2"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct3"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct4"/> + </before> + <after> + <!--Clear Filters--> + <actionGroup ref="AdminClearFiltersActionGroup" stepKey="ClearFiltersAfter"/> + <amOnPage url="{{AdminLogoutPage.url}}" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="simpleProduct1" stepKey="deleteSimpleProduct1"/> + <deleteData createDataKey="simpleProduct2" stepKey="deleteSimpleProduct2"/> + <deleteData createDataKey="simpleProduct3" stepKey="deleteSimpleProduct3"/> + <deleteData createDataKey="simpleProduct4" stepKey="deleteSimpleProduct4"/> + </after> + + <!--Go to bundle product creation page--> + <amOnPage url="{{AdminProductCreatePage.url(BundleProduct.set, BundleProduct.type)}}" stepKey="goToBundleProductCreationPage" /> + <waitForPageLoad stepKey="waitForBundleProductCreatePageToLoad"/> + + <!--Create bundle product--> + <conditionalClick selector="{{AdminProductFormBundleSection.bundleItemsToggle}}" dependentSelector="{{AdminProductFormBundleSection.bundleItemsToggle}}" visible="false" stepKey="conditionallyOpenSectionBundleItems"/> + <click selector="{{AdminProductFormBundleSection.addOption}}" stepKey="clickAddOption3"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" stepKey="waitForBundleOptions"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" userInput="{{BundleProduct.optionTitle1}}" stepKey="fillOptionTitle"/> + <selectOption selector="{{AdminProductFormBundleSection.bundleOptionXInputType('0')}}" userInput="{{BundleProduct.optionInputType1}}" stepKey="selectInputType"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="waitForAddProductsToBundle"/> + <click selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="clickAddProductsToOption"/> + <waitForPageLoad stepKey="waitForPageLoadAfterBundleProducts"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions"> + <argument name="product" value="$$simpleProduct1$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions2"> + <argument name="product" value="$$simpleProduct2$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow2"/> + <click selector="{{AdminAddProductsToOptionPanel.addSelectedProducts}}" stepKey="clickAddSelectedBundleProducts"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '0')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty1"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '1')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty2"/> + + <!--Fill out ancillary data on bundle product--> + <actionGroup ref="AncillaryPrepBundleProduct" stepKey="createBundledProductForTwoSimpleProducts"> + <argument name="bundleProduct" value="BundleProduct"/> + </actionGroup> + + <!--Save the product--> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButton"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="messageYouSavedTheProductIsShown"/> + + <!--Creating Second bundle product--> + <!--Go to bundle product creation page--> + <amOnPage url="{{AdminProductCreatePage.url(BundleProduct.set, BundleProduct.type)}}" stepKey="goToBundleProductCreationPage2" /> + <waitForPageLoad stepKey="waitForBundleProductCreatePageToLoad2"/> + + <!--Create bundle product 2--> + <conditionalClick selector="{{AdminProductFormBundleSection.bundleItemsToggle}}" dependentSelector="{{AdminProductFormBundleSection.bundleItemsToggle}}" visible="false" stepKey="conditionallyOpenSectionBundleItems2"/> + <click selector="{{AdminProductFormBundleSection.addOption}}" stepKey="clickAddOption32"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" stepKey="waitForBundleOptions2"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" userInput="{{BundleProduct.optionTitle1}}" stepKey="fillOptionTitle2"/> + <selectOption selector="{{AdminProductFormBundleSection.bundleOptionXInputType('0')}}" userInput="{{BundleProduct.optionInputType1}}" stepKey="selectInputType2"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="waitForAddProductsToBundle2"/> + <click selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="clickAddProductsToOption2"/> + <waitForPageLoad stepKey="waitForPageLoadAfterBundleProducts2"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptionsx2"> + <argument name="product" value="$$simpleProduct3$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRowx2"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions22"> + <argument name="product" value="$$simpleProduct4$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow22"/> + <click selector="{{AdminAddProductsToOptionPanel.addSelectedProducts}}" stepKey="clickAddSelectedBundleProducts2"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '0')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty12"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '1')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty22"/> + + <fillField selector="{{AdminProductFormBundleSection.productName}}" userInput="{{BundleProduct.name2}}" stepKey="fillProductName2"/> + <fillField selector="{{AdminProductFormBundleSection.productSku}}" userInput="{{BundleProduct.sku2}}" stepKey="fillProductSku2"/> + + <!--Trigger SEO drop down--> + <conditionalClick selector="{{AdminProductFormBundleSection.seoDropdown}}" dependentSelector="{{AdminProductFormBundleSection.seoDependent}}" visible="false" stepKey="OpenDropDownIfClosed2"/> + <waitForPageLoad stepKey="WaitForDropDownSEO"/> + + <!--Fill URL input--> + <fillField userInput="{{BundleProduct.urlKey2}}" selector="{{AdminProductFormBundleSection.urlKey}}" stepKey="FillsinSEOlinkExtension2"/> + + <!--Save the product--> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButton2"/> + <see userInput="You saved the product." stepKey="messageYouSavedTheProductIsShown2"/> + + <!--Mass delete bundle products--> + <!--Clear Filters--> + <actionGroup ref="AdminClearFiltersActionGroup" stepKey="ClearFilters"/> + + <!--Setting filter--> + <actionGroup ref="BundleProductFilter" stepKey="FilterForOnlyBundleProducts"/> + + <!--Delete--> + <click selector="{{AdminProductCatalog.allCheckbox}}" stepKey="SelectAllOnly1"/> + <waitForPageLoad stepKey="loading"/> + <click selector="{{AdminProductCatalog.actions}}" stepKey="ClickOnActionsChangingView"/> + <click selector="{{AdminProductCatalog.delete}}" stepKey="ClickDelete"/> + <click selector="//button[@class='action-primary action-accept']" stepKey="ConfirmDelete"/> + <waitForPageLoad stepKey="loading3"/> + + <!--Clear Cache - resets products according to enabled/disabled view--> + <actionGroup ref="ClearPageCacheActionGroup" stepKey="ClearPageCaches"/> + + <!--Testing deletion of products--> + <amOnPage url="{{BundleProduct.urlKey}}.html" stepKey="GoToProductPageAgain"/> + <waitForPageLoad stepKey="WaitForProductPageToLoadToShowElement"/> + <dontSeeElement stepKey="LookingForNameOfProduct" selector="{{BundleStorefrontSection.bundleProductName}}"/> + <seeElement stepKey="LookingForPageNotFoundMessage" selector="{{BundleStorefrontSection.pageNotFound}}"/> + <amOnPage url="{{BundleProduct.urlKey2}}.html" stepKey="GoToProductPageAgain2"/> + <waitForPageLoad stepKey="WaitForProductPageToLoadToShowElement2"/> + <dontSeeElement stepKey="LookingForNameOfProduct2" selector="{{BundleStorefrontSection.bundleProductName}}"/> + <seeElement stepKey="LookingForPageNotFoundMessage2" selector="{{BundleStorefrontSection.pageNotFound}}"/> + </test> +</tests> From df106be66a76a95ed18c86ea0f0be5f78bb0e427 Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 15:08:00 -0500 Subject: [PATCH 08/33] MC-186: Admin should be able to apply fixed pricing for Bundled Product --- .../Test/BundleProductFixedPricingTest.xml | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/BundleProductFixedPricingTest.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/BundleProductFixedPricingTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/BundleProductFixedPricingTest.xml new file mode 100644 index 0000000000000..e541b7af7097c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/BundleProductFixedPricingTest.xml @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <test name="BundleProductFixedPricingTest"> + <annotations> + <features value="Bundle"/> + <stories value="Bundle Product Pricing"/> + <title value="Admin should be able to apply fixed pricing for Bundled Product"/> + <description value="Admin should be able to apply fixed pricing for Bundled Product"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-186"/> + <group value="Bundle"/> + </annotations> + <before> + <!--Creating data--> + <createData entity="_defaultCategory" stepKey="createPreReqCategory"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct1"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct2"/> + + <!--Admin login--> + <actionGroup stepKey="loginToAdminPanel" ref="LoginAsAdmin"/> + </before> + <after> + <deleteData createDataKey="createPreReqCategory" stepKey="deletePreReqCategory"/> + <deleteData createDataKey="simpleProduct1" stepKey="deleteSimpleProduct1"/> + <deleteData createDataKey="simpleProduct2" stepKey="deleteSimpleProduct2"/> + <actionGroup ref="logout" stepKey="logout"/> + </after> + <!--Go to bundle product creation page--> + <amOnPage url="{{AdminProductCreatePage.url(BundleProduct.set, BundleProduct.type)}}" stepKey="goToBundleProductCreationPage" /> + <waitForPageLoad stepKey="waitForBundleProductCreatePageToLoad"/> + + <!-- Add two bundle items --> + <conditionalClick selector="{{AdminProductFormBundleSection.bundleItemsToggle}}" dependentSelector="{{AdminProductFormBundleSection.bundleItemsToggle}}" visible="false" stepKey="conditionallyOpenSectionBundleItems"/> + <click selector="{{AdminProductFormBundleSection.addOption}}" stepKey="clickAddOption3"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" stepKey="waitForBundleOptions"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" userInput="{{BundleProduct.optionTitle1}}" stepKey="fillOptionTitle"/> + <selectOption selector="{{AdminProductFormBundleSection.bundleOptionXInputType('0')}}" userInput="{{BundleProduct.optionInputType1}}" stepKey="selectInputType"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="waitForAddProductsToBundle"/> + <click selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="clickAddProductsToOption"/> + <waitForPageLoad stepKey="waitForPageLoadAfterBundleProducts"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions"> + <argument name="product" value="$$simpleProduct1$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions2"> + <argument name="product" value="$$simpleProduct2$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow2"/> + <click selector="{{AdminAddProductsToOptionPanel.addSelectedProducts}}" stepKey="clickAddSelectedBundleProducts"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '0')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty1"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '1')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty2"/> + + <!--Fill out ancillary data on bundle product--> + <actionGroup ref="AncillaryPrepBundleProduct" stepKey="createBundledProductForTwoSimpleProducts"> + <argument name="bundleProduct" value="BundleProduct"/> + </actionGroup> + + <!--Disable dynamic pricing and enter fixed price of product--> + <scrollToTopOfPage stepKey="scrollToTopOfPage"/> + <click selector="{{AdminProductFormBundleSection.dynamicPrice}}" stepKey="clickDynamicPriceSwitcher"/> + <fillField userInput="{{BundleProduct.fixedPrice}}" selector="{{AdminProductFormBundleSection.priceField}}" stepKey="fillPrice"/> + + <!--Save the product--> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButton"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="messageYouSavedTheProductIsShown"/> + + <!--Testing that price appears correctly in admin catalog--> + <!--Set filter to product name--> + <amOnPage url="{{AdminCatalogProductPage.url}}" stepKey="GoToCatalogProductPage"/> + <waitForPageLoad stepKey="WaitForPageToLoad"/> + <conditionalClick selector="{{AdminProductCatalog.filtersClear}}" dependentSelector="{{AdminProductCatalog.filtersClear}}" visible="true" stepKey="ClickOnButtonToRemoveFiltersIfPresent"/> + <waitForPageLoad stepKey="WaitForClear"/> + <actionGroup ref="filterProductGridByName" stepKey="filterBundleProductOptionsDownToName"> + <argument name="product" value="BundleProduct"/> + </actionGroup> + <seeElement selector="{{AdminProductCatalog.priceOfFirstRow(BundleProduct.fixedPrice)}}" stepKey="seePrice"/> + <!--Storefront--> + <amOnPage url="{{BundleProduct.urlKey}}.html" stepKey="GoToProductPage"/> + <waitForPageLoad stepKey="waitForProductPageToLoad"/> + <pauseExecution stepKey="pause"/> + <seeElement selector="{{StorefrontBundledSection.fixedPricing(BundleProduct.fixedPrice)}}" stepKey="checkingForFixedPrice"/> + </test> +</tests> From 96da9eeb750cf2a820af44ee741b9a6247b4b59c Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 15:08:49 -0500 Subject: [PATCH 09/33] MC-217: Admin should be able to mass change bundle products status to Enabled/Disabled --- .../MassEnableDisableBundleProductsTest.xml | 159 ++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/MassEnableDisableBundleProductsTest.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/MassEnableDisableBundleProductsTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/MassEnableDisableBundleProductsTest.xml new file mode 100644 index 0000000000000..a6eeaeccff70d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/MassEnableDisableBundleProductsTest.xml @@ -0,0 +1,159 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <test name="MassEnableDisableBundleProductsTest"> + <annotations> + <features value="Bundle"/> + <stories value="Admin list bundle products"/> + <title value="Admin should be able to mass change bundle products status to Enabled/Disabled"/> + <description value="Admin should be able to mass change bundle products status to Enabled/Disabled"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-217"/> + <group value="Bundle"/> + <!--Skipped due to MAGETWO-92898--> + <group value="skip"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct1"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct2"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct3"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct4"/> + </before> + <after> + <!--Clear Filters--> + <actionGroup ref="AdminClearFiltersActionGroup" stepKey="ClearFiltersAfter"/> + <amOnPage url="{{AdminLogoutPage.url}}" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="simpleProduct1" stepKey="deleteSimpleProduct1"/> + <deleteData createDataKey="simpleProduct2" stepKey="deleteSimpleProduct2"/> + <deleteData createDataKey="simpleProduct3" stepKey="deleteSimpleProduct3"/> + <deleteData createDataKey="simpleProduct4" stepKey="deleteSimpleProduct4"/> + </after> + + <!--Go to bundle product creation page--> + <amOnPage url="{{AdminProductCreatePage.url(BundleProduct.set, BundleProduct.type)}}" stepKey="goToBundleProductCreationPage" /> + <waitForPageLoad stepKey="waitForBundleProductCreatePageToLoad"/> + + <!--Create bundle product--> + <conditionalClick selector="{{AdminProductFormBundleSection.bundleItemsToggle}}" dependentSelector="{{AdminProductFormBundleSection.bundleItemsToggle}}" visible="false" stepKey="conditionallyOpenSectionBundleItems"/> + <click selector="{{AdminProductFormBundleSection.addOption}}" stepKey="clickAddOption3"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" stepKey="waitForBundleOptions"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" userInput="{{BundleProduct.optionTitle1}}" stepKey="fillOptionTitle"/> + <selectOption selector="{{AdminProductFormBundleSection.bundleOptionXInputType('0')}}" userInput="{{BundleProduct.optionInputType1}}" stepKey="selectInputType"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="waitForAddProductsToBundle"/> + <click selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="clickAddProductsToOption"/> + <waitForPageLoad stepKey="waitForPageLoadAfterBundleProducts"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions"> + <argument name="product" value="$$simpleProduct1$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions2"> + <argument name="product" value="$$simpleProduct2$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow2"/> + <click selector="{{AdminAddProductsToOptionPanel.addSelectedProducts}}" stepKey="clickAddSelectedBundleProducts"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '0')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty1"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '1')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty2"/> + + <fillField selector="{{AdminProductFormBundleSection.productName}}" userInput="{{BundleProduct.name}}" stepKey="fillProductName"/> + <fillField selector="{{AdminProductFormBundleSection.productSku}}" userInput="{{BundleProduct.sku}}" stepKey="fillProductSku"/> + + <!--Trigger SEO drop down--> + <conditionalClick selector="{{AdminProductFormBundleSection.seoDropdown}}" dependentSelector="{{AdminProductFormBundleSection.seoDependent}}" visible="false" stepKey="OpenDropDownIfClosed"/> + <waitForPageLoad stepKey="WaitForDropDownSEO"/> + + <!--Fill URL input--> + <fillField userInput="{{BundleProduct.urlKey}}" selector="{{AdminProductFormBundleSection.urlKey}}" stepKey="FillsinSEOlinkExtension"/> + + <!--Save the product--> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButton"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="messageYouSavedTheProductIsShown"/> + + <!--Creating Second bundle product--> + <!--Go to bundle product creation page--> + <amOnPage url="{{AdminProductCreatePage.url(BundleProduct.set, BundleProduct.type)}}" stepKey="goToBundleProductCreationPage2" /> + <waitForPageLoad stepKey="waitForBundleProductCreatePageToLoad2"/> + + <!--Create bundle product 2--> + <conditionalClick selector="{{AdminProductFormBundleSection.bundleItemsToggle}}" dependentSelector="{{AdminProductFormBundleSection.bundleItemsToggle}}" visible="false" stepKey="conditionallyOpenSectionBundleItems2"/> + <click selector="{{AdminProductFormBundleSection.addOption}}" stepKey="clickAddOption32"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" stepKey="waitForBundleOptions2"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" userInput="{{BundleProduct.optionTitle1}}" stepKey="fillOptionTitle2"/> + <selectOption selector="{{AdminProductFormBundleSection.bundleOptionXInputType('0')}}" userInput="{{BundleProduct.optionInputType1}}" stepKey="selectInputType2"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="waitForAddProductsToBundle2"/> + <click selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="clickAddProductsToOption2"/> + <waitForPageLoad stepKey="waitForPageLoadAfterBundleProducts2"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptionsx2"> + <argument name="product" value="$$simpleProduct3$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRowx2"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions22"> + <argument name="product" value="$$simpleProduct4$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow22"/> + <click selector="{{AdminAddProductsToOptionPanel.addSelectedProducts}}" stepKey="clickAddSelectedBundleProducts2"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '0')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty12"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '1')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty22"/> + + <fillField selector="{{AdminProductFormBundleSection.productName}}" userInput="{{BundleProduct.name2}}" stepKey="fillProductName2"/> + <fillField selector="{{AdminProductFormBundleSection.productSku}}" userInput="{{BundleProduct.sku2}}" stepKey="fillProductSku2"/> + + <!--Trigger SEO drop down--> + <conditionalClick selector="{{AdminProductFormBundleSection.seoDropdown}}" dependentSelector="{{AdminProductFormBundleSection.seoDependent}}" visible="false" stepKey="OpenDropDownIfClosed2"/> + <waitForPageLoad stepKey="WaitForDropDownSEO2"/> + + <!--Fill URL input--> + <fillField userInput="{{BundleProduct.urlKey2}}" selector="{{AdminProductFormBundleSection.urlKey}}" stepKey="FillsinSEOlinkExtension2"/> + + <!--Save the product--> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButton2"/> + <see userInput="You saved the product." stepKey="messageYouSavedTheProductIsShown2"/> + + <!--Clear Filters--> + <actionGroup ref="AdminClearFiltersActionGroup" stepKey="ClearFilters"/> + + <!--Setting filter--> + <actionGroup ref="BundleProductFilter" stepKey="FilterForOnlyBundleProducts"/> + + <!--Disabling bundle products--> + <click selector="{{AdminProductCatalog.allCheckbox}}" stepKey="ClickOnSelectAllCheckBox"/> + <click selector="{{AdminProductCatalog.actions}}" stepKey="ClickOnActions"/> + <click selector="{{AdminProductCatalog.changeStatus}}" stepKey="ClickOnChangeStatus"/> + <click selector="{{AdminProductCatalog.disable}}" stepKey="ClickOnDisable"/> + <waitForPageLoad stepKey="waitForPageloadToExecute"/> + + <!--Clear Cache - reindex - resets products according to enabled/disabled view--> + <magentoCLI command="indexer:reindex" stepKey="reindex"/> + <magentoCLI command="cache:flush" stepKey="flushCache"/> + <actionGroup ref="ClearPageCacheActionGroup" stepKey="clearing"/> + + <!--Confirm bundle products have been disabled--> + <amOnPage url="{{BundleProduct.urlKey2}}.html" stepKey="GoToProductPage"/> + <waitForPageLoad stepKey="WaitForProductPageToLoadToShowElement"/> + <dontSeeElement stepKey="LookingForNameOfProductDisabled" selector="{{BundleStorefrontSection.bundleProductName}}"/> + + <!--Enabling bundle products--> + <amOnPage url="{{ProductCatalogPage.url}}" stepKey="GoToCatalogPageChangingView"/> + <waitForPageLoad stepKey="WaitForPageToLoadFullyChangingView"/> + <click selector="{{AdminProductCatalog.allCheckbox}}" stepKey="ClickOnSelectAllCheckBoxChangingView"/> + <click selector="{{AdminProductCatalog.actions}}" stepKey="ClickOnActionsChangingView"/> + <click selector="{{AdminProductCatalog.changeStatus}}" stepKey="ClickOnChangeStatusChangingView"/> + <click selector="{{AdminProductCatalog.enable}}" stepKey="ClickOnEnable"/> + + <!--Clear Cache - reindex - resets products according to enabled/disabled view--> + <magentoCLI command="indexer:reindex" stepKey="reindex2"/> + <magentoCLI command="cache:flush" stepKey="flushCache2"/> + + <!--Confirm bundle products have been enabled--> + <amOnPage url="{{BundleProduct.urlKey2}}.html" stepKey="GoToProductPageEnabled"/> + <waitForPageLoad stepKey="waitForBundleProductPageToLoad"/> + <seeElement stepKey="LookingForNameOfProduct" selector="{{BundleStorefrontSection.bundleProductName}}"/> + </test> +</tests> From 95c560dd9cdc6937ef1bd212e184b86687e51a4b Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 15:09:32 -0500 Subject: [PATCH 10/33] =?UTF-8?q?MC-220:=20Admin=20should=20be=20able=20to?= =?UTF-8?q?=20select=20a=20=E2=80=9CBundle=20Product=E2=80=9D=20product=20?= =?UTF-8?q?type=20when=20adding=20a=20new=20product?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Test/NewBundleProductSelectionTest.xml | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/NewBundleProductSelectionTest.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/NewBundleProductSelectionTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/NewBundleProductSelectionTest.xml new file mode 100644 index 0000000000000..cb19b9f996d56 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/NewBundleProductSelectionTest.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <test name="NewBundleProductSelectionTest"> + <annotations> + <features value="Bundle"/> + <stories value="Create/Edit bundle product in Admin"/> + <title value="Admin should be able to select a “Bundle Product” product type when adding a new product"/> + <description value="Admin should be able to select a “Bundle Product” product type when adding a new product"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-220"/> + <group value="Bundle"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + </before> + <after> + <amOnPage url="{{AdminLogoutPage.url}}" stepKey="amOnLogoutPage"/> + </after> + <amOnPage url="{{AdminCatalogProductPage.url}}" stepKey="GoToCatalogProductPage"/> + <waitForPageLoad stepKey="WaitForPageToLoad"/> + <!--Selecting new bundle product--> + <actionGroup ref="goToCreateProductPage" stepKey="goToCreateBundleProduct"> + <argument name="product" value="BundleProduct"/> + </actionGroup> + <!--Testing if on the bundle product creation page--> + <seeElement selector="{{AdminProductFormBundleSection.bundleOptionsDropDown}}" stepKey="CheckForPresenceOfBundleProductFeatures"/> + </test> +</tests> From 7976db0a75cf896754a95b57541d1c3c595687f4 Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 15:10:37 -0500 Subject: [PATCH 11/33] MC-225: Admin should be able to save and publish a bundle product --- .../Bundle/Test/AdminProductBundleCreationTest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminProductBundleCreationTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminProductBundleCreationTest.xml index 0298c5a037b31..2641919e204fa 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminProductBundleCreationTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminProductBundleCreationTest.xml @@ -65,7 +65,7 @@ <!--save the product/published by default--> <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButton"/> - <see userInput="You saved the product." stepKey="messageYouSavedTheProductIsShown"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="messageYouSavedTheProductIsShown"/> <!-- go to page--> <amOnPage url="{{BundleProduct.urlKey}}.html" stepKey="GoToProductPage"/> From 2cf72563f46237f3d4daa46d02d1e8871f93da17 Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 15:12:14 -0500 Subject: [PATCH 12/33] MC-215: Admin should be able to change a bundle product status to Enabled/Disabled --- .../Bundle/Test/EnableDisableBundleProductStatusTest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/EnableDisableBundleProductStatusTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/EnableDisableBundleProductStatusTest.xml index 1610903646be8..cb3900c8fb19d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/EnableDisableBundleProductStatusTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/EnableDisableBundleProductStatusTest.xml @@ -65,7 +65,7 @@ <!--Save the product--> <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButton"/> - <see userInput="You saved the product." stepKey="messageYouSavedTheProductIsShown"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="messageYouSavedTheProductIsShown"/> <!--Testing enabled view--> <!--Product enabled by default--> @@ -76,7 +76,7 @@ <!--Testing disabled view--> <actionGroup ref="FindProductToEdit" stepKey="FindProductEditPage"/> - <actionGroup ref="EnableDisableProduct" stepKey="EnableProduct"/> + <click stepKey="ClickOnEnableDisableToggle" selector="{{AdminProductFormBundleSection.enableDisableToggle}}"/> <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButtonAgain"/> <see userInput="You saved the product." stepKey="messageYouSavedTheProductIsShownAgain"/> <waitForPageLoad stepKey="PauseForSave"/> From e13e1082e7ffd73b23adc62eaa22fdaa36c53c78 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Mon, 18 Jun 2018 10:44:29 -0500 Subject: [PATCH 13/33] MC-172: [Visual Merchandiser] Admin should be able to mass assign products to category by SKU - added MFTF test (cherry picked from commit 9a58e19) --- .../Catalog/Page/AdminCategoryEditPage.xml | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryEditPage.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryEditPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryEditPage.xml new file mode 100644 index 0000000000000..95e80238d4af6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryEditPage.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<pages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="AdminCategoryEditPage" url="catalog/category/edit/id/{{categoryId}}/" area="admin" module="Catalog" parameterized="true"> + <section name="AdminCategorySidebarActionSection"/> + <section name="AdminCategoryMainActionsSection"/> + <section name="AdminCategorySidebarTreeSection"/> + <section name="AdminCategoryBasicFieldSection"/> + <section name="AdminCategorySEOSection"/> + <section name="AdminCategoryProductsSection"/> + <section name="AdminCategoryProductsGridSection"/> + <section name="AdminCategoryModalSection"/> + <section name="AdminCategoryMessagesSection"/> + <section name="AdminCategoryContentSection"/> + </page> +</pages> From a9771d6adc83577c60071aba55715345b19d0611 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Mon, 18 Jun 2018 11:24:50 -0500 Subject: [PATCH 14/33] MC-389: [Visual Merchandiser] Admin should be able to mass remove products to category by SKU" - added mftf test (cherry picked from commit 9c59138) --- .../Catalog/ActionGroup/StorefrontCategoryActionGroup.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/ActionGroup/StorefrontCategoryActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/ActionGroup/StorefrontCategoryActionGroup.xml index 3b04df7fdd115..77bba00ddddfb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/ActionGroup/StorefrontCategoryActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/ActionGroup/StorefrontCategoryActionGroup.xml @@ -32,4 +32,12 @@ <!-- @TODO: MAGETWO-80272 Move to Magento_Checkout --> <seeElement selector="{{StorefrontCategoryProductSection.ProductAddToCartByName(product.name)}}" stepKey="AssertAddToCart" /> </actionGroup> + + <!-- Check simple product not on the category page --> + <actionGroup name="StorefrontCheckSimpleProductNotInCategory"> + <arguments> + <argument name="product"/> + </arguments> + <dontSeeElement selector="{{StorefrontCategoryProductSection.ProductTitleByName(product.name)}}" stepKey="assertProductName"/> + </actionGroup> </actionGroups> \ No newline at end of file From 30ecf98d6b88ab984b7b147bbb6a2d15afbe11b5 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Tue, 19 Jun 2018 14:08:39 -0500 Subject: [PATCH 15/33] MC-389: [Visual Merchandiser] Admin should be able to mass remove products to category by SKU - added mftf test (cherry picked from commit 9faff43) --- .../Catalog/ActionGroup/StorefrontCategoryActionGroup.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/ActionGroup/StorefrontCategoryActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/ActionGroup/StorefrontCategoryActionGroup.xml index 77bba00ddddfb..3b04df7fdd115 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/ActionGroup/StorefrontCategoryActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/ActionGroup/StorefrontCategoryActionGroup.xml @@ -32,12 +32,4 @@ <!-- @TODO: MAGETWO-80272 Move to Magento_Checkout --> <seeElement selector="{{StorefrontCategoryProductSection.ProductAddToCartByName(product.name)}}" stepKey="AssertAddToCart" /> </actionGroup> - - <!-- Check simple product not on the category page --> - <actionGroup name="StorefrontCheckSimpleProductNotInCategory"> - <arguments> - <argument name="product"/> - </arguments> - <dontSeeElement selector="{{StorefrontCategoryProductSection.ProductTitleByName(product.name)}}" stepKey="assertProductName"/> - </actionGroup> </actionGroups> \ No newline at end of file From babc351228e7fac625f8d08aca1f269badd3cd2a Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 15:49:34 -0500 Subject: [PATCH 16/33] MC-223: Admin should be able to add/edit bundle items when creating/editing a bundle product --- .../Bundle/Test/AdminAddBundleItemsTest.xml | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml new file mode 100644 index 0000000000000..89fe3b3abbe8c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <test name="AdminAddBundleItemsTest"> + <annotations> + <features value="Bundle"/> + <stories value="Create/Edit bundle product in Admin"/> + <title value="Admin should be able to add/edit bundle items when creating/editing a bundle product"/> + <description value="Admin should be able to add/edit bundle items when creating/editing a bundle product"/> + <severity value="MAJOR"/> + <testCaseId value="MC-223"/> + <group value="banana"/> + </annotations> + <before> + <!--Creating data--> + <createData entity="_defaultCategory" stepKey="createPreReqCategory"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct1"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct2"/> + <!--Admin login--> + <actionGroup stepKey="loginToAdminPanel" ref="LoginAsAdmin"/> + </before> + <after> + <!--Deleting data--> + <deleteData createDataKey="createPreReqCategory" stepKey="deletePreReqCategory"/> + <deleteData createDataKey="simpleProduct1" stepKey="deleteSimpleProduct1"/> + <deleteData createDataKey="simpleProduct2" stepKey="deleteSimpleProduct2"/> + <!--Logging out--> + <actionGroup ref="logout" stepKey="logout"/> + </after> + <!--Go to bundle product creation page--> + <amOnPage url="{{AdminProductCreatePage.url(BundleProduct.set, BundleProduct.type)}}" stepKey="goToBundleProductCreationPage"/> + <waitForPageLoad stepKey="waitForBundleProductCreatePageToLoad"/> + + <!-- Add two bundle items --> + <conditionalClick selector="{{AdminProductFormBundleSection.bundleItemsToggle}}" dependentSelector="{{AdminProductFormBundleSection.bundleItemsToggle}}" visible="false" stepKey="conditionallyOpenSectionBundleItems"/> + <click selector="{{AdminProductFormBundleSection.addOption}}" stepKey="clickAddOption3"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" stepKey="waitForBundleOptions"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXTitle('0')}}" userInput="{{BundleProduct.optionTitle1}}" stepKey="fillOptionTitle"/> + <selectOption selector="{{AdminProductFormBundleSection.bundleOptionXInputType('0')}}" userInput="{{BundleProduct.optionInputType1}}" stepKey="selectInputType"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="waitForAddProductsToBundle"/> + <click selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="clickAddProductsToOption"/> + <waitForPageLoad stepKey="waitForPageLoadAfterBundleProducts"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions"> + <argument name="product" value="$$simpleProduct1$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions2"> + <argument name="product" value="$$simpleProduct2$$"/> + </actionGroup> + <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow2"/> + <click selector="{{AdminAddProductsToOptionPanel.addSelectedProducts}}" stepKey="clickAddSelectedBundleProducts"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '0')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty1"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '1')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillProductDefaultQty2"/> + + <!--Fill out ancillary data on bundle product--> + <actionGroup ref="AncillaryPrepBundleProduct" stepKey="createBundledProductForTwoSimpleProducts"> + <argument name="bundleProduct" value="BundleProduct"/> + </actionGroup> + + <!--Save the product--> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButton"/> + <see userInput="You saved the product." stepKey="messageYouSavedTheProductIsShown"/> + + <!--Checking on admin side--> + <scrollToTopOfPage stepKey="scroll"/> + <conditionalClick selector="{{AdminProductFormBundleSection.bundleItemsToggle}}" dependentSelector="{{AdminProductFormBundleSection.bundleItemsToggle}}" visible="false" stepKey="conditionallyOpenSectionBundleItems2"/> + <seeElement stepKey="LookingForBundleItemPresence" selector="{{AdminProductFormBundleSection.listedBundleItem}}"/> + + <!--Checking on customer side--> + <amOnPage url="{{BundleProduct.urlKey}}.html" stepKey="GoToProductPage"/> + <waitForPageLoad stepKey="waitForBundleProductPageToLoad"/> + <seeElement selector="{{StorefrontBundledSection.customizeProduct}}" stepKey="LookingForAbilityToAddOptions"/> + <click selector="{{StorefrontBundledSection.customizeProduct}}" stepKey="clickButtonToCustomize"/> + <waitForPageLoad stepKey="waitCustomizationDropDown"/> + <seeElement selector="{{StorefrontBundledSection.customizableBundleItemOption}}" stepKey="seeBundleItem"/> + </test> +</tests> From 527660aa780262c0843eb06c6424040af539d1c8 Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 16:01:36 -0500 Subject: [PATCH 17/33] MC-223: Admin should be able to add/edit bundle items when creating/editing a bundle product --- .../Bundle/Section/AdminProductFormBundleSection.xml | 1 + .../FunctionalTest/Bundle/Section/StorefrontBundledSection.xml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductFormBundleSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductFormBundleSection.xml index d5e3b9421372c..bfa841eb4ddce 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductFormBundleSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductFormBundleSection.xml @@ -54,5 +54,6 @@ <element name="bundledItems" type="block" selector="[data-index=bundle-items]"/> <element name="dynamicPrice" type="button" selector="//div[@data-index='price_type']//div[@data-role='switcher']" timeout="30"/> <element name="priceField" type="input" selector="//div[@data-index='price']//input"/> + <element name="listedBundleItem" type="text" selector="//tr[@data-repeat-index='0']//div"/> </section> </sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/StorefrontBundledSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/StorefrontBundledSection.xml index 346ff5c2ba0fc..ceec9d1704895 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/StorefrontBundledSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/StorefrontBundledSection.xml @@ -15,5 +15,7 @@ <element name="updateCart" type="button" selector="#product-updatecart-button" timeout="30"/> <element name="configuredPrice" type="block" selector=".price-configured_price .price"/> <element name="fixedPricing" type="text" selector="//div[@class='price-box price-final_price']//span[@id]//..//span[contains(text(),'{{var1}}')]" parameterized="true"/> + <element name="customizeProduct" type="button" selector="//*[@id='bundle-slide']"/> + <element name="customizableBundleItemOption" type="text" selector="//div[@class='field choice'][1]//input[@type='checkbox']"/> </section> </sections> From 55d3b79031081bdae47914f3cce55e8980d760ad Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 16:37:29 -0500 Subject: [PATCH 18/33] =?UTF-8?q?MC-221:=20Admin=20should=20be=20able=20to?= =?UTF-8?q?=20select/edit=20the=20=E2=80=9CAttributes=20Set=E2=80=9D=20whe?= =?UTF-8?q?n=20creating/editing=20a=20bundle=20product?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Bundle/Data/ProductData.xml | 1 + .../Bundle/Test/AdminAddBundleItemsTest.xml | 2 +- .../Test/AdminAttributeSetSelectionTest.xml | 22 +++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Data/ProductData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Data/ProductData.xml index a6dec92f21bc0..3683721909ab2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Data/ProductData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Data/ProductData.xml @@ -28,6 +28,7 @@ <data key="type">bundle</data> <data key="fixedPrice">10</data> <data key="fixedPriceFormatted">$10.00</data> + <data key="defaultAttribute">Default</data> </entity> <entity name="ApiBundleProduct" type="product2"> <data key="name" unique="suffix">Api Bundle Product</data> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml index 89fe3b3abbe8c..ec0890f2f42e1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml @@ -16,7 +16,7 @@ <description value="Admin should be able to add/edit bundle items when creating/editing a bundle product"/> <severity value="MAJOR"/> <testCaseId value="MC-223"/> - <group value="banana"/> + <group value="Bundle"/> </annotations> <before> <!--Creating data--> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml index d6839c89c7816..2f3ef61e10efb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml @@ -60,5 +60,27 @@ <argument name="product" value="BundleProduct"/> </actionGroup> <seeElement selector="{{AdminProductCatalog.attributeSetOfFirstRow(ProductAttributeFrontendLabel.label)}}" stepKey="seeAttributeSet"/> + + <!--Editing Attribute set--> + <click selector="{{AdminProductCatalog.attributeSetOfFirstRow(ProductAttributeFrontendLabel.label)}}" stepKey="clickAttributeSet2"/> + <waitForPageLoad stepKey="waitForPageLoad2"/> + <pauseExecution stepKey="pause2"/> + + <click selector="{{AdminProductFormSection.attributeSet}}" stepKey="startEditAttrSet2"/> + <fillField selector="{{AdminProductFormSection.attributeSetFilter}}" userInput="{{BundleProduct.defaultAttribute}}" stepKey="searchForAttrSet2"/> + <click selector="{{AdminProductFormSection.attributeSetFilterResult}}" stepKey="selectAttrSet2"/> + + <!--save the product/published by default--> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButton2"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="messageYouSavedTheProductIsShown2"/> + + <!--Testing that price appears correctly in admin catalog--> + <!--Set filter to product name--> + <amOnPage url="{{AdminCatalogProductPage.url}}" stepKey="GoToCatalogProductPage2"/> + <waitForPageLoad stepKey="WaitForPageToLoad2"/> + <actionGroup ref="filterProductGridByName" stepKey="filterBundleProductOptionsDownToName2"> + <argument name="product" value="BundleProduct"/> + </actionGroup> + <seeElement selector="{{AdminProductCatalog.attributeSetOfFirstRow(BundleProduct.defaultAttribute)}}" stepKey="seeAttributeSet2"/> </test> </tests> From 9cd301fae9430e9b8d2373f3f24883018513d75f Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 16:54:13 -0500 Subject: [PATCH 19/33] MC-216: Admin should be able to delete a bundle product --- .../Bundle/Section/AdminProductCatalogSection.xml | 1 + .../FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml index 9a9cdc065f57c..99382bc13e4d9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml @@ -24,5 +24,6 @@ <element name="priceOfFirstRow" type="text" selector="//tr[@data-repeat-index='0']//div[contains(., '{{var1}}')]" parameterized="true"/> <element name="AllProductsNotOfBundleType" type="text" selector="//td[5]/div[text() != 'Bundle Product']"/> <element name="attributeSetOfFirstRow" type="text" selector="//tr[@data-repeat-index='0']//div[contains(., '{{var1}}')]" parameterized="true"/> + <element name="deleteMessage" type="text" selector="//div[contains(text(), 'A total of 1 record(s) have been deleted.')]"/> </section> </sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml index 59c0da77946d8..659891144e74d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml @@ -76,9 +76,12 @@ <click selector="//button[@class='action-primary action-accept']" stepKey="ConfirmDelete"/> <waitForPageLoad stepKey="loading3"/> + <!--Locating delete message--> + <seeElement selector="{{AdminProductCatalog.deleteMessage}}" stepKey="deleteMessage"/> + <!--Testing deletion of product--> <amOnPage url="{{BundleProduct.urlKey}}.html" stepKey="GoToProductPageAgain"/> <waitForPageLoad stepKey="WaitForProductPageToLoadToShowElement"/> - <dontSeeElement stepKey="LookingForNameOfProductTwo" selector="{{BundleStorefrontSection.bundleProductName}}"/> + <dontSeeElement selector="{{BundleStorefrontSection.bundleProductName}}" stepKey="LookingForNameOfProductTwo"/> </test> </tests> From cfb588b3119b3e313982e6896b0905e3521db7cb Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 17:07:22 -0500 Subject: [PATCH 20/33] MC-218: Admin should be able to mass delete bundle products --- .../Bundle/Section/AdminProductCatalogSection.xml | 2 +- .../Bundle/Test/AdminMassDeleteBundleProducts.xml | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml index 99382bc13e4d9..d7c6b13117a27 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml @@ -24,6 +24,6 @@ <element name="priceOfFirstRow" type="text" selector="//tr[@data-repeat-index='0']//div[contains(., '{{var1}}')]" parameterized="true"/> <element name="AllProductsNotOfBundleType" type="text" selector="//td[5]/div[text() != 'Bundle Product']"/> <element name="attributeSetOfFirstRow" type="text" selector="//tr[@data-repeat-index='0']//div[contains(., '{{var1}}')]" parameterized="true"/> - <element name="deleteMessage" type="text" selector="//div[contains(text(), 'A total of 1 record(s) have been deleted.')]"/> + <element name="deleteMessage" type="text" selector="//div[contains(text(), 'record(s) have been deleted.')]"/> </section> </sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml index 97ce86a902978..2a1e7c79ba8b1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml @@ -124,6 +124,9 @@ <click selector="//button[@class='action-primary action-accept']" stepKey="ConfirmDelete"/> <waitForPageLoad stepKey="loading3"/> + <!--Locating delete message--> + <seeElement selector="{{AdminProductCatalog.deleteMessage}}" stepKey="deleteMessage"/> + <!--Clear Cache - resets products according to enabled/disabled view--> <actionGroup ref="ClearPageCacheActionGroup" stepKey="ClearPageCaches"/> From c4bc702f13c65776c3d17d88583e3f1640e4fc60 Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 17:17:43 -0500 Subject: [PATCH 21/33] MC-215: Admin should be able to change a bundle product status to Enabled/Disabled --- .../Bundle/Test/EnableDisableBundleProductStatusTest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/EnableDisableBundleProductStatusTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/EnableDisableBundleProductStatusTest.xml index cb3900c8fb19d..b579e35579432 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/EnableDisableBundleProductStatusTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/EnableDisableBundleProductStatusTest.xml @@ -16,7 +16,7 @@ <description value="Admin should be able to change a bundle product status to Enabled/Disabled"/> <severity value="CRITICAL"/> <testCaseId value="MC-215"/> - <group value="Bundle"/> + <group value="banana"/> </annotations> <before> <!--Creating data--> @@ -78,7 +78,7 @@ <actionGroup ref="FindProductToEdit" stepKey="FindProductEditPage"/> <click stepKey="ClickOnEnableDisableToggle" selector="{{AdminProductFormBundleSection.enableDisableToggle}}"/> <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButtonAgain"/> - <see userInput="You saved the product." stepKey="messageYouSavedTheProductIsShownAgain"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="messageYouSavedTheProductIsShown2"/> <waitForPageLoad stepKey="PauseForSave"/> <amOnPage url="{{BundleProduct.urlKey}}.html" stepKey="GoToProductPageAgain"/> <waitForPageLoad stepKey="WaitForProductPageToLoadToShowElement"/> From acb24d33a97d77ab8156d9be1d688b720ef2d68e Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Fri, 22 Jun 2018 17:23:24 -0500 Subject: [PATCH 22/33] MC-215: Admin should be able to change a bundle product status to Enabled/Disabled --- .../Bundle/Test/EnableDisableBundleProductStatusTest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/EnableDisableBundleProductStatusTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/EnableDisableBundleProductStatusTest.xml index b579e35579432..5588d30619c48 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/EnableDisableBundleProductStatusTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/EnableDisableBundleProductStatusTest.xml @@ -16,7 +16,7 @@ <description value="Admin should be able to change a bundle product status to Enabled/Disabled"/> <severity value="CRITICAL"/> <testCaseId value="MC-215"/> - <group value="banana"/> + <group value="Bundle"/> </annotations> <before> <!--Creating data--> From 819a3a300895f51d51660b3703f74e037f8dedfb Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Mon, 25 Jun 2018 11:18:33 -0500 Subject: [PATCH 23/33] MC-223: Admin should be able to add/edit bundle items when creating/editing a bundle product --- .../Section/AdminProductFormBundleSection.xml | 5 ++ .../Section/StorefrontBundledSection.xml | 1 + .../Bundle/Test/AdminAddBundleItemsTest.xml | 56 ++++++++++++++++++- 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductFormBundleSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductFormBundleSection.xml index bfa841eb4ddce..6bc65d2d18491 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductFormBundleSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductFormBundleSection.xml @@ -40,6 +40,8 @@ <element name="shortDescription" type="input" selector="#product_form_short_description"/> <!--BundleOptinsDropDown--> <element name="bundleOptionsDropDown" type="button" selector="div[data-index='bundle-items']" timeout="30"/> + <!--AddingAnOption--> + <element name="addOptions" type="button" selector="//tr[@data-repeat-index='0']//td[4]" timeout="30"/> <!--SEODropdownTab--> <element name="seoDropdown" type="button" selector="//div[@data-index='search-engine-optimization']"/> <element name="seoDependent" type="button" selector="//div[@data-index='search-engine-optimization']//div[contains(@class, '_show')]"/> @@ -55,5 +57,8 @@ <element name="dynamicPrice" type="button" selector="//div[@data-index='price_type']//div[@data-role='switcher']" timeout="30"/> <element name="priceField" type="input" selector="//div[@data-index='price']//input"/> <element name="listedBundleItem" type="text" selector="//tr[@data-repeat-index='0']//div"/> + <element name="listedBundleItem2" type="text" selector="//tr[@data-repeat-index='2']//div"/> + <!--FirstProductOption--> + <element name="firstProductOption" type="checkbox" selector="//div[@class='admin__data-grid-outer-wrap']//tr[@data-repeat-index='0']//input[@type='checkbox']"/> </section> </sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/StorefrontBundledSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/StorefrontBundledSection.xml index ceec9d1704895..2b9a1ca624f79 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/StorefrontBundledSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/StorefrontBundledSection.xml @@ -17,5 +17,6 @@ <element name="fixedPricing" type="text" selector="//div[@class='price-box price-final_price']//span[@id]//..//span[contains(text(),'{{var1}}')]" parameterized="true"/> <element name="customizeProduct" type="button" selector="//*[@id='bundle-slide']"/> <element name="customizableBundleItemOption" type="text" selector="//div[@class='field choice'][1]//input[@type='checkbox']"/> + <element name="customizableBundleItemOption2" type="text" selector="//div[@class='field choice'][2]//input[@type='checkbox']"/> </section> </sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml index ec0890f2f42e1..62334815bfdbd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml @@ -21,16 +21,20 @@ <before> <!--Creating data--> <createData entity="_defaultCategory" stepKey="createPreReqCategory"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct0"/> <createData entity="SimpleProduct2" stepKey="simpleProduct1"/> <createData entity="SimpleProduct2" stepKey="simpleProduct2"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct3"/> <!--Admin login--> <actionGroup stepKey="loginToAdminPanel" ref="LoginAsAdmin"/> </before> <after> <!--Deleting data--> <deleteData createDataKey="createPreReqCategory" stepKey="deletePreReqCategory"/> + <deleteData createDataKey="simpleProduct0" stepKey="deleteSimpleProduct0"/> <deleteData createDataKey="simpleProduct1" stepKey="deleteSimpleProduct1"/> <deleteData createDataKey="simpleProduct2" stepKey="deleteSimpleProduct2"/> + <deleteData createDataKey="simpleProduct3" stepKey="deleteSimpleProduct3"/> <!--Logging out--> <actionGroup ref="logout" stepKey="logout"/> </after> @@ -48,11 +52,11 @@ <click selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="clickAddProductsToOption"/> <waitForPageLoad stepKey="waitForPageLoadAfterBundleProducts"/> <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions"> - <argument name="product" value="$$simpleProduct1$$"/> + <argument name="product" value="$$simpleProduct0$$"/> </actionGroup> <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow"/> <actionGroup ref="filterProductGridBySku" stepKey="filterBundleProductOptions2"> - <argument name="product" value="$$simpleProduct2$$"/> + <argument name="product" value="$$simpleProduct1$$"/> </actionGroup> <checkOption selector="{{AdminAddProductsToOptionPanel.firstCheckbox}}" stepKey="selectFirstGridRow2"/> <click selector="{{AdminAddProductsToOptionPanel.addSelectedProducts}}" stepKey="clickAddSelectedBundleProducts"/> @@ -80,5 +84,53 @@ <click selector="{{StorefrontBundledSection.customizeProduct}}" stepKey="clickButtonToCustomize"/> <waitForPageLoad stepKey="waitCustomizationDropDown"/> <seeElement selector="{{StorefrontBundledSection.customizableBundleItemOption}}" stepKey="seeBundleItem"/> + + <!--Add another bundle option with 2 items--> + <!--Go to bundle product creation page--> + <amOnPage url="{{AdminCatalogProductPage.url}}" stepKey="GoToCatalogProductPage"/> + <waitForPageLoad stepKey="WaitForPageToLoad"/> + <conditionalClick selector="{{AdminProductCatalog.filtersClear}}" dependentSelector="{{AdminProductCatalog.filtersClear}}" visible="true" stepKey="ClickOnButtonToRemoveFiltersIfPresent"/> + <waitForPageLoad stepKey="WaitForClear"/> + <actionGroup ref="filterProductGridByName" stepKey="filterBundleProductOptionsDownToName"> + <argument name="product" value="BundleProduct"/> + </actionGroup> + <click selector="{{AdminProductFormBundleSection.addOptions}}" stepKey="clickOnBundleProductToEdit"/> + <conditionalClick selector="{{AdminProductFormBundleSection.bundleItemsToggle}}" dependentSelector="{{AdminProductFormBundleSection.bundleItemsToggle}}" visible="false" stepKey="conditionallyOpenSectionBundleItemsToEdit"/> + <click selector="{{AdminProductFormBundleSection.addOption}}" stepKey="clickAddOption"/> + <pauseExecution stepKey="pause"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.bundleOptionXTitle('1')}}" stepKey="waitForBundleOptionsToAppear"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXTitle('1')}}" userInput="{{BundleProduct.optionTitle1}}" stepKey="fillNewestOptionTitle"/> + <selectOption selector="{{AdminProductFormBundleSection.bundleOptionXInputType('1')}}" userInput="{{BundleProduct.optionInputType1}}" stepKey="selectNewInputType"/> + <waitForElementVisible selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="waitForAddProductsToNewBundle"/> + <click selector="{{AdminProductFormBundleSection.addProductsToOption}}" stepKey="clickAddProductsToNewOption"/> + <waitForPageLoad stepKey="waitForPageLoadAfterNewBundleProducts"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterNewBundleProductOptions"> + <argument name="product" value="$$simpleProduct2$$"/> + </actionGroup> + <checkOption selector="//div[@class='admin__data-grid-outer-wrap']//tr[@data-repeat-index='0']//input[@type='checkbox']" stepKey="selectNewFirstGridRow"/> + <actionGroup ref="filterProductGridBySku" stepKey="filterNewBundleProductOptions2"> + <argument name="product" value="$$simpleProduct3$$"/> + </actionGroup> + <checkOption selector="{{AdminProductFormBundleSection.firstProductOption}}" stepKey="selectNewFirstGridRow2"/> + <click selector="{{AdminAddProductsToOptionPanel.addSelectedProducts}}" stepKey="clickAddNewSelectedBundleProducts"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '2')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillNewProductDefaultQty1"/> + <fillField selector="{{AdminProductFormBundleSection.bundleOptionXProductYQuantity('0', '3')}}" userInput="{{BundleProduct.defaultQuantity}}" stepKey="fillNewProductDefaultQty2"/> + + <!--Save the product--> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveButtonAgain"/> + <see userInput="You saved the product." stepKey="messageYouSavedTheProductIsShownAgain"/> + + <!--Checking on admin side--> + <scrollToTopOfPage stepKey="scrollAgain"/> + <conditionalClick selector="{{AdminProductFormBundleSection.bundleItemsToggle}}" dependentSelector="{{AdminProductFormBundleSection.bundleItemsToggle}}" visible="false" stepKey="conditionallyOpenNewSectionBundleItems2"/> + <seeElement selector="{{AdminProductFormBundleSection.listedBundleItem2}}" stepKey="LookingForNewBundleItemPresence"/> + + <!--Checking on customer side--> + <amOnPage url="{{BundleProduct.urlKey}}.html" stepKey="GoToProductPageAgain"/> + <waitForPageLoad stepKey="waitForBundleProductPageToLoadAgain"/> + <seeElement selector="{{StorefrontBundledSection.customizeProduct}}" stepKey="LookingForAbilityToAddBothOptions"/> + <click selector="{{StorefrontBundledSection.customizeProduct}}" stepKey="clickButtonAgainToCustomize"/> + <waitForPageLoad stepKey="waitForBothCustomizationDropDown"/> + <seeElement selector="{{StorefrontBundledSection.customizableBundleItemOption2}}" stepKey="seeBundleItems"/> </test> </tests> From b1a29073214071addb1803632830eaca3fb5f3c6 Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Mon, 25 Jun 2018 13:40:16 -0500 Subject: [PATCH 24/33] MC-223: Admin should be able to add/edit bundle items when creating/editing a bundle product --- .../FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml index 62334815bfdbd..340cca6fba91d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml @@ -97,7 +97,6 @@ <click selector="{{AdminProductFormBundleSection.addOptions}}" stepKey="clickOnBundleProductToEdit"/> <conditionalClick selector="{{AdminProductFormBundleSection.bundleItemsToggle}}" dependentSelector="{{AdminProductFormBundleSection.bundleItemsToggle}}" visible="false" stepKey="conditionallyOpenSectionBundleItemsToEdit"/> <click selector="{{AdminProductFormBundleSection.addOption}}" stepKey="clickAddOption"/> - <pauseExecution stepKey="pause"/> <waitForElementVisible selector="{{AdminProductFormBundleSection.bundleOptionXTitle('1')}}" stepKey="waitForBundleOptionsToAppear"/> <fillField selector="{{AdminProductFormBundleSection.bundleOptionXTitle('1')}}" userInput="{{BundleProduct.optionTitle1}}" stepKey="fillNewestOptionTitle"/> <selectOption selector="{{AdminProductFormBundleSection.bundleOptionXInputType('1')}}" userInput="{{BundleProduct.optionInputType1}}" stepKey="selectNewInputType"/> From ea1690957ba29a6854b2380760de249d039349c6 Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Mon, 25 Jun 2018 13:40:58 -0500 Subject: [PATCH 25/33] =?UTF-8?q?MC-221:=20Admin=20should=20be=20able=20to?= =?UTF-8?q?=20select/edit=20the=20=E2=80=9CAttributes=20Set=E2=80=9D=20whe?= =?UTF-8?q?n=20creating/editing=20a=20bundle=20product?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Bundle/Test/AdminAttributeSetSelectionTest.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml index 2f3ef61e10efb..0540399357f04 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml @@ -64,7 +64,6 @@ <!--Editing Attribute set--> <click selector="{{AdminProductCatalog.attributeSetOfFirstRow(ProductAttributeFrontendLabel.label)}}" stepKey="clickAttributeSet2"/> <waitForPageLoad stepKey="waitForPageLoad2"/> - <pauseExecution stepKey="pause2"/> <click selector="{{AdminProductFormSection.attributeSet}}" stepKey="startEditAttrSet2"/> <fillField selector="{{AdminProductFormSection.attributeSetFilter}}" userInput="{{BundleProduct.defaultAttribute}}" stepKey="searchForAttrSet2"/> From 99d6268f1976e0eac97fd9022f0eb37cba1c81b4 Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Mon, 25 Jun 2018 13:41:54 -0500 Subject: [PATCH 26/33] MC-186: Admin should be able to apply fixed pricing for Bundled Product --- .../FunctionalTest/Bundle/Test/BundleProductFixedPricingTest.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/BundleProductFixedPricingTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/BundleProductFixedPricingTest.xml index e541b7af7097c..9cef48a3fe976 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/BundleProductFixedPricingTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/BundleProductFixedPricingTest.xml @@ -85,7 +85,6 @@ <!--Storefront--> <amOnPage url="{{BundleProduct.urlKey}}.html" stepKey="GoToProductPage"/> <waitForPageLoad stepKey="waitForProductPageToLoad"/> - <pauseExecution stepKey="pause"/> <seeElement selector="{{StorefrontBundledSection.fixedPricing(BundleProduct.fixedPrice)}}" stepKey="checkingForFixedPrice"/> </test> </tests> From ee16a2e6db36f9c8a968f68cd2e52711bed863be Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Mon, 25 Jun 2018 13:59:33 -0500 Subject: [PATCH 27/33] MC-214: Admin should be able to filter product list by type = Bundle Product --- .../AdminClearFiltersActionGroup.xml | 2 +- .../BundleProductFilterActionGroup.xml | 8 ++--- .../EnableDisableProductActionGroup.xml | 2 +- .../Section/AdminProductCatalogSection.xml | 29 ------------------- .../Bundle/Test/AdminAddBundleItemsTest.xml | 2 +- .../Test/AdminAttributeSetSelectionTest.xml | 6 ++-- .../Bundle/Test/AdminDeleteABundleProduct.xml | 8 ++--- .../AdminFilterProductListByBundleProduct.xml | 4 +-- .../Test/AdminMassDeleteBundleProducts.xml | 8 ++--- .../Test/BundleProductFixedPricingTest.xml | 4 +-- .../MassEnableDisableBundleProductsTest.xml | 16 +++++----- .../Section/AdminProductFiltersSection.xml | 16 ++++++++++ 12 files changed, 46 insertions(+), 59 deletions(-) delete mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/AdminClearFiltersActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/AdminClearFiltersActionGroup.xml index ca9a249dd42b9..cac724588937a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/AdminClearFiltersActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/AdminClearFiltersActionGroup.xml @@ -11,6 +11,6 @@ <actionGroup name="AdminClearFiltersActionGroup"> <amOnPage url="{{AdminCatalogProductPage.url}}" stepKey="GoToCatalogProductPage"/> <waitForPageLoad stepKey="WaitForPageToLoad"/> - <conditionalClick selector="{{AdminProductCatalog.filtersClear}}" dependentSelector="{{AdminProductCatalog.filtersClear}}" visible="true" stepKey="ClickOnButtonToRemoveFiltersIfPresent"/> + <conditionalClick selector="{{AdminProductFiltersSection.filtersClear}}" dependentSelector="{{AdminProductFiltersSection.filtersClear}}" visible="true" stepKey="ClickOnButtonToRemoveFiltersIfPresent"/> </actionGroup> </actionGroups> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/BundleProductFilterActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/BundleProductFilterActionGroup.xml index a790c17ca4e9e..cb0e9558976f5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/BundleProductFilterActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/BundleProductFilterActionGroup.xml @@ -11,9 +11,9 @@ <actionGroup name="BundleProductFilter"> <!--Setting filter--> <!--Prereq: go to admin product catalog page--> - <click selector="{{AdminProductCatalog.filter}}" stepKey="ClickOnFilter"/> - <click selector="{{AdminProductCatalog.typeDropDown}}" stepKey="ClickOnTypeDropDown"/> - <click selector="{{AdminProductCatalog.bundleOption}}" stepKey="ClickOnBundleOption"/> - <click selector="{{AdminProductCatalog.applyFilters}}" stepKey="ClickOnApplyFilters"/> + <click selector="{{AdminProductFiltersSection.filter}}" stepKey="ClickOnFilter"/> + <click selector="{{AdminProductFiltersSection.typeDropDown}}" stepKey="ClickOnTypeDropDown"/> + <click selector="{{AdminProductFiltersSection.bundleOption}}" stepKey="ClickOnBundleOption"/> + <click selector="{{AdminProductFiltersSection.applyFilters}}" stepKey="ClickOnApplyFilters"/> </actionGroup> </actionGroups> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/EnableDisableProductActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/EnableDisableProductActionGroup.xml index ede23d20fd294..1da30c47ce891 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/EnableDisableProductActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/ActionGroup/EnableDisableProductActionGroup.xml @@ -25,7 +25,7 @@ <actionGroup name="FindProductToEdit"> <amOnPage url="{{ProductCatalogPage.url}}" stepKey="GoToProductCatalog"/> <waitForPageLoad stepKey="WaitForCatalogProductPageToLoad"/> - <conditionalClick selector="{{AdminProductCatalog.filtersClear}}" dependentSelector="{{AdminProductCatalog.filtersClear}}" visible="true" stepKey="ClickOnButtonToRemoveFiltersIfPresent"/> + <conditionalClick selector="{{AdminProductFiltersSection.filtersClear}}" dependentSelector="{{AdminProductFiltersSection.filtersClear}}" visible="true" stepKey="ClickOnButtonToRemoveFiltersIfPresent"/> <waitForPageLoad stepKey="RemovingFilters"/> <fillField userInput="{{BundleProduct.name}}" selector="#fulltext" stepKey="EnterProductNameInSearch"/> <click stepKey="ClickSearch" selector="{{AdminProductFormBundleSection.searchButton}}"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml deleted file mode 100644 index d7c6b13117a27..0000000000000 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Section/AdminProductCatalogSection.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - /** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ ---> - -<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> - <section name="AdminProductCatalog"> - <element name="filter" type="button" selector="//div[@class='data-grid-filters-action-wrap']/button" timeout="30"/> - <element name="typeDropDown" type="multiselect" selector="//select[@name='type_id']" timeout="30"/> - <element name="bundleOption" type="multiselect" selector="//select[@name='type_id']/option[4]" timeout="30"/> - <element name="applyFilters" type="button" selector="//button[@class='action-secondary']" timeout="30"/> - <element name="allCheckbox" type="checkbox" selector="//div[@data-role='grid-wrapper']//label[@data-bind='attr: {for: ko.uid}']" timeout="30"/> - <element name="actions" type="button" selector="//div[@class='action-select-wrap']/button" timeout="30"/> - <element name="changeStatus" type="multiselect" selector="//div[@class='action-menu-items']//li[2]" timeout="30"/> - <element name="delete" type="multiselect" selector="//div[@class='action-menu-items']//li[1]" timeout="30"/> - <element name="disable" type="multiselect" selector="//div[@class='action-menu-items']//ul[@class='action-submenu _active']//li[span='Disable']" timeout="30"/> - <element name="enable" type="multiselect" selector="//div[@class='action-menu-items']//ul[@class='action-submenu _active']//li[span='Enable']" timeout="30"/> - <element name="filtersClear" type="button" selector="//div[@class='admin__data-grid-header']//button[@data-action='grid-filter-reset']" timeout="30"/> - <element name="productType" type="text" selector="//tr[@data-repeat-index='{{var1}}']//td[5]//div[@class='data-grid-cell-content']" parameterized="true"/> - <element name="priceOfFirstRow" type="text" selector="//tr[@data-repeat-index='0']//div[contains(., '{{var1}}')]" parameterized="true"/> - <element name="AllProductsNotOfBundleType" type="text" selector="//td[5]/div[text() != 'Bundle Product']"/> - <element name="attributeSetOfFirstRow" type="text" selector="//tr[@data-repeat-index='0']//div[contains(., '{{var1}}')]" parameterized="true"/> - <element name="deleteMessage" type="text" selector="//div[contains(text(), 'record(s) have been deleted.')]"/> - </section> -</sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml index 340cca6fba91d..c46f052db59ac 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAddBundleItemsTest.xml @@ -89,7 +89,7 @@ <!--Go to bundle product creation page--> <amOnPage url="{{AdminCatalogProductPage.url}}" stepKey="GoToCatalogProductPage"/> <waitForPageLoad stepKey="WaitForPageToLoad"/> - <conditionalClick selector="{{AdminProductCatalog.filtersClear}}" dependentSelector="{{AdminProductCatalog.filtersClear}}" visible="true" stepKey="ClickOnButtonToRemoveFiltersIfPresent"/> + <conditionalClick selector="{{AdminProductFiltersSection.filtersClear}}" dependentSelector="{{AdminProductFiltersSection.filtersClear}}" visible="true" stepKey="ClickOnButtonToRemoveFiltersIfPresent"/> <waitForPageLoad stepKey="WaitForClear"/> <actionGroup ref="filterProductGridByName" stepKey="filterBundleProductOptionsDownToName"> <argument name="product" value="BundleProduct"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml index 0540399357f04..abf8ed3a8bc87 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminAttributeSetSelectionTest.xml @@ -59,10 +59,10 @@ <actionGroup ref="filterProductGridByName" stepKey="filterBundleProductOptionsDownToName"> <argument name="product" value="BundleProduct"/> </actionGroup> - <seeElement selector="{{AdminProductCatalog.attributeSetOfFirstRow(ProductAttributeFrontendLabel.label)}}" stepKey="seeAttributeSet"/> + <seeElement selector="{{AdminProductFiltersSection.attributeSetOfFirstRow(ProductAttributeFrontendLabel.label)}}" stepKey="seeAttributeSet"/> <!--Editing Attribute set--> - <click selector="{{AdminProductCatalog.attributeSetOfFirstRow(ProductAttributeFrontendLabel.label)}}" stepKey="clickAttributeSet2"/> + <click selector="{{AdminProductFiltersSection.attributeSetOfFirstRow(ProductAttributeFrontendLabel.label)}}" stepKey="clickAttributeSet2"/> <waitForPageLoad stepKey="waitForPageLoad2"/> <click selector="{{AdminProductFormSection.attributeSet}}" stepKey="startEditAttrSet2"/> @@ -80,6 +80,6 @@ <actionGroup ref="filterProductGridByName" stepKey="filterBundleProductOptionsDownToName2"> <argument name="product" value="BundleProduct"/> </actionGroup> - <seeElement selector="{{AdminProductCatalog.attributeSetOfFirstRow(BundleProduct.defaultAttribute)}}" stepKey="seeAttributeSet2"/> + <seeElement selector="{{AdminProductFiltersSection.attributeSetOfFirstRow(BundleProduct.defaultAttribute)}}" stepKey="seeAttributeSet2"/> </test> </tests> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml index 659891144e74d..e4a5c292dfeec 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml @@ -67,17 +67,17 @@ <actionGroup ref="filterProductGridByName" stepKey="filterBundleProductOptionsDownToName"> <argument name="product" value="BundleProduct"/> </actionGroup> - <click selector="{{AdminProductCatalog.allCheckbox}}" stepKey="SelectAllOnly1"/> + <click selector="{{AdminProductFiltersSection.allCheckbox}}" stepKey="SelectAllOnly1"/> <waitForPageLoad stepKey="loading2"/> <!--Delete--> - <click selector="{{AdminProductCatalog.actions}}" stepKey="ClickOnActionsChangingView"/> - <click selector="{{AdminProductCatalog.delete}}" stepKey="ClickDelete"/> + <click selector="{{AdminProductFiltersSection.actions}}" stepKey="ClickOnActionsChangingView"/> + <click selector="{{AdminProductFiltersSection.delete}}" stepKey="ClickDelete"/> <click selector="//button[@class='action-primary action-accept']" stepKey="ConfirmDelete"/> <waitForPageLoad stepKey="loading3"/> <!--Locating delete message--> - <seeElement selector="{{AdminProductCatalog.deleteMessage}}" stepKey="deleteMessage"/> + <seeElement selector="{{AdminProductFiltersSection.deleteMessage}}" stepKey="deleteMessage"/> <!--Testing deletion of product--> <amOnPage url="{{BundleProduct.urlKey}}.html" stepKey="GoToProductPageAgain"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminFilterProductListByBundleProduct.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminFilterProductListByBundleProduct.xml index 0f277ccff8b89..ad4e90a050a40 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminFilterProductListByBundleProduct.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminFilterProductListByBundleProduct.xml @@ -67,7 +67,7 @@ <actionGroup ref="BundleProductFilter" stepKey="FilterForOnlyBundleProducts"/> <!--Testing application of filter--> - <see selector="{{AdminProductCatalog.productType('0')}}" userInput="Bundle Product" stepKey="correcType0"/> - <dontSeeElement selector="{{AdminProductCatalog.AllProductsNotOfBundleType}}" stepKey="checkingRowsForIncorrectType"/> + <see selector="{{AdminProductFiltersSection.productType('0')}}" userInput="Bundle Product" stepKey="correcType0"/> + <dontSeeElement selector="{{AdminProductFiltersSection.AllProductsNotOfBundleType}}" stepKey="checkingRowsForIncorrectType"/> </test> </tests> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml index 2a1e7c79ba8b1..7241eb418b7e6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml @@ -117,15 +117,15 @@ <actionGroup ref="BundleProductFilter" stepKey="FilterForOnlyBundleProducts"/> <!--Delete--> - <click selector="{{AdminProductCatalog.allCheckbox}}" stepKey="SelectAllOnly1"/> + <click selector="{{AdminProductFiltersSection.allCheckbox}}" stepKey="SelectAllOnly1"/> <waitForPageLoad stepKey="loading"/> - <click selector="{{AdminProductCatalog.actions}}" stepKey="ClickOnActionsChangingView"/> - <click selector="{{AdminProductCatalog.delete}}" stepKey="ClickDelete"/> + <click selector="{{AdminProductFiltersSection.actions}}" stepKey="ClickOnActionsChangingView"/> + <click selector="{{AdminProductFiltersSection.delete}}" stepKey="ClickDelete"/> <click selector="//button[@class='action-primary action-accept']" stepKey="ConfirmDelete"/> <waitForPageLoad stepKey="loading3"/> <!--Locating delete message--> - <seeElement selector="{{AdminProductCatalog.deleteMessage}}" stepKey="deleteMessage"/> + <seeElement selector="{{AdminProductFiltersSection.deleteMessage}}" stepKey="deleteMessage"/> <!--Clear Cache - resets products according to enabled/disabled view--> <actionGroup ref="ClearPageCacheActionGroup" stepKey="ClearPageCaches"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/BundleProductFixedPricingTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/BundleProductFixedPricingTest.xml index 9cef48a3fe976..0df2619ab6db2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/BundleProductFixedPricingTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/BundleProductFixedPricingTest.xml @@ -76,12 +76,12 @@ <!--Set filter to product name--> <amOnPage url="{{AdminCatalogProductPage.url}}" stepKey="GoToCatalogProductPage"/> <waitForPageLoad stepKey="WaitForPageToLoad"/> - <conditionalClick selector="{{AdminProductCatalog.filtersClear}}" dependentSelector="{{AdminProductCatalog.filtersClear}}" visible="true" stepKey="ClickOnButtonToRemoveFiltersIfPresent"/> + <conditionalClick selector="{{AdminProductFiltersSection.filtersClear}}" dependentSelector="{{AdminProductFiltersSection.filtersClear}}" visible="true" stepKey="ClickOnButtonToRemoveFiltersIfPresent"/> <waitForPageLoad stepKey="WaitForClear"/> <actionGroup ref="filterProductGridByName" stepKey="filterBundleProductOptionsDownToName"> <argument name="product" value="BundleProduct"/> </actionGroup> - <seeElement selector="{{AdminProductCatalog.priceOfFirstRow(BundleProduct.fixedPrice)}}" stepKey="seePrice"/> + <seeElement selector="{{AdminProductFiltersSection.priceOfFirstRow(BundleProduct.fixedPrice)}}" stepKey="seePrice"/> <!--Storefront--> <amOnPage url="{{BundleProduct.urlKey}}.html" stepKey="GoToProductPage"/> <waitForPageLoad stepKey="waitForProductPageToLoad"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/MassEnableDisableBundleProductsTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/MassEnableDisableBundleProductsTest.xml index a6eeaeccff70d..2754cbcccab7c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/MassEnableDisableBundleProductsTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/MassEnableDisableBundleProductsTest.xml @@ -123,10 +123,10 @@ <actionGroup ref="BundleProductFilter" stepKey="FilterForOnlyBundleProducts"/> <!--Disabling bundle products--> - <click selector="{{AdminProductCatalog.allCheckbox}}" stepKey="ClickOnSelectAllCheckBox"/> - <click selector="{{AdminProductCatalog.actions}}" stepKey="ClickOnActions"/> - <click selector="{{AdminProductCatalog.changeStatus}}" stepKey="ClickOnChangeStatus"/> - <click selector="{{AdminProductCatalog.disable}}" stepKey="ClickOnDisable"/> + <click selector="{{AdminProductFiltersSection.allCheckbox}}" stepKey="ClickOnSelectAllCheckBox"/> + <click selector="{{AdminProductFiltersSection.actions}}" stepKey="ClickOnActions"/> + <click selector="{{AdminProductFiltersSection.changeStatus}}" stepKey="ClickOnChangeStatus"/> + <click selector="{{AdminProductFiltersSection.disable}}" stepKey="ClickOnDisable"/> <waitForPageLoad stepKey="waitForPageloadToExecute"/> <!--Clear Cache - reindex - resets products according to enabled/disabled view--> @@ -142,10 +142,10 @@ <!--Enabling bundle products--> <amOnPage url="{{ProductCatalogPage.url}}" stepKey="GoToCatalogPageChangingView"/> <waitForPageLoad stepKey="WaitForPageToLoadFullyChangingView"/> - <click selector="{{AdminProductCatalog.allCheckbox}}" stepKey="ClickOnSelectAllCheckBoxChangingView"/> - <click selector="{{AdminProductCatalog.actions}}" stepKey="ClickOnActionsChangingView"/> - <click selector="{{AdminProductCatalog.changeStatus}}" stepKey="ClickOnChangeStatusChangingView"/> - <click selector="{{AdminProductCatalog.enable}}" stepKey="ClickOnEnable"/> + <click selector="{{AdminProductFiltersSection.allCheckbox}}" stepKey="ClickOnSelectAllCheckBoxChangingView"/> + <click selector="{{AdminProductFiltersSection.actions}}" stepKey="ClickOnActionsChangingView"/> + <click selector="{{AdminProductFiltersSection.changeStatus}}" stepKey="ClickOnChangeStatusChangingView"/> + <click selector="{{AdminProductFiltersSection.enable}}" stepKey="ClickOnEnable"/> <!--Clear Cache - reindex - resets products according to enabled/disabled view--> <magentoCLI command="indexer:reindex" stepKey="reindex2"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFiltersSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFiltersSection.xml index a2d9970e9a758..5184e8a21be35 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFiltersSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFiltersSection.xml @@ -13,5 +13,21 @@ <element name="nameInput" type="input" selector="input[name=name]"/> <element name="skuInput" type="input" selector="input[name=sku]"/> <element name="apply" type="button" selector="button[data-action=grid-filter-apply]" timeout="30"/> + <element name="filter" type="button" selector="//div[@class='data-grid-filters-action-wrap']/button" timeout="30"/> + <element name="typeDropDown" type="multiselect" selector="//select[@name='type_id']" timeout="30"/> + <element name="bundleOption" type="multiselect" selector="//select[@name='type_id']/option[4]" timeout="30"/> + <element name="applyFilters" type="button" selector="//button[@class='action-secondary']" timeout="30"/> + <element name="allCheckbox" type="checkbox" selector="//div[@data-role='grid-wrapper']//label[@data-bind='attr: {for: ko.uid}']" timeout="30"/> + <element name="actions" type="button" selector="//div[@class='action-select-wrap']/button" timeout="30"/> + <element name="changeStatus" type="multiselect" selector="//div[@class='action-menu-items']//li[2]" timeout="30"/> + <element name="delete" type="multiselect" selector="//div[@class='action-menu-items']//li[1]" timeout="30"/> + <element name="disable" type="multiselect" selector="//div[@class='action-menu-items']//ul[@class='action-submenu _active']//li[span='Disable']" timeout="30"/> + <element name="enable" type="multiselect" selector="//div[@class='action-menu-items']//ul[@class='action-submenu _active']//li[span='Enable']" timeout="30"/> + <element name="filtersClear" type="button" selector="//div[@class='admin__data-grid-header']//button[@data-action='grid-filter-reset']" timeout="30"/> + <element name="productType" type="text" selector="//tr[@data-repeat-index='{{var1}}']//td[5]//div[@class='data-grid-cell-content']" parameterized="true"/> + <element name="priceOfFirstRow" type="text" selector="//tr[@data-repeat-index='0']//div[contains(., '{{var1}}')]" parameterized="true"/> + <element name="AllProductsNotOfBundleType" type="text" selector="//td[5]/div[text() != 'Bundle Product']"/> + <element name="attributeSetOfFirstRow" type="text" selector="//tr[@data-repeat-index='0']//div[contains(., '{{var1}}')]" parameterized="true"/> + <element name="deleteMessage" type="text" selector="//div[contains(text(), 'record(s) have been deleted.')]"/> </section> </sections> From a417fca11b217d767ff4a9a9fc48d53053ead49d Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Mon, 25 Jun 2018 14:07:47 -0500 Subject: [PATCH 28/33] MC-216: Admin should be able to delete a bundle product --- .../FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml | 2 +- .../Bundle/Test/AdminMassDeleteBundleProducts.xml | 2 +- .../Catalog/Section/AdminCategoryMessagesSection.xml | 1 + .../Catalog/Section/AdminProductFiltersSection.xml | 1 - 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml index e4a5c292dfeec..997cb1a6f42cd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml @@ -77,7 +77,7 @@ <waitForPageLoad stepKey="loading3"/> <!--Locating delete message--> - <seeElement selector="{{AdminProductFiltersSection.deleteMessage}}" stepKey="deleteMessage"/> + <seeElement selector="{{AdminCategoryMessagesSection.deleteMessage}}" stepKey="deleteMessage"/> <!--Testing deletion of product--> <amOnPage url="{{BundleProduct.urlKey}}.html" stepKey="GoToProductPageAgain"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml index 7241eb418b7e6..ef1231b219799 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml @@ -125,7 +125,7 @@ <waitForPageLoad stepKey="loading3"/> <!--Locating delete message--> - <seeElement selector="{{AdminProductFiltersSection.deleteMessage}}" stepKey="deleteMessage"/> + <seeElement selector="{{AdminCategoryMessagesSection.deleteMessage}}" stepKey="deleteMessage"/> <!--Clear Cache - resets products according to enabled/disabled view--> <actionGroup ref="ClearPageCacheActionGroup" stepKey="ClearPageCaches"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml index e78a7f06927d8..8275803c20d34 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml @@ -10,5 +10,6 @@ xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminCategoryMessagesSection"> <element name="SuccessMessage" type="text" selector=".message-success"/> + <element name="deleteMessage" type="text" selector="//div[contains(text(), 'record(s) have been deleted.')]"/> </section> </sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFiltersSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFiltersSection.xml index 5184e8a21be35..2ad371f7c51bc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFiltersSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFiltersSection.xml @@ -28,6 +28,5 @@ <element name="priceOfFirstRow" type="text" selector="//tr[@data-repeat-index='0']//div[contains(., '{{var1}}')]" parameterized="true"/> <element name="AllProductsNotOfBundleType" type="text" selector="//td[5]/div[text() != 'Bundle Product']"/> <element name="attributeSetOfFirstRow" type="text" selector="//tr[@data-repeat-index='0']//div[contains(., '{{var1}}')]" parameterized="true"/> - <element name="deleteMessage" type="text" selector="//div[contains(text(), 'record(s) have been deleted.')]"/> </section> </sections> From da60866fae52f17102de6e8d4285ba1a4cd9f17c Mon Sep 17 00:00:00 2001 From: Robert Clendenin <clendenin@protonmail.com> Date: Mon, 25 Jun 2018 14:39:24 -0500 Subject: [PATCH 29/33] MC-216: Admin should be able to delete a bundle product --- .../FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml | 2 +- .../Bundle/Test/AdminMassDeleteBundleProducts.xml | 2 +- .../Catalog/Section/AdminCategoryMessagesSection.xml | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml index 997cb1a6f42cd..5c2244e85a061 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminDeleteABundleProduct.xml @@ -77,7 +77,7 @@ <waitForPageLoad stepKey="loading3"/> <!--Locating delete message--> - <seeElement selector="{{AdminCategoryMessagesSection.deleteMessage}}" stepKey="deleteMessage"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="deleteMessage"/> <!--Testing deletion of product--> <amOnPage url="{{BundleProduct.urlKey}}.html" stepKey="GoToProductPageAgain"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml index ef1231b219799..ca692e5d9374d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/Test/AdminMassDeleteBundleProducts.xml @@ -125,7 +125,7 @@ <waitForPageLoad stepKey="loading3"/> <!--Locating delete message--> - <seeElement selector="{{AdminCategoryMessagesSection.deleteMessage}}" stepKey="deleteMessage"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="deleteMessage"/> <!--Clear Cache - resets products according to enabled/disabled view--> <actionGroup ref="ClearPageCacheActionGroup" stepKey="ClearPageCaches"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml index 8275803c20d34..e78a7f06927d8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml @@ -10,6 +10,5 @@ xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminCategoryMessagesSection"> <element name="SuccessMessage" type="text" selector=".message-success"/> - <element name="deleteMessage" type="text" selector="//div[contains(text(), 'record(s) have been deleted.')]"/> </section> </sections> From 988125ccc244e12487031fc9dc35600a6114cb89 Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Mon, 25 Jun 2018 16:04:52 -0500 Subject: [PATCH 30/33] MQE-1090: Stabilize RE-develop branch - Changed order of MC-191 steps --- .../Test/AdminSimpleProductImagesTest.xml | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml index cacb58be92b53..d0d5ba4a6f7ba 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml @@ -244,6 +244,16 @@ <!-- Save the product with all 3 images --> <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="saveProduct"/> + <!-- Go to the product page and see the Base image --> + <amOnPage url="$$product.name$$.html" stepKey="goToProductPage"/> + <waitForPageLoad stepKey="wait4"/> + <seeElement selector="{{StorefrontProductMediaSection.imageFile('/adobe-base')}}" stepKey="seeBase"/> + + <!-- Go to the category page and see the Small image --> + <amOnPage url="$$category.name$$.html" stepKey="goToCategoryPage"/> + <waitForPageLoad stepKey="wait3"/> + <seeElement selector="{{StorefrontCategoryProductSection.ProductImageBySrc('/adobe-small')}}" stepKey="seeThumb"/> + <!-- Go to the admin grid and see the Thumbnail image --> <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="goToProductIndex2"/> <waitForPageLoad stepKey="wait2"/> @@ -253,16 +263,6 @@ </actionGroup> <seeElement selector="{{AdminProductGridSection.productThumbnailBySrc('/adobe-thumb')}}" stepKey="seeBaseInGrid"/> - <!-- Go to the category page and see the Small image --> - <amOnPage url="$$category.name$$.html" stepKey="goToCategoryPage"/> - <waitForPageLoad stepKey="wait3"/> - <seeElement selector="{{StorefrontCategoryProductSection.ProductImageBySrc('/adobe-small')}}" stepKey="seeThumb"/> - - <!-- Go to the product page and see the Base image --> - <amOnPage url="$$product.name$$.html" stepKey="goToProductPage"/> - <waitForPageLoad stepKey="wait4"/> - <seeElement selector="{{StorefrontProductMediaSection.imageFile('/adobe-base')}}" stepKey="seeBase"/> - <!-- Go to the product edit page again --> <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="goToProductIndex3"/> <waitForPageLoad stepKey="wait5"/> From 00f985b029ae431cfcf8608f623c46b08058db5d Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Tue, 26 Jun 2018 10:49:28 -0500 Subject: [PATCH 31/33] MQE-1090: Stabilize RE-develop branch - Skip MC-191 for now so as to not delay weekly PR --- .../Catalog/Test/AdminSimpleProductImagesTest.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml index d0d5ba4a6f7ba..78dfd419682a4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml @@ -172,6 +172,8 @@ <description value="Admin should be able to remove Product Images assigned as Base, Small and Thumbnail from Simple Product"/> <severity value="CRITICAL"/> <testCaseId value="MC-191"/> + <!-- skipped due to MAGETWO-92996 --> + <group value="skip"/> <group value="Catalog"/> </annotations> From 26cbef3c9bb4217ae42fcb06eb7fe470792bd9f0 Mon Sep 17 00:00:00 2001 From: Levi Villarreal <villarreallevi@gmail.com> Date: Tue, 26 Jun 2018 12:02:05 -0500 Subject: [PATCH 32/33] MC-256: Tax for Simple Product Quote should be recalculated according to inputted data on Checkout flow for Logged in Customer - Includes: MC-255, MC-258, MC-259, MC-295, MC-296, MC-297, MC-298 --- .../ActionGroup/SecondaryGridActionGroup.xml | 31 ++ .../Section/AdminSecondaryGridSection.xml | 17 + ...eckoutFillNewBillingAddressActionGroup.xml | 20 + .../StorefrontProductCartActionGroup.xml | 11 + .../Section/CheckoutPaymentSection.xml | 5 + .../Section/CheckoutShippingSection.xml | 13 +- ...SignUpNewUserFromStorefrontActionGroup.xml | 21 + .../Customer/Data/AddressData.xml | 34 ++ .../Customer/Data/CustomerData.xml | 26 + .../Customer/Data/RegionData.xml | 10 + ...omerDashboardAccountInformationSection.xml | 13 + .../Tax/ActionGroup/AdminTaxActionGroup.xml | 103 ++++ .../FunctionalTest/Tax/Data/TaxCodeData.xml | 29 ++ .../Tax/Page/AdminNewTaxRulePage.xml | 14 + .../Tax/Page/AdminTaxConfigurationPage.xml | 14 + .../Tax/Page/AdminTaxRateGridPage.xml | 14 + .../Tax/Page/AdminTaxRuleGridPage.xml | 15 + .../Tax/Section/AdminConfigureTaxSection.xml | 41 ++ .../Tax/Section/AdminTaxRulesSection.xml | 23 + .../Tax/Test/StorefrontTaxQuoteCartTest.xml | 458 ++++++++++++++++++ .../Test/StorefrontTaxQuoteCheckoutTest.xml | 458 ++++++++++++++++++ .../Magento/FunctionalTest/Tax/composer.json | 8 +- 22 files changed, 1372 insertions(+), 6 deletions(-) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/ActionGroup/SecondaryGridActionGroup.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminSecondaryGridSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/ActionGroup/AdminTaxActionGroup.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Data/TaxCodeData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminNewTaxRulePage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminTaxConfigurationPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminTaxRateGridPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminTaxRuleGridPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Section/AdminConfigureTaxSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Section/AdminTaxRulesSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Test/StorefrontTaxQuoteCartTest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Test/StorefrontTaxQuoteCheckoutTest.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/ActionGroup/SecondaryGridActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/ActionGroup/SecondaryGridActionGroup.xml new file mode 100644 index 0000000000000..7c2c1c3c5702b --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/ActionGroup/SecondaryGridActionGroup.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/actionGroupSchema.xsd"> + <!-- Action group to delete an item given that items name --> + <!-- Must already be on the admin page containing the grid --> + <actionGroup name="deleteEntitySecondaryGrid"> + <arguments> + <argument name="name" type="string"/> + <argument name="searchInput" type="string"/> + </arguments> + + <!-- search for the name --> + <click stepKey="resetFilters" selector="{{AdminSecondaryGridSection.resetFilters}}"/> + <fillField stepKey="fillIdentifier" selector="{{searchInput}}" userInput="{{name}}"/> + <click stepKey="searchForName" selector="{{AdminSecondaryGridSection.searchButton}}"/> + <click stepKey="clickResult" selector="{{AdminSecondaryGridSection.firstRow}}"/> + <waitForPageLoad stepKey="waitForTaxRateLoad"/> + + <!-- delete the rule --> + <click stepKey="clickDelete" selector="{{AdminStoresMainActionsSection.deleteButton}}"/> + <click stepKey="clickOk" selector="{{AdminConfirmationModalSection.ok}}"/> + <see stepKey="seeSuccess" selector="{{AdminCategoryMessagesSection.SuccessMessage}}" userInput="deleted"/> + </actionGroup> +</actionGroups> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminSecondaryGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminSecondaryGridSection.xml new file mode 100644 index 0000000000000..a3268630567ad --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminSecondaryGridSection.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminSecondaryGridSection"> + <element name="resetFilters" type="button" selector="[title='Reset Filter']"/> + <element name="taxIdentifierSearch" type="input" selector=".col-code .admin__control-text"/> + <element name="searchButton" type="input" selector=".admin__filter-actions [title='Search']"/> + <element name="firstRow" type="block" selector="tr[data-role='row']"/> + </section> +</sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/ActionGroup/GuestCheckoutFillNewBillingAddressActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/ActionGroup/GuestCheckoutFillNewBillingAddressActionGroup.xml index e24b59e1cf115..98b3e439382b7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/ActionGroup/GuestCheckoutFillNewBillingAddressActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/ActionGroup/GuestCheckoutFillNewBillingAddressActionGroup.xml @@ -25,4 +25,24 @@ <fillField selector="{{CheckoutPaymentSection.guestTelephone}}" userInput="{{customerAddressVar.telephone}}" stepKey="enterTelephone"/> </actionGroup> + <actionGroup name="LoggedInCheckoutFillNewBillingAddressActionGroup"> + <arguments> + <argument name="Address"/> + <!-- the classPrefix argument is to specifically select the inputs of the correct form + this is to prevent having 3 action groups doing essentially the same thing --> + <argument name="classPrefix" type="string" defaultValue=""/> + </arguments> + <fillField stepKey="fillFirstName" selector="{{classPrefix}} {{CheckoutShippingSection.firstName}}" userInput="{{Address.firstname}}"/> + <fillField stepKey="fillLastName" selector="{{classPrefix}} {{CheckoutShippingSection.lastName}}" userInput="{{Address.lastname}}"/> + <fillField stepKey="fillCompany" selector="{{classPrefix}} {{CheckoutShippingSection.company}}" userInput="{{Address.company}}"/> + <fillField stepKey="fillPhoneNumber" selector="{{classPrefix}} {{CheckoutShippingSection.telephone}}" userInput="{{Address.telephone}}"/> + <fillField stepKey="fillStreetAddress1" selector="{{classPrefix}} {{CheckoutShippingSection.street}}" userInput="{{Address.street[0]}}"/> + <fillField stepKey="fillStreetAddress2" selector="{{classPrefix}} {{CheckoutShippingSection.street2}}" userInput="{{Address.street[1]}}"/> + <fillField stepKey="fillCityName" selector="{{classPrefix}} {{CheckoutShippingSection.city}}" userInput="{{Address.city}}"/> + <selectOption stepKey="selectState" selector="{{classPrefix}} {{CheckoutShippingSection.region}}" userInput="{{Address.state}}"/> + <fillField stepKey="fillZip" selector="{{classPrefix}} {{CheckoutShippingSection.postcode}}" userInput="{{Address.postcode}}"/> + <selectOption stepKey="selectCounty" selector="{{classPrefix}} {{CheckoutShippingSection.country}}" userInput="{{Address.country_id}}"/> + <waitForPageLoad stepKey="waitForFormUpdate2"/> + </actionGroup> + </actionGroups> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/ActionGroup/StorefrontProductCartActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/ActionGroup/StorefrontProductCartActionGroup.xml index d7ecdc31586b4..b98e1046c4a5b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/ActionGroup/StorefrontProductCartActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/ActionGroup/StorefrontProductCartActionGroup.xml @@ -77,4 +77,15 @@ <click selector="{{StorefrontMinicartSection.showCart}}" stepKey="clickShowMinicart" /> <click selector="{{StorefrontMinicartSection.viewAndEditCart}}" stepKey="clickCart" /> </actionGroup> + + <actionGroup name="changeSummaryQuoteAddress"> + <arguments> + <argument name="taxCode"/> + </arguments> + <conditionalClick stepKey="openShippingDetails" selector="{{CheckoutCartSummarySection.shippingHeading}}" dependentSelector="{{CheckoutCartSummarySection.country}}" visible="false"/> + <selectOption stepKey="selectCountry" selector="{{CheckoutCartSummarySection.country}}" userInput="{{taxCode.country}}"/> + <selectOption stepKey="selectStateProvince" selector="{{CheckoutCartSummarySection.country}}" userInput="{{taxCode.country}}"/> + <fillField stepKey="fillZip" selector="{{CheckoutCartSummarySection.postcode}}" userInput="{{taxCode.zip}}"/> + <waitForPageLoad stepKey="waitForFormUpdate"/> + </actionGroup> </actionGroups> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml index 2af5986cc092f..3d1e9f24b8d9a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml @@ -41,5 +41,10 @@ <element name="paymentMethodTitle" type="text" selector=".payment-method-title span" /> <element name="productOptionsByProductItemPrice" type="text" selector="//div[@class='product-item-inner']//div[@class='subtotal']//span[@class='price'][contains(.,'{{var1}}')]//ancestor::div[@class='product-item-details']//div[@class='product options']" parameterized="true"/> <element name="productOptionsActiveByProductItemPrice" type="text" selector="//div[@class='subtotal']//span[@class='price'][contains(.,'{{var1}}')]//ancestor::div[@class='product-item-details']//div[@class='product options active']" parameterized="true"/> + + <element name="tax" type="text" selector="[data-th='Tax'] span" timeout="30"/> + <element name="taxPercentage" type="text" selector=".totals-tax-details .mark"/> + <element name="orderSummaryTotalIncluding" type="text" selector="//tr[@class='grand totals incl']//span[@class='price']" /> + <element name="orderSummaryTotalExcluding" type="text" selector="//tr[@class='grand totals excl']//span[@class='price']" /> </section> </sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml index 54fa168a1a4eb..247c9664caf0a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml @@ -10,17 +10,26 @@ xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="CheckoutShippingSection"> <element name="isShippingStep" type="text" selector="//*[@class='opc-progress-bar']/li[contains(@class, '_active') and span[contains(.,'Shipping')]]"/> + <element name="shippingTab" type="text" selector="//li[contains(@class,'opc-progress-bar-item')]//*[text()='Shipping']" timeout="30"/> <element name="selectedShippingAddress" type="text" selector=".shipping-address-item.selected-item"/> - <element name="newAddressButton" type="button" selector="#checkout-step-shipping button"/> + <element name="editAddressButton" type="button" selector=".action-edit-address" timeout="30"/> + <element name="addressDropdown" type="select" selector="[name=billing_address_id]"/> + <element name="newAddressButton" type="button" selector=".action-show-popup" timeout="30"/> <element name="email" type="input" selector="#customer-email"/> <element name="firstName" type="input" selector="input[name=firstname]"/> <element name="lastName" type="input" selector="input[name=lastname]"/> + <element name="company" type="input" selector="input[name=company]"/> <element name="street" type="input" selector="input[name='street[0]']"/> + <element name="street2" type="input" selector="input[name='street[1]']"/> <element name="city" type="input" selector="input[name=city]"/> <element name="region" type="select" selector="select[name=region_id]"/> <element name="postcode" type="input" selector="input[name=postcode]"/> + <element name="country" type="select" selector="select[name=country_id]"/> <element name="telephone" type="input" selector="input[name=telephone]"/> - <element name="next" type="button" selector="button.button.action.continue.primary"/> + <element name="saveAddress" type="button" selector=".action-save-address"/> + <element name="updateAddress" type="button" selector=".action-update"/> + <element name="next" type="button" selector="button.button.action.continue.primary" timeout="30"/> <element name="firstShippingMethod" type="radio" selector="//*[@id='checkout-shipping-method-load']//input[@class='radio']"/> + <element name="defaultShipping" type="button" selector=".billing-address-details"/> </section> </sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/ActionGroup/SignUpNewUserFromStorefrontActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/ActionGroup/SignUpNewUserFromStorefrontActionGroup.xml index ef00e2d72f100..04c50378c6607 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/ActionGroup/SignUpNewUserFromStorefrontActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/ActionGroup/SignUpNewUserFromStorefrontActionGroup.xml @@ -24,4 +24,25 @@ <see stepKey="seeLastName" userInput="{{Customer.lastname}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> <see stepKey="seeEmail" userInput="{{Customer.email}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> </actionGroup> + + <actionGroup name="EnterCustomerAddressInfo"> + <arguments> + <argument name="Address"/> + </arguments> + + <amOnPage url="customer/address/new/" stepKey="goToAddressPage"/> + <waitForPageLoad stepKey="waitForAddressPage"/> + <fillField stepKey="fillFirstName" selector="{{StorefrontCustomerAddressSection.firstName}}" userInput="{{Address.firstname}}"/> + <fillField stepKey="fillLastName" selector="{{StorefrontCustomerAddressSection.lastName}}" userInput="{{Address.lastname}}"/> + <fillField stepKey="fillCompany" selector="{{StorefrontCustomerAddressSection.company}}" userInput="{{Address.company}}"/> + <fillField stepKey="fillPhoneNumber" selector="{{StorefrontCustomerAddressSection.phoneNumber}}" userInput="{{Address.telephone}}"/> + <fillField stepKey="fillStreetAddress1" selector="{{StorefrontCustomerAddressSection.streetAddress1}}" userInput="{{Address.street[0]}}"/> + <fillField stepKey="fillStreetAddress2" selector="{{StorefrontCustomerAddressSection.streetAddress2}}" userInput="{{Address.street[1]}}"/> + <fillField stepKey="fillCityName" selector="{{StorefrontCustomerAddressSection.city}}" userInput="{{Address.city}}"/> + <selectOption stepKey="selectState" selector="{{StorefrontCustomerAddressSection.stateProvince}}" userInput="{{Address.state}}"/> + <fillField stepKey="fillZip" selector="{{StorefrontCustomerAddressSection.zip}}" userInput="{{Address.postcode}}"/> + <selectOption stepKey="selectCounty" selector="{{StorefrontCustomerAddressSection.country}}" userInput="{{Address.country_id}}"/> + + <click stepKey="saveAddress" selector="{{StorefrontCustomerAddressSection.saveAddress}}"/> + </actionGroup> </actionGroups> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/AddressData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/AddressData.xml index 5f89a3ce9aaa7..efa7a1cdb5e69 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/AddressData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/AddressData.xml @@ -49,4 +49,38 @@ <data key="default_shipping">Yes</data> <requiredEntity type="region">RegionTX</requiredEntity> </entity> + <entity name="US_Address_NY" type="address"> + <data key="firstname">John</data> + <data key="lastname">Doe</data> + <data key="company">368</data> + <array key="street"> + <item>368 Broadway St.</item> + <item>113</item> + </array> + <data key="city">New York</data> + <data key="state">New York</data> + <data key="country_id">US</data> + <data key="postcode">10001</data> + <data key="telephone">512-345-6789</data> + <data key="default_billing">Yes</data> + <data key="default_shipping">Yes</data> + <requiredEntity type="region">RegionNY</requiredEntity> + </entity> + <entity name="US_Address_CA" type="address"> + <data key="firstname">John</data> + <data key="lastname">Doe</data> + <data key="company">Magento</data> + <array key="street"> + <item>7700 West Parmer Lane</item> + <item>113</item> + </array> + <data key="city">Los Angeles</data> + <data key="state">California</data> + <data key="country_id">US</data> + <data key="postcode">90001</data> + <data key="telephone">512-345-6789</data> + <data key="default_billing">Yes</data> + <data key="default_shipping">Yes</data> + <requiredEntity type="region">RegionCA</requiredEntity> + </entity> </entities> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml index 9dee9a1c245f5..4d65f2aa56b65 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml @@ -45,6 +45,32 @@ <data key="website_id">0</data> <requiredEntity type="address">US_Address_TX</requiredEntity> </entity> + <entity name="Simple_US_Customer_NY" type="customer"> + <data key="group_id">0</data> + <data key="default_billing">true</data> + <data key="default_shipping">true</data> + <data key="email" unique="prefix">John.Doe@example.com</data> + <data key="firstname">John</data> + <data key="lastname">Doe</data> + <data key="fullname">John Doe</data> + <data key="password">pwdTest123!</data> + <data key="store_id">0</data> + <data key="website_id">0</data> + <requiredEntity type="address">US_Address_NY</requiredEntity> + </entity> + <entity name="Simple_US_Customer_CA" type="customer"> + <data key="group_id">0</data> + <data key="default_billing">true</data> + <data key="default_shipping">true</data> + <data key="email" unique="prefix">John.Doe@example.com</data> + <data key="firstname">John</data> + <data key="lastname">Doe</data> + <data key="fullname">John Doe</data> + <data key="password">pwdTest123!</data> + <data key="store_id">0</data> + <data key="website_id">0</data> + <requiredEntity type="address">US_Address_CA</requiredEntity> + </entity> <entity name="Simple_US_Customer_For_Update" type="customer"> <var key="id" entityKey="id" entityType="customer"/> <data key="firstname">Jane</data> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/RegionData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/RegionData.xml index b69235531dc3c..95e0362e84d71 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/RegionData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/RegionData.xml @@ -17,4 +17,14 @@ <data key="region_code">TX</data> <data key="region_id">1</data> </entity> + <entity name="RegionCA" type="region"> + <data key="region">California</data> + <data key="region_code">CA</data> + <data key="region_id">2</data> + </entity> + <entity name="RegionNY" type="region"> + <data key="region">New York</data> + <data key="region_code">NY</data> + <data key="region_id">3</data> + </entity> </entities> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml index 4e8ce1ffaf202..001dde0b98afd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml @@ -11,4 +11,17 @@ <section name="StorefrontCustomerDashboardAccountInformationSection"> <element name="ContactInformation" type="textarea" selector=".box.box-information .box-content"/> </section> + <section name="StorefrontCustomerAddressSection"> + <element name="firstName" type="input" selector="#firstname"/> + <element name="lastName" type="input" selector="#lastname"/> + <element name="company" type="input" selector="#company"/> + <element name="phoneNumber" type="input" selector="#telephone"/> + <element name="streetAddress1" type="input" selector="#street_1"/> + <element name="streetAddress2" type="input" selector="#street_2"/> + <element name="city" type="input" selector="#city"/> + <element name="stateProvince" type="select" selector="#region_id"/> + <element name="zip" type="input" selector="#zip"/> + <element name="country" type="select" selector="#country"/> + <element name="saveAddress" type="button" selector="[data-action='save-address']"/> + </section> </sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/ActionGroup/AdminTaxActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/ActionGroup/AdminTaxActionGroup.xml new file mode 100644 index 0000000000000..946402d080e99 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/ActionGroup/AdminTaxActionGroup.xml @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/actionGroupSchema.xsd"> + <!-- Change the tax configuration to display in cart and checkout flow --> + <actionGroup name="editTaxConfigurationByUI"> + <!-- navigate to the tax configuration page --> + <amOnPage url="{{AdminTaxConfigurationPage.url}}" stepKey="goToAdminTaxPage"/> + <waitForPageLoad stepKey="waitForTaxConfigLoad"/> + + <!-- change the default state to California --> + <conditionalClick stepKey="clickCalculationSettings" selector="{{AdminConfigureTaxSection.defaultDestination}}" dependentSelector="{{AdminConfigureTaxSection.systemValueDefaultState}}" visible="false" /> + <uncheckOption stepKey="clickDefaultState" selector="{{AdminConfigureTaxSection.systemValueDefaultState}}"/> + <selectOption stepKey="selectDefaultState" selector="{{AdminConfigureTaxSection.dropdownDefaultState}}" userInput="California"/> + <fillField stepKey="fillDefaultPostCode" selector="{{AdminConfigureTaxSection.defaultPostCode}}" userInput="*"/> + + <!-- change the options for shopping cart display to show tax --> + <conditionalClick stepKey="clickShoppingCartDisplaySettings" selector="{{AdminConfigureTaxSection.shoppingCartDisplay}}" dependentSelector="{{AdminConfigureTaxSection.systemValueIncludeTaxTotalCart}}" visible="false"/> + <uncheckOption stepKey="clickTaxTotalCart" selector="{{AdminConfigureTaxSection.systemValueIncludeTaxTotalCart}}"/> + <selectOption stepKey="selectTaxTotalCart" selector="{{AdminConfigureTaxSection.dropdownIncludeTaxTotalCart}}" userInput="Yes"/> + <uncheckOption stepKey="clickDisplayTaxSummaryCart" selector="{{AdminConfigureTaxSection.systemValueDisplayTaxSummaryCart}}"/> + <selectOption stepKey="selectDisplayTaxSummaryCart" selector="{{AdminConfigureTaxSection.dropdownDisplayTaxSummaryCart}}" userInput="Yes"/> + <uncheckOption stepKey="clickDisplayZeroTaxCart" selector="{{AdminConfigureTaxSection.systemValueDisplayZeroTaxCart}}"/> + <selectOption stepKey="selectDisplayZeroTaxCart" selector="{{AdminConfigureTaxSection.dropdownDisplayZeroTaxCart}}" userInput="Yes"/> + + <!-- change the options for orders, invoices, credit memos display to show tax --> + <conditionalClick stepKey="clickOrdersInvoicesCreditSales" selector="{{AdminConfigureTaxSection.ordersInvoicesCreditSales}}" dependentSelector="{{AdminConfigureTaxSection.systemValueIncludeTaxTotalSales}}" visible="false"/> + <uncheckOption stepKey="clickTaxTotalSales" selector="{{AdminConfigureTaxSection.systemValueIncludeTaxTotalSales}}"/> + <selectOption stepKey="selectTaxTotalSales" selector="{{AdminConfigureTaxSection.dropdownIncludeTaxTotalSales}}" userInput="Yes"/> + <uncheckOption stepKey="clickDisplayTaxSummarySales" selector="{{AdminConfigureTaxSection.systemValueDisplayTaxSummarySales}}"/> + <selectOption stepKey="selectDisplayTaxSummarySales" selector="{{AdminConfigureTaxSection.dropdownDisplayTaxSummarySales}}" userInput="Yes"/> + <uncheckOption stepKey="clickDisplayZeroTaxSales" selector="{{AdminConfigureTaxSection.systemValueDisplayZeroTaxSales}}"/> + <selectOption stepKey="selectDisplayZeroTaxSales" selector="{{AdminConfigureTaxSection.dropdownDisplayZeroTaxSales}}" userInput="Yes"/> + + <!-- Save the settings --> + <scrollToTopOfPage stepKey="scrollToTop"/> + <click stepKey="saveTaxOptions" selector="{{AdminCategoryMainActionsSection.SaveButton}}"/> + <waitForPageLoad stepKey="waitForTaxSaved"/> + <see stepKey="seeSuccess" selector="{{AdminCategoryMessagesSection.SuccessMessage}}" userInput="You saved the configuration."/> + </actionGroup> + + <actionGroup name="changeToDefaultTaxConfigurationUI"> + <!-- navigate to the tax configuration page --> + <amOnPage url="{{AdminTaxConfigurationPage.url}}" stepKey="goToAdminTaxPage"/> + <waitForPageLoad stepKey="waitForTaxConfigLoad"/> + + <!-- change the default state to none --> + <conditionalClick stepKey="clickCalculationSettings" selector="{{AdminConfigureTaxSection.defaultDestination}}" dependentSelector="{{AdminConfigureTaxSection.systemValueDefaultState}}" visible="false" /> + <checkOption stepKey="clickDefaultState" selector="{{AdminConfigureTaxSection.systemValueDefaultState}}"/> + <selectOption stepKey="selectDefaultState" selector="{{AdminConfigureTaxSection.dropdownDefaultState}}" userInput="California"/> + <fillField stepKey="fillDefaultPostCode" selector="{{AdminConfigureTaxSection.defaultPostCode}}" userInput=""/> + + <!-- change the options for shopping cart display to not show tax --> + <conditionalClick stepKey="clickShoppingCartDisplaySettings" selector="{{AdminConfigureTaxSection.shoppingCartDisplay}}" dependentSelector="{{AdminConfigureTaxSection.systemValueIncludeTaxTotalCart}}" visible="false"/> + <checkOption stepKey="clickTaxTotalCart" selector="{{AdminConfigureTaxSection.systemValueIncludeTaxTotalCart}}"/> + <selectOption stepKey="selectTaxTotalCart" selector="{{AdminConfigureTaxSection.dropdownIncludeTaxTotalCart}}" userInput="Yes"/> + <checkOption stepKey="clickDisplayTaxSummaryCart" selector="{{AdminConfigureTaxSection.systemValueDisplayTaxSummaryCart}}"/> + <selectOption stepKey="selectDisplayTaxSummaryCart" selector="{{AdminConfigureTaxSection.dropdownDisplayTaxSummaryCart}}" userInput="Yes"/> + <checkOption stepKey="clickDisplayZeroTaxCart" selector="{{AdminConfigureTaxSection.systemValueDisplayZeroTaxCart}}"/> + <selectOption stepKey="selectDisplayZeroTaxCart" selector="{{AdminConfigureTaxSection.dropdownDisplayZeroTaxCart}}" userInput="Yes"/> + + <!-- change the options for orders, invoices, credit memos display to not show tax --> + <conditionalClick stepKey="clickOrdersInvoicesCreditSales" selector="{{AdminConfigureTaxSection.ordersInvoicesCreditSales}}" dependentSelector="{{AdminConfigureTaxSection.systemValueIncludeTaxTotalSales}}" visible="false"/> + <checkOption stepKey="clickTaxTotalSales" selector="{{AdminConfigureTaxSection.systemValueIncludeTaxTotalSales}}"/> + <selectOption stepKey="selectTaxTotalSales" selector="{{AdminConfigureTaxSection.dropdownIncludeTaxTotalSales}}" userInput="Yes"/> + <checkOption stepKey="clickDisplayTaxSummarySales" selector="{{AdminConfigureTaxSection.systemValueDisplayTaxSummarySales}}"/> + <selectOption stepKey="selectDisplayTaxSummarySales" selector="{{AdminConfigureTaxSection.dropdownDisplayTaxSummarySales}}" userInput="Yes"/> + <checkOption stepKey="clickDisplayZeroTaxSales" selector="{{AdminConfigureTaxSection.systemValueDisplayZeroTaxSales}}"/> + <selectOption stepKey="selectDisplayZeroTaxSales" selector="{{AdminConfigureTaxSection.dropdownDisplayZeroTaxSales}}" userInput="Yes"/> + + <!-- Save the settings --> + <scrollToTopOfPage stepKey="scrollToTop"/> + <click stepKey="saveTaxOptions" selector="{{AdminCategoryMainActionsSection.SaveButton}}"/> + <see stepKey="seeSuccess" selector="{{AdminCategoryMessagesSection.SuccessMessage}}" userInput="You saved the configuration."/> + </actionGroup> + + <!-- Action group to add a tax rate when on a tax rule configuration page --> + <!-- Must already be on a tax rule configuration page or a new tax rule page --> + <actionGroup name="addNewTaxRateNoZip"> + <arguments> + <argument name="taxCode"/> + </arguments> + + <!-- Go to the tax rate page --> + <click stepKey="addNewTaxRate" selector="{{AdminTaxRulesSection.addNewTaxRate}}"/> + + <!-- Fill out a new tax rate --> + <fillField stepKey="fillTaxIdentifier" selector="{{AdminTaxRulesSection.taxIdentifier}}" userInput="{{taxCode.state}}-{{taxCode.rate}}"/> + <fillField stepKey="fillZipCode" selector="{{AdminTaxRulesSection.zipCode}}" userInput="{{taxCode.zip}}"/> + <selectOption stepKey="selectState" selector="{{AdminTaxRulesSection.state}}" userInput="{{taxCode.state}}"/> + <selectOption stepKey="selectCountry" selector="{{AdminTaxRulesSection.country}}" userInput="{{taxCode.country}}"/> + <fillField stepKey="fillRate" selector="{{AdminTaxRulesSection.rate}}" userInput="{{taxCode.rate}}"/> + + <!-- Save the tax rate --> + <click stepKey="saveTaxRate" selector="{{AdminTaxRulesSection.save}}"/> + </actionGroup> +</actionGroups> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Data/TaxCodeData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Data/TaxCodeData.xml new file mode 100644 index 0000000000000..ac603751ddc78 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Data/TaxCodeData.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<entities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="SimpleTaxNY" type="tax"> + <data key="state">New York</data> + <data key="country">United States</data> + <data key="zip">*</data> + <data key="rate">8.375</data> + </entity> + <entity name="SimpleTaxCA" type="tax"> + <data key="state">California</data> + <data key="country">United States</data> + <data key="zip">*</data> + <data key="rate">8.25</data> + </entity> + <entity name="SimpleTaxSwiss" type="tax"> + <data key="state">Aargau</data> + <data key="country">Switzerland</data> + <data key="zip">*</data> + <data key="rate">0</data> + </entity> +</entities> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminNewTaxRulePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminNewTaxRulePage.xml new file mode 100644 index 0000000000000..74a0347b33c7c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminNewTaxRulePage.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<pages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="AdminNewTaxRulePage" url="tax/rule/new/" module="Magento_Tax" area="admin"> + <section name="AdminTaxRulesSection"/> + </page> +</pages> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminTaxConfigurationPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminTaxConfigurationPage.xml new file mode 100644 index 0000000000000..b91344000ff50 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminTaxConfigurationPage.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<pages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="AdminTaxConfigurationPage" url="admin/system_config/edit/section/tax/" area="admin" module="Magento_Tax"> + <section name="AdminConfigureTaxSection"/> + </page> +</pages> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminTaxRateGridPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminTaxRateGridPage.xml new file mode 100644 index 0000000000000..a6624f6588d97 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminTaxRateGridPage.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<pages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="AdminTaxRateGridPage" url="tax/rate/" area="admin" module="Magento_Tax"> + <section name="AdminSecondaryGridSection"/> + </page> +</pages> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminTaxRuleGridPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminTaxRuleGridPage.xml new file mode 100644 index 0000000000000..e673da4a761f0 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Page/AdminTaxRuleGridPage.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<pages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="AdminTaxRuleGridPage" url="tax/rule" area="admin" module="Magento_Tax"> + <section name="AdminSecondaryGridSection"/> + <section name="AdminGridMainControls"/> + </page> +</pages> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Section/AdminConfigureTaxSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Section/AdminConfigureTaxSection.xml new file mode 100644 index 0000000000000..8ae17928d3bbd --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Section/AdminConfigureTaxSection.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminConfigureTaxSection"> + <!-- on page /admin/admin/system_config/edit/section/tax/ --> + <element name="taxClasses" type="block" selector="#tax_classes-head" timeout="30"/> + <element name="calculationSettings" type="block" selector="#tax_calculation-head:not(.open)" timeout="30"/> + + <element name="defaultDestination" type="block" selector="#tax_defaults-head" timeout="30"/> + <element name="systemValueDefaultState" type="checkbox" selector="#row_tax_defaults_region input[type='checkbox']"/> + <element name="dropdownDefaultState" type="select" selector="#row_tax_defaults_region select"/> + <element name="defaultPostCode" type="input" selector="#tax_defaults_postcode"/> + + <element name="priceDisplaySettings" type="block" selector="#tax_display-head:not(.open)" timeout="30"/> + + <element name="shoppingCartDisplay" type="block" selector="#tax_cart_display-head" timeout="30"/> + <element name="systemValueIncludeTaxTotalCart" type="checkbox" selector="#row_tax_cart_display_grandtotal input[type='checkbox']"/> + <element name="dropdownIncludeTaxTotalCart" type="checkbox" selector="#row_tax_cart_display_grandtotal select"/> + <element name="systemValueDisplayTaxSummaryCart" type="checkbox" selector="#row_tax_cart_display_full_summary input[type='checkbox']"/> + <element name="dropdownDisplayTaxSummaryCart" type="checkbox" selector="#row_tax_cart_display_full_summary select"/> + <element name="systemValueDisplayZeroTaxCart" type="checkbox" selector="#row_tax_cart_display_zero_tax input[type='checkbox']"/> + <element name="dropdownDisplayZeroTaxCart" type="checkbox" selector="#row_tax_cart_display_zero_tax select"/> + + <element name="ordersInvoicesCreditSales" type="block" selector="#tax_sales_display-head" timeout="30"/> + <element name="systemValueIncludeTaxTotalSales" type="checkbox" selector="#row_tax_sales_display_grandtotal input[type='checkbox']"/> + <element name="dropdownIncludeTaxTotalSales" type="checkbox" selector="#row_tax_sales_display_grandtotal select"/> + <element name="systemValueDisplayTaxSummarySales" type="checkbox" selector="#row_tax_sales_display_full_summary input[type='checkbox']"/> + <element name="dropdownDisplayTaxSummarySales" type="checkbox" selector="#row_tax_sales_display_full_summary select"/> + <element name="systemValueDisplayZeroTaxSales" type="checkbox" selector="#row_tax_sales_display_zero_tax input[type='checkbox']"/> + <element name="dropdownDisplayZeroTaxSales" type="checkbox" selector="#row_tax_sales_display_zero_tax select"/> + + <element name="priceDisplaySettings" type="block" selector="#tax_weee-head" timeout="30"/> + </section> +</sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Section/AdminTaxRulesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Section/AdminTaxRulesSection.xml new file mode 100644 index 0000000000000..df3a56a36bc4a --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Section/AdminTaxRulesSection.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminTaxRulesSection"> + <!-- on page /admin/tax/rule/new/ --> + <element name="ruleName" type="input" selector="#anchor-content #code"/> + <element name="addNewTaxRate" type="block" selector="//*[text()='Add New Tax Rate']" timeout="30"/> + <element name="taxIdentifier" type="input" selector="aside #code"/> + <element name="zipIsRange" type="checkbox" selector="#zip_is_range"/> + <element name="zipCode" type="input" selector="#tax_postcode"/> + <element name="state" type="select" selector="#tax_region_id"/> + <element name="country" type="select" selector="#tax_country_id"/> + <element name="rate" type="input" selector="#rate"/> + <element name="save" type="button" selector=".action-save" timeout="30"/> + </section> +</sections> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Test/StorefrontTaxQuoteCartTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Test/StorefrontTaxQuoteCartTest.xml new file mode 100644 index 0000000000000..2607775ce7f36 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Test/StorefrontTaxQuoteCartTest.xml @@ -0,0 +1,458 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <test name="StorefrontTaxQuoteCartLoggedInSimple"> + <annotations> + <features value="Tax"/> + <stories value="Tax Calculation in Shopping Cart"/> + <title value="Tax for Simple Product Quote should be recalculated in Shopping Cart for Logged in Customer with Default Address"/> + <description value="Tax for Simple Product Quote should be recalculated in Shopping Cart for Logged in Customer with Default Address"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-295"/> + <group value="Tax"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct1"/> + + <!-- Fill in rules to display tax in the cart --> + <actionGroup ref="editTaxConfigurationByUI" stepKey="fillDefaultTaxForms"/> + + <!-- Go to tax rule page --> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulePage"/> + <waitForPageLoad stepKey="waitForTaxRatePage"/> + <click stepKey="addNewTaxRate" selector="{{AdminGridMainControls.add}}"/> + <fillField stepKey="fillRuleName" selector="{{AdminTaxRulesSection.ruleName}}" userInput="SampleRule"/> + + <!-- Add NY and CA tax rules --> + <actionGroup ref="addNewTaxRateNoZip" stepKey="addNYTaxRate"> + <argument name="taxCode" value="SimpleTaxNY"/> + </actionGroup> + + <actionGroup ref="addNewTaxRateNoZip" stepKey="addCATaxRate"> + <argument name="taxCode" value="SimpleTaxCA"/> + </actionGroup> + + <click stepKey="clickSave" selector="{{AdminStoresMainActionsSection.saveButton}}"/> + + <!-- Fill out form for a new user with address --> + <actionGroup ref="SignUpNewUserFromStorefrontActionGroup" stepKey="SignUpNewUser"> + <argument name="Customer" value="Simple_US_Customer_NY"/> + </actionGroup> + + <actionGroup ref="EnterCustomerAddressInfo" stepKey="enterAddressInfo"> + <argument name="Address" value="US_Address_NY"/> + </actionGroup> + </before> + <after> + <!-- Go to the tax rule page and delete the row we created--> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulesPage"/> + <waitForPageLoad stepKey="waitForRulesPage"/> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteRule"> + <argument name="name" value="SampleRule"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Go to the tax rate page --> + <amOnPage url="{{AdminTaxRateGridPage.url}}" stepKey="goToTaxRatesPage"/> + <waitForPageLoad stepKey="waitForRatesPage"/> + + <!-- Delete the two tax rates that were created --> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteNYRate"> + <argument name="name" value="{{SimpleTaxNY.state}}-{{SimpleTaxNY.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteCARate"> + <argument name="name" value="{{SimpleTaxCA.state}}-{{SimpleTaxCA.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Ensure tax wont be shown in the cart --> + <actionGroup ref="changeToDefaultTaxConfigurationUI" stepKey="changeToDefaultTaxConfiguration"/> + + <amOnPage url="{{AdminLogoutPage.url}}" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="simpleProduct1" stepKey="deleteSimpleProduct1"/> + </after> + + <!-- Go to the created product page and add it to the cart --> + <amOnPage url="$$simpleProduct1.sku$$.html" stepKey="goToSimpleProductPage"/> + <waitForPageLoad stepKey="waitForSimpleProductPage"/> + <click stepKey="addSimpleProductToCart" selector="{{StorefrontProductActionSection.addToCart}}"/> + <waitForPageLoad stepKey="waitForProductAdded"/> + <see stepKey="seeSuccess" selector="{{AdminCategoryMessagesSection.SuccessMessage}}" userInput="You added"/> + + <!-- Assert that taxes are applied correctly for NY --> + <amOnPage url="{{CheckoutCartPage.url}}" stepKey="goToCheckout"/> + <waitForPageLoad stepKey="waitForCart"/> + + <waitForElementVisible stepKey="waitForOverviewVisible" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTax" selector="{{CheckoutPaymentSection.tax}}" userInput="$10.30"/> + <click stepKey="expandTax" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxNY.rate}}%)"/> + <see stepKey="seeTotalIncl" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$138.30"/> + <see stepKey="seeTotalExcl" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$128.00"/> + + <!-- Change the address --> + <actionGroup ref="changeSummaryQuoteAddress" stepKey="changeAddress"> + <argument name="taxCode" value="SimpleTaxSwiss"/> + </actionGroup> + + <!-- Assert that taxes are applied correctly for Switzerland --> + <see stepKey="seeTax2" selector="{{CheckoutPaymentSection.tax}}" userInput="$0.00"/> + <see stepKey="seeTotalIncl2" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$128.00"/> + <see stepKey="seeTotalExcl2" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$128.00"/> + + <!-- Change the address --> + <actionGroup ref="changeSummaryQuoteAddress" stepKey="changeAddress2"> + <argument name="taxCode" value="SimpleTaxCA"/> + </actionGroup> + + <!-- Assert that taxes are applied correctly for CA --> + <see stepKey="seeTax3" selector="{{CheckoutPaymentSection.tax}}" userInput="$10.15"/> + <click stepKey="expandTax2" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent2" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxCA.rate}}%)"/> + <see stepKey="seeTotalIncl3" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$138.15"/> + <see stepKey="seeTotalExcl3" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$128.00"/> + </test> + + + <test name="StorefrontTaxQuoteCartLoggedInVirtual"> + <annotations> + <features value="Tax"/> + <stories value="Tax Calculation in Shopping Cart"/> + <title value="Tax for Virtual Product Quote should be recalculated in Shopping Cart for Logged in Customer with Default Address"/> + <description value="Tax for Virtual Product Quote should be recalculated in Shopping Cart for Logged in Customer with Default Address"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-296"/> + <group value="Tax"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <createData entity="VirtualProduct" stepKey="virtualProduct1"/> + + <!-- Fill in rules to display tax in the cart --> + <actionGroup ref="editTaxConfigurationByUI" stepKey="fillDefaultTaxForms"/> + + <!-- Go to tax rule page --> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulePage"/> + <waitForPageLoad stepKey="waitForTaxRatePage"/> + <click stepKey="addNewTaxRate" selector="{{AdminGridMainControls.add}}"/> + <fillField stepKey="fillRuleName" selector="{{AdminTaxRulesSection.ruleName}}" userInput="SampleRule"/> + + <!-- Add NY and CA tax rules --> + <actionGroup ref="addNewTaxRateNoZip" stepKey="addNYTaxRate"> + <argument name="taxCode" value="SimpleTaxNY"/> + </actionGroup> + + <actionGroup ref="addNewTaxRateNoZip" stepKey="addCATaxRate"> + <argument name="taxCode" value="SimpleTaxCA"/> + </actionGroup> + + <click stepKey="clickSave" selector="{{AdminStoresMainActionsSection.saveButton}}"/> + + <!-- Fill out form for a new user with address --> + <actionGroup ref="SignUpNewUserFromStorefrontActionGroup" stepKey="SignUpNewUser"> + <argument name="Customer" value="Simple_US_Customer_NY"/> + </actionGroup> + + <actionGroup ref="EnterCustomerAddressInfo" stepKey="enterAddressInfo"> + <argument name="Address" value="US_Address_NY"/> + </actionGroup> + </before> + <after> + <!-- Go to the tax rule page and delete the row we created--> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulesPage"/> + <waitForPageLoad stepKey="waitForRulesPage"/> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteRule"> + <argument name="name" value="SampleRule"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Go to the tax rate page --> + <amOnPage url="{{AdminTaxRateGridPage.url}}" stepKey="goToTaxRatesPage"/> + <waitForPageLoad stepKey="waitForRatesPage"/> + + <!-- Delete the two tax rates that were created --> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteNYRate"> + <argument name="name" value="{{SimpleTaxNY.state}}-{{SimpleTaxNY.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteCARate"> + <argument name="name" value="{{SimpleTaxCA.state}}-{{SimpleTaxCA.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Ensure tax wont be shown in the cart --> + <actionGroup ref="changeToDefaultTaxConfigurationUI" stepKey="changeToDefaultTaxConfiguration"/> + + <amOnPage url="{{AdminLogoutPage.url}}" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="virtualProduct1" stepKey="deleteVirtualProduct1"/> + </after> + + <!-- Go to the created product page and add it to the cart --> + <amOnPage url="$$virtualProduct1.sku$$.html" stepKey="goToVirtualProductPage"/> + <waitForPageLoad stepKey="waitForVirtualProductPage"/> + <click stepKey="addVirtualProductToCart" selector="{{StorefrontProductActionSection.addToCart}}"/> + <waitForPageLoad stepKey="waitForProductAdded"/> + <see stepKey="seeSuccess" selector="{{AdminCategoryMessagesSection.SuccessMessage}}" userInput="You added"/> + + <!-- Assert that taxes are applied correctly for NY --> + <amOnPage url="{{CheckoutCartPage.url}}" stepKey="goToCheckout"/> + <waitForPageLoad stepKey="waitForCart"/> + + <waitForElementVisible stepKey="waitForOverviewVisible" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTax" selector="{{CheckoutPaymentSection.tax}}" userInput="$8.37"/> + <click stepKey="expandTax" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxNY.rate}}%)"/> + <see stepKey="seeTotalIncl" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$108.36"/> + <see stepKey="seeTotalExcl" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$$virtualProduct1.price$$"/> + + <!-- Change the address --> + <actionGroup ref="changeSummaryQuoteAddress" stepKey="changeAddress"> + <argument name="taxCode" value="SimpleTaxSwiss"/> + </actionGroup> + + <!-- Assert that taxes are applied correctly for Switzerland --> + <see stepKey="seeTax2" selector="{{CheckoutPaymentSection.tax}}" userInput="$0.00"/> + <see stepKey="seeTotalIncl2" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$$$virtualProduct1.price$$"/> + <see stepKey="seeTotalExcl2" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$$$virtualProduct1.price$$"/> + + <!-- Change the address --> + <actionGroup ref="changeSummaryQuoteAddress" stepKey="changeAddress2"> + <argument name="taxCode" value="SimpleTaxCA"/> + </actionGroup> + + <!-- Assert that taxes are applied correctly for CA --> + <see stepKey="seeTax3" selector="{{CheckoutPaymentSection.tax}}" userInput="$8.25"/> + <click stepKey="expandTax2" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent2" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxCA.rate}}%)"/> + <see stepKey="seeTotalIncl3" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$108.24"/> + <see stepKey="seeTotalExcl3" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$$virtualProduct1.price$$"/> + </test> + + <test name="StorefrontTaxQuoteCartGuestSimple"> + <annotations> + <features value="Tax"/> + <stories value="Tax Calculation in Shopping Cart"/> + <title value="Tax for Simple Product Quote should be recalculated in Shopping Cart for Guest Customer"/> + <description value="Tax for Simple Product Quote should be recalculated in Shopping Cart for Guest Customer#anch"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-297"/> + <group value="Tax"/> + <group value="skip"/> + <!-- skipped due to MAGETWO-90539 --> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct1"/> + + <!-- Fill in rules to display tax in the cart --> + <actionGroup ref="editTaxConfigurationByUI" stepKey="fillDefaultTaxForms"/> + + <!-- Go to tax rule page --> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulePage"/> + <waitForPageLoad stepKey="waitForTaxRatePage"/> + <click stepKey="addNewTaxRate" selector="{{AdminGridMainControls.add}}"/> + <fillField stepKey="fillRuleName" selector="{{AdminTaxRulesSection.ruleName}}" userInput="SampleRule"/> + + <!-- Add NY and CA tax rules --> + <actionGroup ref="addNewTaxRateNoZip" stepKey="addNYTaxRate"> + <argument name="taxCode" value="SimpleTaxNY"/> + </actionGroup> + + <actionGroup ref="addNewTaxRateNoZip" stepKey="addCATaxRate"> + <argument name="taxCode" value="SimpleTaxCA"/> + </actionGroup> + + <click stepKey="clickSave" selector="{{AdminStoresMainActionsSection.saveButton}}"/> + </before> + <after> + <!-- Go to the tax rule page and delete the row we created--> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulesPage"/> + <waitForPageLoad stepKey="waitForRulesPage"/> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteRule"> + <argument name="name" value="SampleRule"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Go to the tax rate page --> + <amOnPage url="{{AdminTaxRateGridPage.url}}" stepKey="goToTaxRatesPage"/> + <waitForPageLoad stepKey="waitForRatesPage"/> + + <!-- Delete the two tax rates that were created --> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteNYRate"> + <argument name="name" value="{{SimpleTaxNY.state}}-{{SimpleTaxNY.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteCARate"> + <argument name="name" value="{{SimpleTaxCA.state}}-{{SimpleTaxCA.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Ensure tax wont be shown in the cart --> + <actionGroup ref="changeToDefaultTaxConfigurationUI" stepKey="changeToDefaultTaxConfiguration"/> + + <amOnPage url="{{AdminLogoutPage.url}}" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="simpleProduct1" stepKey="deleteSimpleProduct1"/> + </after> + + <!-- Go to the created product page and add it to the cart --> + <amOnPage url="$$simpleProduct1.sku$$.html" stepKey="goToSimpleProductPage"/> + <waitForPageLoad stepKey="waitForSimpleProductPage"/> + <click stepKey="addSimpleProductToCart" selector="{{StorefrontProductActionSection.addToCart}}"/> + <waitForPageLoad stepKey="waitForProductAdded"/> + <see stepKey="seeSuccess" selector="{{AdminCategoryMessagesSection.SuccessMessage}}" userInput="You added"/> + + <!-- Assert that taxes are applied correctly for CA --> + <amOnPage url="{{CheckoutCartPage.url}}" stepKey="goToCheckout"/> + <waitForPageLoad stepKey="waitForCart"/> + + <waitForElementVisible stepKey="waitForOverviewVisible" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTax3" selector="{{CheckoutPaymentSection.tax}}" userInput="$10.15"/> + <click stepKey="expandTax2" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent2" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxCA.rate}}%)"/> + <see stepKey="seeTotalIncl3" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$138.15"/> + <see stepKey="seeTotalExcl3" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$128.00"/> + + <!-- Change the address --> + <actionGroup ref="changeSummaryQuoteAddress" stepKey="changeAddress"> + <argument name="taxCode" value="SimpleTaxSwiss"/> + </actionGroup> + + <!-- Assert that taxes are applied correctly for Switzerland --> + <see stepKey="seeTax2" selector="{{CheckoutPaymentSection.tax}}" userInput="$0.00"/> + <see stepKey="seeTotalIncl2" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$128.00"/> + <see stepKey="seeTotalExcl2" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$128.00"/> + + <!-- Change the address --> + <actionGroup ref="changeSummaryQuoteAddress" stepKey="changeAddress2"> + <argument name="taxCode" value="SimpleTaxNY"/> + </actionGroup> + + <!-- Assert that taxes are applied correctly for NY --> + <see stepKey="seeTax" selector="{{CheckoutPaymentSection.tax}}" userInput="$10.30"/> + <click stepKey="expandTax" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxNY.rate}}%)"/> + <see stepKey="seeTotalIncl" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$138.30"/> + <see stepKey="seeTotalExcl" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$128.00"/> + </test> + + <test name="StorefrontTaxQuoteCartGuestVirtual"> + <annotations> + <features value="Tax"/> + <stories value="Tax Calculation in Shopping Cart"/> + <title value="Tax for Virtual Product Quote should be recalculated in Shopping Cart for Guest Customer"/> + <description value="Tax for Virtual Product Quote should be recalculated in Shopping Cart for Guest Customer"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-298"/> + <group value="Tax"/> + <group value="skip"/> + <!-- Skipped due to MAGETWO-90539 --> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <createData entity="VirtualProduct" stepKey="virtualProduct1"/> + + <!-- Fill in rules to display tax in the cart --> + <actionGroup ref="editTaxConfigurationByUI" stepKey="fillDefaultTaxForms"/> + + <!-- Go to tax rule page --> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulePage"/> + <waitForPageLoad stepKey="waitForTaxRatePage"/> + <click stepKey="addNewTaxRate" selector="{{AdminGridMainControls.add}}"/> + <fillField stepKey="fillRuleName" selector="{{AdminTaxRulesSection.ruleName}}" userInput="SampleRule"/> + + <!-- Add NY and CA tax rules --> + <actionGroup ref="addNewTaxRateNoZip" stepKey="addNYTaxRate"> + <argument name="taxCode" value="SimpleTaxNY"/> + </actionGroup> + + <actionGroup ref="addNewTaxRateNoZip" stepKey="addCATaxRate"> + <argument name="taxCode" value="SimpleTaxCA"/> + </actionGroup> + + <click stepKey="clickSave" selector="{{AdminStoresMainActionsSection.saveButton}}"/> + </before> + <after> + <!-- Go to the tax rule page and delete the row we created--> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulesPage"/> + <waitForPageLoad stepKey="waitForRulesPage"/> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteRule"> + <argument name="name" value="SampleRule"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Go to the tax rate page --> + <amOnPage url="{{AdminTaxRateGridPage.url}}" stepKey="goToTaxRatesPage"/> + <waitForPageLoad stepKey="waitForRatesPage"/> + + <!-- Delete the two tax rates that were created --> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteNYRate"> + <argument name="name" value="{{SimpleTaxNY.state}}-{{SimpleTaxNY.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteCARate"> + <argument name="name" value="{{SimpleTaxCA.state}}-{{SimpleTaxCA.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Ensure tax wont be shown in the cart --> + <actionGroup ref="changeToDefaultTaxConfigurationUI" stepKey="changeToDefaultTaxConfiguration"/> + + <amOnPage url="{{AdminLogoutPage.url}}" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="virtualProduct1" stepKey="deleteVirtualProduct1"/> + </after> + + <!-- Go to the created product page and add it to the cart --> + <amOnPage url="$$virtualProduct1.sku$$.html" stepKey="goToVirtualProductPage"/> + <waitForPageLoad stepKey="waitForVirtualProductPage"/> + <click stepKey="addVirtualProductToCart" selector="{{StorefrontProductActionSection.addToCart}}"/> + <waitForPageLoad stepKey="waitForProductAdded"/> + <see stepKey="seeSuccess" selector="{{AdminCategoryMessagesSection.SuccessMessage}}" userInput="You added"/> + + <!-- Assert that taxes are applied correctly for NY --> + <amOnPage url="{{CheckoutCartPage.url}}" stepKey="goToCheckout"/> + <waitForPageLoad stepKey="waitForCart"/> + + <!-- Assert that taxes are applied correctly for CA --> + <waitForElementVisible stepKey="waitForOverviewVisible" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTax3" selector="{{CheckoutPaymentSection.tax}}" userInput="$8.25"/> + <click stepKey="expandTax2" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent2" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxCA.rate}}%)"/> + <see stepKey="seeTotalIncl3" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$108.24"/> + <see stepKey="seeTotalExcl3" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$$virtualProduct1.price$$"/> + + <!-- Change the address --> + <actionGroup ref="changeSummaryQuoteAddress" stepKey="changeAddress"> + <argument name="taxCode" value="SimpleTaxSwiss"/> + </actionGroup> + + <!-- Assert that taxes are applied correctly for Switzerland --> + <see stepKey="seeTax2" selector="{{CheckoutPaymentSection.tax}}" userInput="$0.00"/> + <see stepKey="seeTotalIncl2" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$$$virtualProduct1.price$$"/> + <see stepKey="seeTotalExcl2" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$$$virtualProduct1.price$$"/> + + <!-- Change the address --> + <actionGroup ref="changeSummaryQuoteAddress" stepKey="changeAddress2"> + <argument name="taxCode" value="SimpleTaxNY"/> + </actionGroup> + + <!-- Assert that taxes are applied correctly for NY --> + <see stepKey="seeTax" selector="{{CheckoutPaymentSection.tax}}" userInput="$8.37"/> + <click stepKey="expandTax" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxNY.rate}}%)"/> + <see stepKey="seeTotalIncl" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$108.36"/> + <see stepKey="seeTotalExcl" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$$virtualProduct1.price$$"/> + </test> +</tests> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Test/StorefrontTaxQuoteCheckoutTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Test/StorefrontTaxQuoteCheckoutTest.xml new file mode 100644 index 0000000000000..6b60201a00709 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/Test/StorefrontTaxQuoteCheckoutTest.xml @@ -0,0 +1,458 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <test name="StorefrontTaxQuoteCheckoutGuestVirtual"> + <annotations> + <features value="Tax"/> + <stories value="Tax Calculation in One Page Checkout"/> + <title value="Tax for Virtual Product Quote should be recalculated according to inputted data on Checkout flow for Guest Customer"/> + <description value="Tax for Virtual Product Quote should be recalculated according to inputted data on Checkout flow for Guest Customer"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-255"/> + <group value="Tax"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <createData entity="VirtualProduct" stepKey="virtualProduct1"/> + + <!-- Fill in rules to display tax in the cart --> + <actionGroup ref="editTaxConfigurationByUI" stepKey="fillDefaultTaxForms"/> + + <!-- Go to tax rule page --> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulePage"/> + <waitForPageLoad stepKey="waitForTaxRatePage"/> + <click stepKey="addNewTaxRate" selector="{{AdminGridMainControls.add}}"/> + <fillField stepKey="fillRuleName" selector="{{AdminTaxRulesSection.ruleName}}" userInput="SampleRule"/> + + <!-- Add NY and CA tax rules --> + <actionGroup ref="addNewTaxRateNoZip" stepKey="addNYTaxRate"> + <argument name="taxCode" value="SimpleTaxNY"/> + </actionGroup> + + <actionGroup ref="addNewTaxRateNoZip" stepKey="addCATaxRate"> + <argument name="taxCode" value="SimpleTaxCA"/> + </actionGroup> + + <click stepKey="clickSave" selector="{{AdminStoresMainActionsSection.saveButton}}"/> + </before> + <after> + <!-- Go to the tax rule page and delete the row we created--> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulesPage"/> + <waitForPageLoad stepKey="waitForRulesPage"/> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteRule"> + <argument name="name" value="SampleRule"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Go to the tax rate page --> + <amOnPage url="{{AdminTaxRateGridPage.url}}" stepKey="goToTaxRatesPage"/> + <waitForPageLoad stepKey="waitForRatesPage"/> + + <!-- Delete the two tax rates that were created --> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteNYRate"> + <argument name="name" value="{{SimpleTaxNY.state}}-{{SimpleTaxNY.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteCARate"> + <argument name="name" value="{{SimpleTaxCA.state}}-{{SimpleTaxCA.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Ensure tax wont be shown in the cart --> + <actionGroup ref="changeToDefaultTaxConfigurationUI" stepKey="changeToDefaultTaxConfiguration"/> + + <amOnPage url="{{AdminLogoutPage.url}}" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="virtualProduct1" stepKey="deleteVirtualProduct1"/> + </after> + + <!-- Go to the created product page and add it to the cart --> + <amOnPage url="$$virtualProduct1.sku$$.html" stepKey="goToVirtualProductPage"/> + <waitForPageLoad stepKey="waitForVirtualProductPage"/> + <click stepKey="addVirtualProductToCart" selector="{{StorefrontProductActionSection.addToCart}}"/> + <waitForPageLoad stepKey="waitForProductAdded"/> + <see stepKey="seeSuccess" selector="{{AdminCategoryMessagesSection.SuccessMessage}}" userInput="You added"/> + + <!-- Assert that taxes are applied correctly for CA --> + <amOnPage url="{{CheckoutPage.url}}" stepKey="goToCheckout"/> + <waitForPageLoad stepKey="waitForShippingSection"/> + + <waitForElementVisible stepKey="waitForOverviewVisible" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTax2" selector="{{CheckoutPaymentSection.tax}}" userInput="$8.25"/> + <click stepKey="expandTax2" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent2" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxCA.rate}}%)"/> + <see stepKey="seeTotalIncl2" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$108.24"/> + <see stepKey="seeTotalExcl2" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$$virtualProduct1.price$$"/> + + <!-- Change the address --> + <actionGroup ref="GuestCheckoutFillNewBillingAddressActionGroup" stepKey="changeAddress"> + <argument name="customerVar" value="Simple_US_Customer_NY"/> + <argument name="customerAddressVar" value="US_Address_NY"/> + </actionGroup> + <click stepKey="saveAddress" selector="{{CheckoutShippingSection.updateAddress}}"/> + + <waitForPageLoad stepKey="waitForAddressSaved"/> + <see stepKey="seeEditButton" selector="{{CheckoutShippingSection.editAddressButton}}" userInput="Edit"/> + <see stepKey="seeAddress2" selector="{{CheckoutShippingSection.defaultShipping}}" userInput="{{SimpleTaxNY.state}}"/> + + <!-- Assert that taxes are applied correctly for NY --> + <waitForElementVisible stepKey="waitForOverviewVisible2" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTax" selector="{{CheckoutPaymentSection.tax}}" userInput="$8.37"/> + <click stepKey="expandTax" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxNY.rate}}%)"/> + <see stepKey="seeTotalIncl" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$108.36"/> + <see stepKey="seeTotalExcl" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$$virtualProduct1.price$$"/> + </test> + + <test name="StorefrontTaxQuoteCheckoutLoggedInSimple"> + <annotations> + <features value="Tax"/> + <stories value="Tax Calculation in One Page Checkout"/> + <title value="Tax for Simple Product Quote should be recalculated according to inputted data on Checkout flow for Logged in Customer"/> + <description value="Tax for Simple Product Quote should be recalculated according to inputted data on Checkout flow for Logged in Customer"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-256"/> + <group value="Tax"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct1"/> + + <!-- Fill in rules to display tax in the cart --> + <actionGroup ref="editTaxConfigurationByUI" stepKey="fillDefaultTaxForms"/> + + <!-- Go to tax rule page --> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulePage"/> + <waitForPageLoad stepKey="waitForTaxRatePage"/> + <click stepKey="addNewTaxRate" selector="{{AdminGridMainControls.add}}"/> + <fillField stepKey="fillRuleName" selector="{{AdminTaxRulesSection.ruleName}}" userInput="SampleRule"/> + + <!-- Add NY and CA tax rules --> + <actionGroup ref="addNewTaxRateNoZip" stepKey="addNYTaxRate"> + <argument name="taxCode" value="SimpleTaxNY"/> + </actionGroup> + + <actionGroup ref="addNewTaxRateNoZip" stepKey="addCATaxRate"> + <argument name="taxCode" value="SimpleTaxCA"/> + </actionGroup> + + <click stepKey="clickSave" selector="{{AdminStoresMainActionsSection.saveButton}}"/> + + <!-- Fill out form for a new user with address --> + <actionGroup ref="SignUpNewUserFromStorefrontActionGroup" stepKey="SignUpNewUser"> + <argument name="Customer" value="Simple_US_Customer_NY"/> + </actionGroup> + + <actionGroup ref="EnterCustomerAddressInfo" stepKey="enterAddressInfo"> + <argument name="Address" value="US_Address_NY"/> + </actionGroup> + </before> + <after> + <!-- Go to the tax rule page and delete the row we created--> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulesPage"/> + <waitForPageLoad stepKey="waitForRulesPage"/> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteRule"> + <argument name="name" value="SampleRule"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Go to the tax rate page --> + <amOnPage url="{{AdminTaxRateGridPage.url}}" stepKey="goToTaxRatesPage"/> + <waitForPageLoad stepKey="waitForRatesPage"/> + + <!-- Delete the two tax rates that were created --> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteNYRate"> + <argument name="name" value="{{SimpleTaxNY.state}}-{{SimpleTaxNY.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteCARate"> + <argument name="name" value="{{SimpleTaxCA.state}}-{{SimpleTaxCA.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Ensure tax wont be shown in the cart --> + <actionGroup ref="changeToDefaultTaxConfigurationUI" stepKey="changeToDefaultTaxConfiguration"/> + + <amOnPage url="{{AdminLogoutPage.url}}" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="simpleProduct1" stepKey="deleteSimpleProduct1"/> + </after> + + <!-- Go to the created product page and add it to the cart --> + <amOnPage url="$$simpleProduct1.sku$$.html" stepKey="goToSimpleProductPage"/> + <waitForPageLoad stepKey="waitForSimpleProductPage"/> + <click stepKey="addSimpleProductToCart" selector="{{StorefrontProductActionSection.addToCart}}"/> + <waitForPageLoad stepKey="waitForProductAdded"/> + <see stepKey="seeSuccess" selector="{{AdminCategoryMessagesSection.SuccessMessage}}" userInput="You added"/> + + <!-- Assert that taxes are applied correctly for NY --> + <amOnPage url="{{CheckoutPage.url}}" stepKey="goToCheckout"/> + <waitForPageLoad stepKey="waitForShippingSection"/> + <see stepKey="seeAddress" selector="{{CheckoutShippingSection.selectedShippingAddress}}" userInput="{{SimpleTaxNY.state}}"/> + <click stepKey="clickNext" selector="{{CheckoutShippingSection.next}}"/> + <waitForPageLoad stepKey="waitForReviewAndPayments"/> + + <waitForElementVisible stepKey="waitForOverviewVisible" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTax" selector="{{CheckoutPaymentSection.tax}}" userInput="$10.30"/> + <click stepKey="expandTax" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxNY.rate}}%)"/> + <see stepKey="seeTotalIncl" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$138.30"/> + <see stepKey="seeTotalExcl" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$128.00"/> + + <!-- Go back to the shipping page and change the address --> + <click stepKey="goBackToShipping" selector="{{CheckoutShippingSection.shippingTab}}"/> + <click stepKey="addNewAddress" selector="{{CheckoutShippingSection.newAddressButton}}"/> + <waitForPageLoad stepKey="waitForAddressPopUp"/> + + <actionGroup ref="LoggedInCheckoutFillNewBillingAddressActionGroup" stepKey="changeAddress"> + <argument name="Address" value="US_Address_CA"/> + <argument name="classPrefix" value="._show"/> + </actionGroup> + <click stepKey="saveAddress" selector="{{CheckoutShippingSection.saveAddress}}"/> + + <waitForPageLoad stepKey="waitForAddressSaved"/> + <see stepKey="seeAddress2" selector="{{CheckoutShippingSection.selectedShippingAddress}}" userInput="{{SimpleTaxCA.state}}"/> + <click stepKey="clickNext2" selector="{{CheckoutShippingSection.next}}"/> + <waitForPageLoad stepKey="waitForReviewAndPayments2"/> + + <!-- Assert that taxes are applied correctly for CA --> + <waitForElementVisible stepKey="waitForOverviewVisible2" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTax2" selector="{{CheckoutPaymentSection.tax}}" userInput="$10.15"/> + <click stepKey="expandTax2" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent2" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxCA.rate}}%)"/> + <see stepKey="seeTotalIncl2" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$138.15"/> + <see stepKey="seeTotalExcl2" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$128.00"/> + </test> + + <test name="StorefrontTaxQuoteCheckoutGuestSimple"> + <annotations> + <features value="Tax"/> + <stories value="Tax Calculation in One Page Checkout"/> + <title value="Tax for Simple Product Quote should be recalculated according to inputted data on Checkout flow for Guest Customer"/> + <description value="Tax for Simple Product Quote should be recalculated according to inputted data on Checkout flow for Guest Customer"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-258"/> + <group value="Tax"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <createData entity="SimpleProduct2" stepKey="simpleProduct1"/> + + <!-- Fill in rules to display tax in the cart --> + <actionGroup ref="editTaxConfigurationByUI" stepKey="fillDefaultTaxForms"/> + + <!-- Go to tax rule page --> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulePage"/> + <waitForPageLoad stepKey="waitForTaxRatePage"/> + <click stepKey="addNewTaxRate" selector="{{AdminGridMainControls.add}}"/> + <fillField stepKey="fillRuleName" selector="{{AdminTaxRulesSection.ruleName}}" userInput="SampleRule"/> + + <!-- Add NY and CA tax rules --> + <actionGroup ref="addNewTaxRateNoZip" stepKey="addNYTaxRate"> + <argument name="taxCode" value="SimpleTaxNY"/> + </actionGroup> + + <actionGroup ref="addNewTaxRateNoZip" stepKey="addCATaxRate"> + <argument name="taxCode" value="SimpleTaxCA"/> + </actionGroup> + + <click stepKey="clickSave" selector="{{AdminStoresMainActionsSection.saveButton}}"/> + </before> + <after> + <!-- Go to the tax rule page and delete the row we created--> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulesPage"/> + <waitForPageLoad stepKey="waitForRulesPage"/> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteRule"> + <argument name="name" value="SampleRule"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Go to the tax rate page --> + <amOnPage url="{{AdminTaxRateGridPage.url}}" stepKey="goToTaxRatesPage"/> + <waitForPageLoad stepKey="waitForRatesPage"/> + + <!-- Delete the two tax rates that were created --> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteNYRate"> + <argument name="name" value="{{SimpleTaxNY.state}}-{{SimpleTaxNY.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteCARate"> + <argument name="name" value="{{SimpleTaxCA.state}}-{{SimpleTaxCA.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Ensure tax wont be shown in the cart --> + <actionGroup ref="changeToDefaultTaxConfigurationUI" stepKey="changeToDefaultTaxConfiguration"/> + + <amOnPage url="{{AdminLogoutPage.url}}" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="simpleProduct1" stepKey="deleteSimpleProduct1"/> + </after> + + <!-- Go to the created product page and add it to the cart --> + <amOnPage url="$$simpleProduct1.sku$$.html" stepKey="goToSimpleProductPage"/> + <waitForPageLoad stepKey="waitForSimpleProductPage"/> + <click stepKey="addSimpleProductToCart" selector="{{StorefrontProductActionSection.addToCart}}"/> + <waitForPageLoad stepKey="waitForProductAdded"/> + <see stepKey="seeSuccess" selector="{{AdminCategoryMessagesSection.SuccessMessage}}" userInput="You added"/> + + <!-- Fill in address for CA --> + <amOnPage url="{{CheckoutPage.url}}" stepKey="goToCheckout"/> + <waitForPageLoad stepKey="waitForShippingSection"/> + <fillField selector="{{CheckoutShippingSection.email}}" userInput="{{Simple_US_Customer_CA.email}}" stepKey="enterEmail"/> + <waitForLoadingMaskToDisappear stepKey="waitEmailLoad" /> + <actionGroup ref="LoggedInCheckoutFillNewBillingAddressActionGroup" stepKey="changeAddress"> + <argument name="Address" value="US_Address_CA"/> + </actionGroup> + <click stepKey="clickNext" selector="{{CheckoutShippingSection.next}}"/> + <see stepKey="seeAddress" selector="{{CheckoutShippingSection.defaultShipping}}" userInput="{{SimpleTaxCA.state}}"/> + <see stepKey="seeShipTo" selector="{{CheckoutPaymentSection.shipToInfomation}}" userInput="{{SimpleTaxCA.state}}"/> + + <!-- Assert that taxes are applied correctly for CA --> + <waitForElementVisible stepKey="waitForOverviewVisible" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTax2" selector="{{CheckoutPaymentSection.tax}}" userInput="$10.15"/> + <click stepKey="expandTax2" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent2" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxCA.rate}}%)"/> + <see stepKey="seeTotalIncl2" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$138.15"/> + <see stepKey="seeTotalExcl2" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$128.00"/> + + <!-- Go back to the shipping page and change the address --> + <click stepKey="goBackToShipping" selector="{{CheckoutShippingSection.shippingTab}}"/> + <actionGroup ref="LoggedInCheckoutFillNewBillingAddressActionGroup" stepKey="changeAddress2"> + <argument name="Address" value="US_Address_NY"/> + </actionGroup> + <click stepKey="clickNext2" selector="{{CheckoutShippingSection.next}}"/> + <see stepKey="seeShipTo2" selector="{{CheckoutPaymentSection.shipToInfomation}}" userInput="{{SimpleTaxNY.state}}"/> + + <!-- Assert that taxes are applied correctly for NY --> + <waitForElementVisible stepKey="waitForOverviewVisible2" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTax" selector="{{CheckoutPaymentSection.tax}}" userInput="$10.30"/> + <click stepKey="expandTax" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxNY.rate}}%)"/> + <see stepKey="seeTotalIncl" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$138.30"/> + <see stepKey="seeTotalExcl" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$128.00"/> + </test> + + <test name="StorefrontTaxQuoteCheckoutLoggedInVirtual"> + <annotations> + <features value="Tax"/> + <stories value="Tax Calculation in One Page Checkout"/> + <title value="Tax for Virtual Product Quote should be recalculated according to inputted data on Checkout flow for Logged in Customer"/> + <description value="Tax for Virtual Product Quote should be recalculated according to inputted data on Checkout flow for Logged in Customer"/> + <severity value="CRITICAL"/> + <testCaseId value="MC-259"/> + <group value="Tax"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <createData entity="VirtualProduct" stepKey="virtualProduct1"/> + + <!-- Fill in rules to display tax in the cart --> + <actionGroup ref="editTaxConfigurationByUI" stepKey="fillDefaultTaxForms"/> + + <!-- Go to tax rule page --> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulePage"/> + <waitForPageLoad stepKey="waitForTaxRatePage"/> + <click stepKey="addNewTaxRate" selector="{{AdminGridMainControls.add}}"/> + <fillField stepKey="fillRuleName" selector="{{AdminTaxRulesSection.ruleName}}" userInput="SampleRule"/> + + <!-- Add NY and CA tax rules --> + <actionGroup ref="addNewTaxRateNoZip" stepKey="addNYTaxRate"> + <argument name="taxCode" value="SimpleTaxNY"/> + </actionGroup> + + <actionGroup ref="addNewTaxRateNoZip" stepKey="addCATaxRate"> + <argument name="taxCode" value="SimpleTaxCA"/> + </actionGroup> + + <click stepKey="clickSave" selector="{{AdminStoresMainActionsSection.saveButton}}"/> + + <!-- Fill out form for a new user with address --> + <actionGroup ref="SignUpNewUserFromStorefrontActionGroup" stepKey="SignUpNewUser"> + <argument name="Customer" value="Simple_US_Customer_NY"/> + </actionGroup> + + <actionGroup ref="EnterCustomerAddressInfo" stepKey="enterAddressInfo"> + <argument name="Address" value="US_Address_NY"/> + </actionGroup> + </before> + <after> + <!-- Go to the tax rule page and delete the row we created--> + <amOnPage url="{{AdminTaxRuleGridPage.url}}" stepKey="goToTaxRulesPage"/> + <waitForPageLoad stepKey="waitForRulesPage"/> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteRule"> + <argument name="name" value="SampleRule"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Go to the tax rate page --> + <amOnPage url="{{AdminTaxRateGridPage.url}}" stepKey="goToTaxRatesPage"/> + <waitForPageLoad stepKey="waitForRatesPage"/> + + <!-- Delete the two tax rates that were created --> + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteNYRate"> + <argument name="name" value="{{SimpleTaxNY.state}}-{{SimpleTaxNY.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <actionGroup ref="deleteEntitySecondaryGrid" stepKey="deleteCARate"> + <argument name="name" value="{{SimpleTaxCA.state}}-{{SimpleTaxCA.rate}}"/> + <argument name="searchInput" value="{{AdminSecondaryGridSection.taxIdentifierSearch}}"/> + </actionGroup> + + <!-- Ensure tax wont be shown in the cart --> + <actionGroup ref="changeToDefaultTaxConfigurationUI" stepKey="changeToDefaultTaxConfiguration"/> + + <amOnPage url="{{AdminLogoutPage.url}}" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="virtualProduct1" stepKey="deleteVirtualProduct1"/> + </after> + + <!-- Go to the created product page and add it to the cart --> + <amOnPage url="$$virtualProduct1.sku$$.html" stepKey="goToVirtualProductPage"/> + <waitForPageLoad stepKey="waitForVirtualProductPage"/> + <click stepKey="addVirtualProductToCart" selector="{{StorefrontProductActionSection.addToCart}}"/> + <waitForPageLoad stepKey="waitForProductAdded"/> + <see stepKey="seeSuccess" selector="{{AdminCategoryMessagesSection.SuccessMessage}}" userInput="You added"/> + + <!-- Assert that taxes are applied correctly for NY --> + <amOnPage url="{{CheckoutPage.url}}" stepKey="goToCheckout"/> + <waitForPageLoad stepKey="waitForShippingSection"/> + <see stepKey="seeAddress" selector="{{CheckoutShippingSection.defaultShipping}}" userInput="{{SimpleTaxNY.state}}"/> + + <waitForElementVisible stepKey="waitForOverviewVisible" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTax" selector="{{CheckoutPaymentSection.tax}}" userInput="$8.37"/> + <click stepKey="expandTax" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxNY.rate}}%)"/> + <see stepKey="seeTotalIncl" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$108.36"/> + <see stepKey="seeTotalExcl" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$$virtualProduct1.price$$"/> + + <!-- Change the address --> + <click stepKey="editAddress" selector="{{CheckoutShippingSection.editAddressButton}}"/> + <selectOption stepKey="addNewAddress" selector="{{CheckoutShippingSection.addressDropdown}}" userInput="New Address"/> + <waitForPageLoad stepKey="waitForNewAddressForm"/> + + <actionGroup ref="LoggedInCheckoutFillNewBillingAddressActionGroup" stepKey="changeAddress"> + <argument name="Address" value="US_Address_CA"/> + <argument name="classPrefix" value="[aria-hidden=false]"/> + </actionGroup> + <click stepKey="saveAddress" selector="{{CheckoutShippingSection.updateAddress}}"/> + + <waitForPageLoad stepKey="waitForAddressSaved"/> + <see stepKey="seeAddress2" selector="{{CheckoutShippingSection.defaultShipping}}" userInput="{{SimpleTaxCA.state}}"/> + + <!-- Assert that taxes are applied correctly for CA --> + <waitForElementVisible stepKey="waitForOverviewVisible2" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTax2" selector="{{CheckoutPaymentSection.tax}}" userInput="$8.25"/> + <click stepKey="expandTax2" selector="{{CheckoutPaymentSection.tax}}"/> + <see stepKey="seeTaxPercent2" selector="{{CheckoutPaymentSection.taxPercentage}}" userInput="({{SimpleTaxCA.rate}}%)"/> + <see stepKey="seeTotalIncl2" selector="{{CheckoutPaymentSection.orderSummaryTotalIncluding}}" userInput="$108.24"/> + <see stepKey="seeTotalExcl2" selector="{{CheckoutPaymentSection.orderSummaryTotalExcluding}}" userInput="$$virtualProduct1.price$$"/> + </test> +</tests> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json index fb47e3fbeba58..9a39b2518fe43 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json @@ -12,18 +12,18 @@ }, "require": { "magento/magento2-functional-testing-framework": "1.0.0", - "php": "~7.1.3||~7.2.0" - }, - "suggest": { "magento/magento2-functional-test-module-backend": "100.0.0-dev", "magento/magento2-functional-test-module-catalog": "100.0.0-dev", "magento/magento2-functional-test-module-checkout": "100.0.0-dev", "magento/magento2-functional-test-module-config": "100.0.0-dev", "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { "magento/magento2-functional-test-module-directory": "100.0.0-dev", "magento/magento2-functional-test-module-eav": "100.0.0-dev", "magento/magento2-functional-test-module-page-cache": "100.0.0-dev", - "magento/magento2-functional-test-module-quote": "100.0.0-dev", "magento/magento2-functional-test-module-reports": "100.0.0-dev", "magento/magento2-functional-test-module-sales": "100.0.0-dev", "magento/magento2-functional-test-module-shipping": "100.0.0-dev", From 536a796eb2ee09c23b39dd2d4b3a4d97770d9b6f Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Tue, 26 Jun 2018 15:31:34 -0500 Subject: [PATCH 33/33] MC-191: Admin should be able to remove Product Images assigned as Base, Small and Thumbnail from Simple Product - Make image size selectors more robust and not dependent on nth index --- .../Section/AdminProductImagesSection.xml | 16 ++++++++-------- .../Test/AdminSimpleProductImagesTest.xml | 2 -- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductImagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductImagesSection.xml index e609ede16344f..2133781df0575 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductImagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductImagesSection.xml @@ -22,14 +22,14 @@ <element name="altText" type="textarea" selector="textarea[data-role='image-description']"/> - <element name="roleBase" type="button" selector="div.field-image-role ul li:nth-of-type(1) label"/> - <element name="roleSmall" type="button" selector="div.field-image-role ul li:nth-of-type(2) label"/> - <element name="roleThumbnail" type="button" selector="div.field-image-role ul li:nth-of-type(3) label"/> - <element name="roleSwatch" type="button" selector="div.field-image-role ul li:nth-of-type(4) label"/> + <element name="roleBase" type="button" selector="//div[contains(@class, 'field-image-role')]//ul/li/label[normalize-space(.) = 'Base']"/> + <element name="roleSmall" type="button" selector="//div[contains(@class, 'field-image-role')]//ul/li/label[normalize-space(.) = 'Small']"/> + <element name="roleThumbnail" type="button" selector="//div[contains(@class, 'field-image-role')]//ul/li/label[normalize-space(.) = 'Thumbnail']"/> + <element name="roleSwatch" type="button" selector="//div[contains(@class, 'field-image-role')]//ul/li/label[normalize-space(.) = 'Swatch']"/> - <element name="isBaseSelected" type="button" selector="div.field-image-role ul li.selected:nth-of-type(1)"/> - <element name="isSmallSelected" type="button" selector="div.field-image-role ul li.selected:nth-of-type(2)"/> - <element name="isThumbnailSelected" type="button" selector="div.field-image-role ul li.selected:nth-of-type(3)"/> - <element name="isSwatchSelected" type="button" selector="div.field-image-role ul li.selected:nth-of-type(4)"/> + <element name="isBaseSelected" type="button" selector="//div[contains(@class, 'field-image-role')]//ul/li[contains(@class, 'selected')]/label[normalize-space(.) = 'Base']"/> + <element name="isSmallSelected" type="button" selector="//div[contains(@class, 'field-image-role')]//ul/li[contains(@class, 'selected')]/label[normalize-space(.) = 'Small']"/> + <element name="isThumbnailSelected" type="button" selector="//div[contains(@class, 'field-image-role')]//ul/li[contains(@class, 'selected')]/label[normalize-space(.) = 'Thumbnail']"/> + <element name="isSwatchSelected" type="button" selector="//div[contains(@class, 'field-image-role')]//ul/li[contains(@class, 'selected')]/label[normalize-space(.) = 'Swatch']"/> </section> </sections> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml index 78dfd419682a4..d0d5ba4a6f7ba 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Test/AdminSimpleProductImagesTest.xml @@ -172,8 +172,6 @@ <description value="Admin should be able to remove Product Images assigned as Base, Small and Thumbnail from Simple Product"/> <severity value="CRITICAL"/> <testCaseId value="MC-191"/> - <!-- skipped due to MAGETWO-92996 --> - <group value="skip"/> <group value="Catalog"/> </annotations>