<?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="AdminShouldBeAbleToMassUpdateAttributesForBundleProductsTest">
        <annotations>
            <features value="Bundle"/>
            <stories value="Admin list bundle products"/>
            <title value="Admin should be able to mass update attributes for bundle products"/>
            <description value="Admin should be able to mass update attributes for bundle products"/>
            <severity value="CRITICAL"/>
            <testCaseId value="MC-219"/>
            <group value="bundle"/>
            <group value="WYSIWYGDisabled"/>
        </annotations>
        <before>
            <!-- Create Simple Product -->
            <createData entity="SimpleProduct2" stepKey="createSimpleProduct"/>
            <!-- Create Fixed Bundle Product -->
            <createData entity="ApiFixedBundleProduct" stepKey="createFixedBundleProduct"/>
            <!-- Create DropDown Bundle Option -->
            <createData entity="DropDownBundleOption" stepKey="createBundleOption">
                <requiredEntity createDataKey="createFixedBundleProduct"/>
            </createData>
            <!-- Link Simple Product -->
            <createData entity="ApiBundleLink" stepKey="createNewBundleLink">
                <requiredEntity createDataKey="createFixedBundleProduct"/>
                <requiredEntity createDataKey="createBundleOption"/>
                <requiredEntity createDataKey="createSimpleProduct"/>
            </createData>
            <actionGroup ref="CliIndexerReindexActionGroup" stepKey="runCronIndex">
                <argument name="indices" value=""/>
            </actionGroup>
        </before>
        <after>
            <!-- Delete Simple Product -->
            <deleteData createDataKey="createSimpleProduct" stepKey="deleteSimpleProduct"/>
            <!-- Delete Fixed Bundle Product -->
            <deleteData createDataKey="createFixedBundleProduct" stepKey="deleteBundleProduct"/>
            <!-- Clear Filter -->
            <actionGroup ref="ClearProductsFilterActionGroup" stepKey="clearProductFilter"/>
            <!--Log Out Admin-->
            <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutAsAdmin"/>
        </after>
        <!-- Login as Admin -->
        <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/>
        <!-- Go to Catalog -> Catalog -> Products and Search created product in precondition and choose it -->
        <actionGroup ref="SearchForProductOnBackendActionGroup" stepKey="searchProduct">
            <argument name="product" value="$$createFixedBundleProduct$$"/>
        </actionGroup>
        <!-- Choose "Update attributes" and Change any product data -->
        <actionGroup ref="AdminUpdateProductNameAndDescriptionAttributes" stepKey="updateProductAttribute">
            <argument name="product" value="UpdateAttributeNameAndDescription"/>
        </actionGroup>
        <!-- Start message queue for product attribute consumer -->
        <actionGroup ref="CliConsumerStartActionGroup" stepKey="startMessageQueue">
            <argument name="consumerName" value="{{AdminProductAttributeUpdateMessageConsumerData.consumerName}}"/>
            <argument name="maxMessages" value="{{AdminProductAttributeUpdateMessageConsumerData.messageLimit}}"/>
        </actionGroup>
        <!-- Search for a product with a new name and Open Product -->
        <actionGroup ref="FilterProductGridByNameActionGroup" stepKey="searchWithNewProductName">
            <argument name="product" value="UpdateAttributeNameAndDescription"/>
        </actionGroup>
        <actionGroup ref="OpenEditProductOnBackendActionGroup" stepKey="openProductPage">
            <argument name="product" value="$$createFixedBundleProduct$$"/>
        </actionGroup>
        <!-- Assert product name and description -->
        <actionGroup ref="AssertProductNameInProductEditFormActionGroup" stepKey="assertProductName">
            <argument name="productName" value="{{UpdateAttributeNameAndDescription.name}}"/>
        </actionGroup>
        <actionGroup ref="AssertProductDescriptionInProductEditFormActionGroup" stepKey="assertProductDescription">
            <argument name="productDescription" value="{{UpdateAttributeNameAndDescription.description}}"/>
        </actionGroup>
    </test>
</tests>
