<?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="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
    <!--Create a new category-->
    <actionGroup name="CreateCategory">
        <arguments>
            <argument name="categoryEntity" defaultValue="_defaultCategory"/>
        </arguments>
        <seeInCurrentUrl url="{{AdminCategoryPage.url}}" stepKey="seeOnCategoryPage"/>
        <click selector="{{AdminCategorySidebarActionSection.AddSubcategoryButton}}" stepKey="clickOnAddSubCategory"/>
        <see selector="{{AdminHeaderSection.pageTitle}}" userInput="New Category" stepKey="seeCategoryPageTitle"/>
        <fillField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" userInput="{{categoryEntity.name}}" stepKey="enterCategoryName"/>
        <click selector="{{AdminCategorySEOSection.SectionHeader}}" stepKey="openSEO"/>
        <fillField selector="{{AdminCategorySEOSection.UrlKeyInput}}" userInput="{{categoryEntity.name_lwr}}" stepKey="enterURLKey"/>
        <click selector="{{AdminCategoryMainActionsSection.SaveButton}}" stepKey="saveCategory"/>
        <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="assertSuccess"/>
        <seeInTitle userInput="{{categoryEntity.name}}" stepKey="seeNewCategoryPageTitle"/>
        <seeElement selector="{{AdminCategorySidebarTreeSection.categoryInTree(categoryEntity.name)}}" stepKey="seeCategoryInTree"/>
    </actionGroup>

    <!-- Go to create new root or sub category page -->
    <actionGroup name="goToCreateCategoryPage">
        <arguments>
            <argument name="selector" defaultValue="AdminCategorySidebarActionSection.AddSubcategoryButton"/>
        </arguments>
        <amOnPage url="{{AdminCategoryPage.url}}" stepKey="amOnAdminCategoryPage"/>
        <scrollToTopOfPage stepKey="scrollToTopOfPage"/>
        <waitForPageLoad stepKey="waitForPageLoad"/>
        <click selector="{{selector}}" stepKey="clickOnAddCategory"/>
        <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>
            <argument name="categoryEntity" defaultValue="_defaultCategory"/>
        </arguments>
        <fillField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" userInput="{{categoryEntity.name}}" stepKey="enterCategoryName"/>
        <click selector="{{AdminCategorySEOSection.SectionHeader}}" stepKey="openSEO"/>
        <fillField selector="{{AdminCategorySEOSection.UrlKeyInput}}" userInput="{{categoryEntity.name_lwr}}" stepKey="enterURLKey"/>
    </actionGroup>

    <!-- Save category form -->
    <actionGroup name="saveCategoryForm">
        <seeInCurrentUrl url="{{AdminCategoryPage.url}}" stepKey="seeOnCategoryPage"/>
        <click selector="{{AdminCategoryMainActionsSection.SaveButton}}" stepKey="saveCategory"/>
        <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="assertSuccess"/>
    </actionGroup>

    <!--Upload image for category -->
    <actionGroup name="addCategoryImage">
        <arguments>
            <argument name="image" defaultValue="ProductImage"/>
        </arguments>
        <conditionalClick selector="{{AdminCategoryContentSection.sectionHeader}}" dependentSelector="{{AdminCategoryContentSection.uploadButton}}" visible="false" stepKey="openContentSection"/>
        <waitForPageLoad time="30" stepKey="waitForPageLoad"/>
        <waitForElementVisible selector="{{AdminCategoryContentSection.uploadButton}}" stepKey="seeImageSectionIsReady"/>
        <attachFile selector="{{AdminCategoryContentSection.uploadImageFile}}" userInput="{{image.file}}" stepKey="uploadFile"/>
        <waitForAjaxLoad time="30" stepKey="waitForAjaxUpload"/>
        <waitForLoadingMaskToDisappear stepKey="waitForLoading"/>
        <see selector="{{AdminCategoryContentSection.imageFileName}}" userInput="{{image.file}}" stepKey="seeImage"/>
    </actionGroup>

    <!-- Remove image from category -->
    <actionGroup name="removeCategoryImage">
        <conditionalClick selector="{{AdminCategoryContentSection.sectionHeader}}" dependentSelector="{{AdminCategoryContentSection.uploadButton}}" visible="false" stepKey="openContentSection"/>
        <waitForPageLoad stepKey="waitForPageLoad"/>
        <waitForElementVisible selector="{{AdminCategoryContentSection.uploadButton}}" stepKey="seeImageSectionIsReady"/>
        <click selector="{{AdminCategoryContentSection.removeImageButton}}" stepKey="clickRemoveImage"/>
        <waitForAjaxLoad time="30" stepKey="waitForAjaxUpload"/>
        <waitForLoadingMaskToDisappear stepKey="waitForLoading"/>
        <dontSee selector="{{AdminCategoryContentSection.imageFileName}}" stepKey="dontSeeImage"/>
    </actionGroup>

    <actionGroup name="checkCategoryImageInAdmin">
        <arguments>
            <argument name="image" defaultValue="ProductImage"/>
        </arguments>
        <conditionalClick selector="{{AdminCategoryContentSection.sectionHeader}}" dependentSelector="{{AdminCategoryContentSection.uploadButton}}" visible="false" stepKey="openContentSection"/>
        <waitForPageLoad stepKey="waitForPageLoad"/>
        <waitForElementVisible selector="{{AdminCategoryContentSection.uploadButton}}" stepKey="seeImageSectionIsReady"/>
        <see selector="{{AdminCategoryContentSection.imageFileName}}" userInput="{{image.file}}" stepKey="seeImage"/>
    </actionGroup>

    <!-- Action to navigate to Media Gallery. Used in tests to cleanup uploaded images -->
    <actionGroup name="navigateToMediaGallery">
        <amOnPage url="{{AdminCategoryPage.url}}" stepKey="amOnAdminCategoryPage"/>
        <waitForElementVisible selector="{{AdminCategoryContentSection.sectionHeader}}" stepKey="waitForContentSection"/>
        <conditionalClick selector="{{AdminCategoryContentSection.sectionHeader}}" dependentSelector="{{AdminCategoryContentSection.uploadButton}}" visible="false" stepKey="openContentSection"/>
        <waitForPageLoad stepKey="waitForPageLoad1"/>
        <waitForElementVisible selector="{{AdminCategoryContentSection.selectFromGalleryButton}}" stepKey="waitForSelectFromGalleryButton"/>
        <click selector="{{AdminCategoryContentSection.selectFromGalleryButton}}" stepKey="clickSelectFromGalleryButton"/>
        <waitForPageLoad stepKey="waitForPageLoad2"/>
        <waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear"/>
    </actionGroup>

    <!--Actions to check if a category exists on StoreFront-->
    <actionGroup name="CheckCategoryOnStorefront">
        <arguments>
            <argument name="categoryEntity" defaultValue="_defaultCategory"/>
        </arguments>
        <amOnPage url="/{{categoryEntity.name_lwr}}.html" stepKey="goToCategoryFrontPage"/>
        <waitForPageLoad stepKey="waitForPageLoad1"/>
        <see selector="{{StorefrontCategoryMainSection.CategoryTitle}}" userInput="{{categoryEntity.name_lwr}}" stepKey="assertCategoryOnStorefront"/>
        <seeInTitle userInput="{{categoryEntity.name}}" stepKey="seeCategoryNameInTitle"/>
    </actionGroup>

    <!--Actions to delete category-->
    <actionGroup name="DeleteCategory">
        <arguments>
            <argument name="categoryEntity" defaultValue="_defaultCategory"/>
        </arguments>
        <amOnPage url="{{AdminCategoryPage.url}}" stepKey="goToCategoryPage"/>
        <waitForPageLoad time="60" stepKey="waitForCategoryPageLoad"/>
        <click selector="{{AdminCategorySidebarTreeSection.categoryInTree(categoryEntity.name)}}" stepKey="clickCategoryLink"/>
        <click selector="{{AdminCategoryMainActionsSection.DeleteButton}}" stepKey="clickDelete"/>
        <waitForElementVisible selector="{{AdminCategoryModalSection.message}}" stepKey="waitForConfirmationModal"/>
        <see selector="{{AdminCategoryModalSection.message}}" userInput="Are you sure you want to delete this category?" stepKey="seeDeleteConfirmationMessage"/>
        <click selector="{{AdminCategoryModalSection.ok}}" stepKey="confirmDelete"/>
        <waitForPageLoad time="60" stepKey="waitForDeleteToFinish"/>
        <see selector="You deleted the category." stepKey="seeDeleteSuccess"/>
        <click selector="{{AdminCategorySidebarTreeSection.expandAll}}" stepKey="expandToSeeAllCategories"/>
        <dontSee selector="{{AdminCategorySidebarTreeSection.categoryInTree(categoryEntity.name)}}" stepKey="dontSeeCategoryInTree"/>
    </actionGroup>

    <!-- Actions to fill out a new category from the product page-->
    <!-- The action assumes that you are already on an admin product configuration page -->
    <actionGroup name="FillNewProductCategory" >
        <arguments>
            <argument name="categoryName" defaultValue="Test Category" type="string"/>
            <argument name="parentCategoryName" defaultValue="default" type="string"/>
        </arguments>

        <!-- Click on new Category -->
        <click stepKey="clickNewCategory" selector="{{AdminProductCategoryCreationSection.newCategory}}"/>
        <waitForPageLoad stepKey="waitForFieldSet"/>

        <fillField stepKey="fillCategoryName" selector="{{AdminProductCategoryCreationSection.nameInput}}" userInput="{{categoryName}}"/>

        <!-- Search and select a parent category for the product -->
        <click stepKey="clickParentCategory" selector="{{AdminProductCategoryCreationSection.parentCategory}}"/>
        <waitForPageLoad stepKey="waitForDropDownVisible"/>
        <fillField stepKey="searchForParent" userInput="{{parentCategoryName}}" selector="{{AdminProductCategoryCreationSection.parentSearch}}"/>
        <waitForPageLoad stepKey="waitForFieldResults"/>
        <click stepKey="clickParent" selector="{{AdminProductCategoryCreationSection.parentSearchResult}}"/>

        <click stepKey="createCategory" selector="{{AdminProductCategoryCreationSection.createCategory}}"/>
        <waitForPageLoad stepKey="waitForCategoryCreated"/>
    </actionGroup>

    <!-- Actions to delete the category last made -->
    <actionGroup name="DeleteMostRecentCategory">

        <amOnPage url="/{{AdminCategoryPage.url}}" stepKey="goToCategoryFrontPage"/>

        <waitForPageLoad stepKey="waitForCategoryPageLoad"/>

        <click stepKey="goToCreateCategory" selector="{{AdminCategorySidebarTreeSection.lastCreatedCategory}}" />
        <waitForPageLoad stepKey="waitForCreatedCategoryPageLoad"/>

        <click stepKey="clickDeleteCategory" selector="{{AdminCategoryMainActionsSection.DeleteButton}}" />
        <waitForPageLoad stepKey="waitForModalVisible"/>

        <click stepKey="clickOkToDelete" selector="{{AdminCategoryModalSection.ok}}" />

        <waitForPageLoad stepKey="waitForModalNotVisible"/>

    </actionGroup>

    <!-- Actions to check if a certain category is present on the page -->
    <actionGroup name="CategoryPresent" >
        <arguments>
            <argument name="categoryName" defaultValue="Test Category" type="string"/>
        </arguments>

        <amOnPage url="{{AdminCategoryPage.url}}" stepKey="goToCategoryAdminPage"/>
        <waitForPageLoad stepKey="waitForCategoryAdminPageLoad"/>

        <see userInput="{{categoryName}}" stepKey="assertCategoryOnAdminPage" selector="{{AdminCategorySidebarTreeSection.treeContainer}}"/>

        <amOnPage url="/{{categoryName}}.html" stepKey="goToCustomerFrontPage"/>

        <see userInput="{{categoryName}}" stepKey="assertCategoryNameOnStorefront" selector="{{StorefrontCategoryMainSection.CategoryTitle}}"/>

        <waitForPageLoad stepKey="waitForCustomerCategoryPageLoad"/>
    </actionGroup>

    <!--Check that name field is required-->
    <actionGroup name="CheckCategoryNameIsRequiredField">
        <seeInCurrentUrl url="{{AdminCategoryPage.url}}" stepKey="seeOnCategoryPage"/>
        <click selector="{{AdminCategorySidebarActionSection.AddSubcategoryButton}}" stepKey="clickOnAddSubCategory"/>
        <clearField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" stepKey="makeNameFieldEmpty"/>
        <click selector="{{AdminCategoryMainActionsSection.SaveButton}}" stepKey="saveCategory"/>
        <seeInCurrentUrl url="{{AdminCategoryPage.url}}add" stepKey="seeBackOnCreateCategoryPage"/>
        <see selector="{{AdminCategoryBasicFieldSection.FieldError('uid')}}" userInput="This is a required field." stepKey="seeErrorMessage"/>
    </actionGroup>

    <actionGroup name="switchCategoryStoreView">
        <arguments>
            <argument name="Store"/>
            <argument name="CatName"/>
        </arguments>
        <amOnPage url="{{AdminCategoryPage.page}}" stepKey="amOnCategoryPage"/>
        <waitForPageLoad stepKey="waitForPageLoad1"/>
        <click selector="{{AdminCategorySidebarTreeSection.categoryInTree(CatName)}}" stepKey="navigateToCreatedCategory" />
        <waitForPageLoad stepKey="waitForPageLoad2"/>
        <waitForLoadingMaskToDisappear stepKey="waitForSpinner"/>
        <scrollToTopOfPage stepKey="scrollToToggle"/>
        <click selector="{{AdminCategoryMainActionsSection.CategoryStoreViewDropdownToggle}}" stepKey="openStoreViewDropDown"/>
        <click selector="{{AdminCategoryMainActionsSection.CategoryStoreViewOption(Store)}}" stepKey="selectStoreView"/>
        <waitForPageLoad stepKey="waitForPageLoad3"/>
        <waitForLoadingMaskToDisappear stepKey="waitForSpinner2"/>
        <click selector="{{AdminCategoryMainActionsSection.CategoryStoreViewModalAccept}}" stepKey="selectStoreViewAccept"/>
        <waitForPageLoad stepKey="waitForStoreViewChangeLoad"/>
    </actionGroup>

    <actionGroup name="switchCategoryToAllStoreView">
        <arguments>
            <argument name="CatName"/>
        </arguments>
        <click selector="{{AdminCategorySidebarTreeSection.categoryInTree(CatName)}}" stepKey="navigateToCreatedCategory" />
        <waitForPageLoad stepKey="waitForPageLoad1"/>
        <waitForLoadingMaskToDisappear stepKey="waitForSpinner1"/>
        <scrollToTopOfPage stepKey="scrollToToggle"/>
        <click selector="{{AdminCategoryMainActionsSection.CategoryStoreViewDropdownToggle}}" stepKey="openStoreViewDropDown"/>
        <click selector="{{AdminCategoryMainActionsSection.allStoreViews}}" stepKey="clickStoreViewByName"/>
        <see selector="{{AdminCategoryMainActionsSection.storeSwitcher}}" userInput="All Store Views" stepKey="seeAllStoreView"/>
        <waitForPageLoad stepKey="waitForPageLoad2"/>
        <waitForLoadingMaskToDisappear stepKey="waitForSpinner2"/>
        <click selector="{{AdminCategoryMainActionsSection.CategoryStoreViewModalAccept}}" stepKey="selectStoreViewAccept"/>
        <waitForPageLoad stepKey="waitForStoreViewChangeLoad"/>
    </actionGroup>

    <actionGroup name="navigateToCreatedCategory">
        <arguments>
            <argument name="Category"/>
        </arguments>
        <amOnPage url="{{AdminCategoryPage.page}}" stepKey="amOnCategoryPage"/>
        <waitForPageLoad stepKey="waitForPageLoad1"/>
        <click selector="{{AdminCategorySidebarTreeSection.expandAll}}" stepKey="expandAll"/>
        <waitForPageLoad stepKey="waitForPageLoad2"/>
        <click selector="{{AdminCategorySidebarTreeSection.categoryInTree(Category.Name)}}" stepKey="navigateToCreatedCategory" />
        <waitForLoadingMaskToDisappear stepKey="waitForSpinner" />
    </actionGroup>

    <actionGroup name="ChangeSeoUrlKey">
        <arguments>
            <argument name="value" type="string"/>
        </arguments>
        <click selector="{{AdminCategorySEOSection.SectionHeader}}"  stepKey="openSeoSection"/>
        <fillField selector="{{AdminCategorySEOSection.UrlKeyInput}}" userInput="{{value}}" stepKey="enterURLKey"/>
        <click selector="{{AdminCategoryMainActionsSection.SaveButton}}" stepKey="saveCategory"/>
        <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="assertSuccessMessage"/>
    </actionGroup>

    <actionGroup name="ChangeSeoUrlKeyForSubCategory">
        <arguments>
            <argument name="value" type="string"/>
        </arguments>
        <click selector="{{AdminCategorySEOSection.SectionHeader}}"  stepKey="openSeoSection"/>
        <uncheckOption selector="{{AdminCategorySEOSection.UrlKeyDefaultValueCheckbox}}" stepKey="uncheckDefaultValue"/>
        <fillField selector="{{AdminCategorySEOSection.UrlKeyInput}}" userInput="{{value}}" stepKey="enterURLKey"/>
        <click selector="{{AdminCategoryMainActionsSection.SaveButton}}" stepKey="saveCategory"/>
        <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="assertSuccessMessage"/>
    </actionGroup>
    <actionGroup name="OpenCategoryFromCategoryTree">
        <arguments>
            <argument name="category" type="string"/>
        </arguments>
        <amOnPage url="{{AdminCategoryPage.url}}" stepKey="openAdminCategoryIndexPage"/>
        <waitForPageLoad stepKey="waitForCategoryPageToLoad"/>
        <click selector="{{AdminCategorySidebarTreeSection.expandAll}}" stepKey="clickOnExpandTree"/>
        <waitForPageLoad stepKey="waitForCategoryToLoad"/>
        <click selector="{{AdminCategorySidebarTreeSection.categoryInTree(category)}}" stepKey="selectCategory"/>
        <waitForPageLoad stepKey="waitForPageToLoad"/>
        <waitForElementVisible selector="{{AdminCategoryContentSection.categoryPageTitle}}" stepKey="waitForCategoryTitle"/>
    </actionGroup>
    <actionGroup name="AdminAssignProductToCategory">
        <arguments>
            <argument name="productId" type="string"/>
            <argument name="categoryName" type="string"/>
        </arguments>
        <amOnPage url="{{AdminProductEditPage.url(productId)}}" stepKey="amOnPage"/>
        <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="[{{categoryName}}]" stepKey="selectCategory"/>
        <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickOnSaveButton"/>
        <see selector="{{AdminMessagesSection.success}}" userInput="You saved the product." stepKey="seeSaveProductMessage"/>
    </actionGroup>
    <actionGroup name="FillCategoryNameAndUrlKeyAndSave">
        <arguments>
            <argument name="categoryName" type="string"/>
            <argument name="categoryUrlKey" type="string"/>
        </arguments>
        <fillField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" userInput="{{categoryName}}" stepKey="enterCategoryName"/>
        <scrollTo selector="{{AdminCategorySEOSection.SectionHeader}}" stepKey="scrollToSearchEngineOptimization"/>
        <click selector="{{AdminCategorySEOSection.SectionHeader}}" stepKey="openSEO"/>
        <waitForPageLoad stepKey="waitForPageToLoad"/>
        <fillField selector="{{AdminCategorySEOSection.UrlKeyInput}}" userInput="{{categoryUrlKey}}" stepKey="enterURLKey"/>
        <scrollToTopOfPage stepKey="scrollToTheTopOfPage"/>
        <click selector="{{AdminCategoryMainActionsSection.SaveButton}}" stepKey="saveCategory"/>
        <waitForPageLoad stepKey="waitForPageToLoad1"/>
    </actionGroup>
</actionGroups>
