<?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="AdminCreateConfigurableProductWithCreatingCategoryAndAttributeTest">
        <annotations>
            <features value="ConfigurableProduct"/>
            <stories value="Create configurable product"/>
            <title value="Create configurable product with creating new category and new attribute (required fields only)"/>
            <description value="Admin should be able to create configurable product with creating new category and new attribute (required fields only)"/>
            <testCaseId value="MC-13687"/>
            <severity value="CRITICAL"/>
            <group value="mtf_migrated"/>
        </annotations>
        <before>
            <createData entity="SimpleSubCategory" stepKey="createCategory"/>
            <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 required fields only-->
        <fillField selector="{{AdminProductFormSection.productName}}" userInput="{{ApiConfigurableProduct.name}}" stepKey="fillProductName"/>
        <fillField selector="{{AdminProductFormSection.productSku}}" userInput="{{ApiConfigurableProduct.sku}}" stepKey="fillProductSku"/>
        <fillField selector="{{AdminProductFormSection.productPrice}}" userInput="{{ApiConfigurableProduct.price}}" stepKey="fillProductPrice"/>

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

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

        <!--Create new attribute with two option -->
        <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>

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

        <!-- Find configurable product in grid -->
        <actionGroup ref="AdminOpenProductIndexPageActionGroup" stepKey="visitAdminProductPage"/>
        <actionGroup ref="FilterProductGridBySkuActionGroup" stepKey="findCreatedConfigurableProduct">
            <argument name="product" value="ApiConfigurableProduct"/>
        </actionGroup>

        <!-- Assert configurable product on admin product page -->
        <actionGroup ref="AdminProductGridSectionClickFirstRowActionGroup" stepKey="clickOnProductPage"/>
        <actionGroup ref="AssertConfigurableProductOnAdminProductPageActionGroup" stepKey="assertConfigurableProductOnAdminProductPage">
            <argument name="product" value="ApiConfigurableProduct"/>
        </actionGroup>

        <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"/>
        <waitForPageLoad stepKey="waitForPageLoad"/>
        <actionGroup ref="StorefrontCheckConfigurableProductOptionsActionGroup" stepKey="checkConfigurableProductOptions">
            <argument name="product" value="ApiConfigurableProduct"/>
            <argument name="firstOption" value="colorConfigurableProductAttribute1"/>
            <argument name="secondOption" value="colorConfigurableProductAttribute2"/>
        </actionGroup>
    </test>
</tests>
