<?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="urn:magento:mftf:Test/etc/testSchema.xsd">
    <test name="AdminCreateConfigurableProductWithTwoOptionsAssignedToCategoryTest">
        <annotations>
            <features value="ConfigurableProduct"/>
            <stories value="Create configurable product"/>
            <title value="Create configurable product with two new options assigned to category with not visible child products"/>
            <description value="Admin should be able to create configurable product with two new options, assigned to category, child products are not visible individually"/>
            <testCaseId value="MC-13685"/>
            <severity value="CRITICAL"/>
            <group value="mtf_migrated"/>
        </annotations>
        <before>
            <!-- Create category -->
            <createData entity="SimpleSubCategory" stepKey="createCategory"/>

            <!-- Login as admin -->
            <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/>
        </before>
        <after>
            <!-- Delete configurable product -->
            <actionGroup ref="DeleteProductUsingProductGridActionGroup" stepKey="deleteProduct">
                <argument name="product" value="ApiConfigurableProduct"/>
            </actionGroup>

            <!-- Delete children products -->
            <actionGroup ref="DeleteProductBySkuActionGroup" stepKey="deleteFirstChildProduct">
                <argument name="sku" value="{{colorConfigurableProductAttribute1.sku}}"/>
            </actionGroup>
            <actionGroup ref="DeleteProductBySkuActionGroup" stepKey="deleteSecondChildProduct">
                <argument name="sku" value="{{colorConfigurableProductAttribute2.sku}}"/>
            </actionGroup>
            <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearFilters"/>

            <!-- Delete product attribute -->
            <actionGroup ref="AdminDeleteProductAttributeByLabelActionGroup" stepKey="deleteProductAttribute">
                <argument name="productAttributeLabel" value="{{colorProductAttribute.default_label}}"/>
            </actionGroup>
            <comment userInput="BIC workaround" stepKey="reindex"/>

            <!-- Delete attribute set & reindex -->
            <actionGroup ref="DeleteAttributeSetByLabelActionGroup" stepKey="deleteAttributeSet">
                <argument name="label" value="{{ProductAttributeFrontendLabel.label}}"/>
            </actionGroup>
            <actionGroup ref="CliIndexerReindexActionGroup" stepKey="reindex2">
                <argument name="indices" value=""/>
            </actionGroup>

            <!-- Delete category -->
            <deleteData createDataKey="createCategory" stepKey="deleteCategory"/>

            <!-- Log out -->
            <actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/>
        </after>

        <!-- Create configurable product -->
        <actionGroup ref="AdminOpenProductIndexPageActionGroup" stepKey="amOnProductGridPage"/>
        <actionGroup ref="GoToCreateProductPageActionGroup" stepKey="createConfigurableProduct">
            <argument name="product" value="ApiConfigurableProduct"/>
        </actionGroup>

        <!-- Fill configurable product values -->
        <actionGroup ref="FillMainProductFormActionGroup" stepKey="fillConfigurableProductValues">
            <argument name="product" value="ApiConfigurableProduct"/>
        </actionGroup>

        <!-- Create product configurations -->
        <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickCreateConfigurations" after="fillConfigurableProductValues"/>
        <waitForElementVisible selector="{{AdminCreateProductConfigurationsPanel.createNewAttribute}}" time="30" stepKey="waitForConfigurationModalOpen" after="clickCreateConfigurations"/>

        <!--Create new attribute with two options -->
        <actionGroup ref="AddNewProductConfigurationAttributeActionGroup" stepKey="createProductConfigurationAttribute">
            <argument name="attribute" value="colorProductAttribute"/>
            <argument name="firstOption" value="colorConfigurableProductAttribute1"/>
            <argument name="secondOption" value="colorConfigurableProductAttribute2"/>
        </actionGroup>

        <!-- Change product configurations in grid -->
        <actionGroup ref="ChangeProductConfigurationsInGridActionGroup" stepKey="changeProductConfigurationsInGrid">
            <argument name="firstOption" value="colorConfigurableProductAttribute1"/>
            <argument name="secondOption" value="colorConfigurableProductAttribute2"/>
        </actionGroup>

        <!-- Add configurable product to category -->
        <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="[$$createCategory.name$$]" stepKey="fillCategory" after="fillConfigurableProductValues"/>

        <!-- Save configurable product; add product to new attribute set -->
        <actionGroup ref="SaveConfigurableProductWithNewAttributeSetActionGroup" stepKey="saveConfigurableProduct"/>

        <!-- Assert child products in grid -->
        <actionGroup ref="ViewProductInAdminGridActionGroup" stepKey="viewFirstChildProductInAdminGrid">
            <argument name="product" value="colorConfigurableProductAttribute1"/>
        </actionGroup>
        <actionGroup ref="ViewProductInAdminGridActionGroup" stepKey="viewSecondChildProductInAdminGrid">
            <argument name="product" value="colorConfigurableProductAttribute2"/>
        </actionGroup>

        <!-- Assert configurable product in grid -->
        <actionGroup ref="FilterProductGridBySkuAndNameActionGroup" stepKey="findCreatedConfigurableProduct">
            <argument name="product" value="ApiConfigurableProduct"/>
        </actionGroup>
        <actionGroup ref="AssertAdminProductGridCellActionGroup" stepKey="seeProductTypeInGrid">
            <argument name="row" value="1"/>
            <argument name="column" value="Type"/>
            <argument name="value" value="{{ApiConfigurableProduct.type_id}}"/>
        </actionGroup>
        <click selector="{{AdminProductGridFilterSection.clearFilters}}" stepKey="clickClearFiltersAfter"/>

        <comment userInput="Adding the comment to replace CliCacheFlushActionGroup action group ('cache:flush' command) for preserving Backward Compatibility" stepKey="flushCache"/>

        <!--Assert configurable product in category -->
        <amOnPage url="$$createCategory.custom_attributes[url_key]$$.html" stepKey="amOnCategoryPage"/>
        <waitForPageLoad stepKey="waitForCategoryPageLoad"/>
        <actionGroup ref="StorefrontCheckCategoryConfigurableProductActionGroup" stepKey="assertConfigurableProductInCategory">
            <argument name="product" value="ApiConfigurableProduct"/>
            <argument name="optionProduct" value="colorConfigurableProductAttribute1"/>
        </actionGroup>

        <!--Assert configurable product on product page -->
        <amOnPage url="{{ApiConfigurableProduct.urlKey}}.html" stepKey="amOnProductPage" after="assertConfigurableProductInCategory"/>
        <waitForPageLoad stepKey="waitForProductPageLoad"/>
        <actionGroup ref="StorefrontCheckConfigurableProductOptionsActionGroup" stepKey="checkConfigurableProductOptions">
            <argument name="product" value="ApiConfigurableProduct"/>
            <argument name="firstOption" value="colorConfigurableProductAttribute1"/>
            <argument name="secondOption" value="colorConfigurableProductAttribute2"/>
        </actionGroup>

        <!-- Add configurable product to the cart with selected first option -->
        <selectOption userInput="{{colorConfigurableProductAttribute1.name}}" selector="{{StorefrontProductInfoMainSection.productAttributeOptionsSelectButton}}" stepKey="selectOptionForAddingToCart"/>
        <click selector="{{StorefrontProductInfoMainSection.AddToCart}}" stepKey="clickAddToCart"/>
        <waitForElementVisible selector="{{StorefrontCategoryMainSection.SuccessMsg}}" stepKey="waitForSuccessMessage"/>

        <!-- Assert configurable product in cart -->
        <actionGroup ref="StorefrontCartPageOpenActionGroup" stepKey="amOnShoppingCartPage"/>
        <actionGroup ref="StorefrontCheckCartConfigurableProductActionGroup" stepKey="storefrontCheckCartConfigurableProductActionGroup">
            <argument name="product" value="ApiConfigurableProduct"/>
            <argument name="optionProduct" value="colorConfigurableProductAttribute1"/>
            <argument name="productQuantity" value="CONST.one"/>
        </actionGroup>

        <!-- Assert child products are not displayed separately: two next step -->
        <actionGroup ref="StorefrontOpenHomePageActionGroup" stepKey="goToStoreFront"/>

        <!-- Quick search the storefront for the first attribute option -->
        <submitForm selector="{{StorefrontQuickSearchSection.searchMiniForm}}" parameterArray="['q' => {{colorConfigurableProductAttribute1.sku}}]" stepKey="searchStorefrontFirstChildProduct"/>
        <dontSee selector="{{StorefrontCategoryProductSection.ProductTitleByName(colorConfigurableProductAttribute1.name)}}" stepKey="dontSeeConfigurableProductFirstChild"/>

        <!-- Quick search the storefront for the second attribute option -->
        <submitForm selector="{{StorefrontQuickSearchSection.searchMiniForm}}" parameterArray="['q' => {{colorConfigurableProductAttribute2.sku}}]" stepKey="searchStorefrontSecondChildProduct"/>
        <dontSee selector="{{StorefrontCategoryProductSection.ProductTitleByName(colorConfigurableProductAttribute2.name)}}" stepKey="dontSeeConfigurableProductSecondChild"/>
    </test>
</tests>
