Skip to content

Commit a55d8b4

Browse files
committed
Merge from 511_content-snapshot-product-admin-page
2 parents 6cc5ab1 + 7c00f44 commit a55d8b4

File tree

35 files changed

+978
-76
lines changed

35 files changed

+978
-76
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types = 1);
8+
9+
namespace Magento\PageBuilder\Plugin\Catalog\Ui\DataProvider\Product\Form\Modifier;
10+
11+
use Magento\Catalog\Api\Data\ProductAttributeInterface;
12+
use Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Eav as EavModifier;
13+
use Magento\Framework\Stdlib\ArrayManager;
14+
15+
/**
16+
* Data Provider for EAV Attributes on Product Page
17+
*/
18+
class EavPlugin
19+
{
20+
public const META_ATTRIBUTE_CONFIG_PATH = 'arguments/data/config';
21+
22+
/**
23+
* @var ArrayManager
24+
*/
25+
private $arrayManager;
26+
27+
/**
28+
* @param ArrayManager $arrayManager
29+
*/
30+
public function __construct(ArrayManager $arrayManager)
31+
{
32+
$this->arrayManager = $arrayManager;
33+
}
34+
35+
/**
36+
* Setup Attribute Meta
37+
*
38+
* @param EavModifier $subject
39+
* @param array $result
40+
* @param ProductAttributeInterface $attribute
41+
* @param string $groupCode
42+
* @param int $sortOrder
43+
* @return array
44+
*
45+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
46+
*/
47+
public function afterSetupAttributeMeta(
48+
EavModifier $subject,
49+
$result,
50+
ProductAttributeInterface $attribute,
51+
$groupCode,
52+
$sortOrder
53+
) {
54+
$meta = $result;
55+
56+
if ($attribute->getData('is_pagebuilder_enabled')) {
57+
$meta = $this->arrayManager->merge(
58+
static::META_ATTRIBUTE_CONFIG_PATH,
59+
$result,
60+
[
61+
'additionalClasses' => 'admin__field-wide admin__field-page-builder'
62+
]
63+
);
64+
}
65+
66+
return $meta;
67+
}
68+
69+
/**
70+
* Setup Attribute Container Meta
71+
*
72+
* @param EavModifier $subject
73+
* @param array $result
74+
* @param ProductAttributeInterface $attribute
75+
* @return array
76+
*
77+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
78+
*/
79+
public function afterSetupAttributeContainerMeta(
80+
EavModifier $subject,
81+
$result,
82+
ProductAttributeInterface $attribute
83+
) {
84+
$containerMeta = $result;
85+
86+
if ($attribute->getData('is_pagebuilder_enabled')) {
87+
$containerMeta = $this->arrayManager->merge(
88+
static::META_ATTRIBUTE_CONFIG_PATH,
89+
$result,
90+
[
91+
'additionalFieldsetClasses' => [
92+
'admin__field-wide' => true,
93+
'admin__fieldset-page-builder' => true
94+
],
95+
'template' => 'Magento_PageBuilder/form/components/group/group'
96+
]
97+
);
98+
}
99+
100+
return $containerMeta;
101+
}
102+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
10+
<actionGroup name="AdminOpenPageBuilderFromContentPreviewOverlayActionGroup">
11+
<annotations>
12+
<description>Click Page Builder preview overlay to open Page Builder stage.</description>
13+
</annotations>
14+
<waitForElementVisible selector="{{PageBuilderStage.stageOverlay}}" stepKey="waitForStageOverlay"/>
15+
<click selector="{{PageBuilderStage.stageOverlay}}" stepKey="clickOnStageOverlayOnStage"/>
16+
<waitForPageLoad stepKey="waitForPageLoadPageBuilder"/>
17+
<waitForElementVisible selector="{{PageBuilderPanel.layoutMenuSection}}" stepKey="waitForPageBuilderLayoutMenu"/>
18+
<waitForElementVisible selector="{{PageBuilderStage.stageWrapperFullScreen}}" stepKey="waitForPageBuilderFullScreen"/>
19+
</actionGroup>
20+
</actionGroups>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
10+
<actionGroup name="ValidatePageBuilderPreviewActionGroup">
11+
<annotations>
12+
<description>Verifies Page Builder preview has the 'Edit with Page Builder' button, has an overlay, does not have the Page Builder left panel, does not have the Page Builder template buttons, and does not open content type option menus.</description>
13+
</annotations>
14+
<arguments>
15+
<argument name="pageBuilderArea" defaultValue="" type="string"/>
16+
</arguments>
17+
<waitForElementVisible selector="{{pageBuilderArea}}{{PageBuilderStage.editWithPageBuilderButton}}" stepKey="waitForEditWithPageBuilderButton"/>
18+
<see userInput="Edit with Page Builder" selector="{{pageBuilderArea}}{{PageBuilderStage.editWithPageBuilderButton}}" stepKey="seeEditWithPageBuilderButton"/>
19+
<dontSeeElementInDOM selector="{{PageBuilderPanel.leftPanel}}" stepKey="dontSeePageBuilderContentTypePanel"/>
20+
<dontSeeElementInDOM selector="{{pageBuilderArea}}{{PageBuilderStage.applyTemplateButton}}" stepKey="dontSeePageBuilderApplyTemplateButton"/>
21+
<dontSeeElementInDOM selector="{{pageBuilderArea}}{{PageBuilderStage.saveAsTemplateButton}}" stepKey="dontSeePageBuilderSaveAsTemplateButton"/>
22+
<waitForElementVisible selector="{{PageBuilderStage.stageOverlay}}" stepKey="waitForStageOverlay"/>
23+
<moveMouseOver selector="{{PageBuilderStage.stageOverlay}}" stepKey="mouseOverStageOverlay"/>
24+
<waitForElementVisible selector="{{PageBuilderStage.stageOverlayOnHover}}" stepKey="waitForStageOverlayOnHover"/>
25+
<dontSeeElement selector="{{PageBuilderContentTypeOptionsMenu.contentTypeOptionsMenu(PageBuilderRowContentType.role)}}" stepKey="dontSeeRowOptionMenu"/>
26+
</actionGroup>
27+
</actionGroups>

app/code/Magento/PageBuilder/Test/Mftf/ActionGroup/StageActionGroup/VerifyEmptyStageActionGroup.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<waitForPageLoad stepKey="waitForStageLoad"/>
1919
<waitForElementVisible selector="{{RowOnStage.empty(rowIndex)}}" stepKey="waitForEmptyRow"/>
2020
<seeElement selector="{{RowOnStage.empty(rowIndex)}}" stepKey="seeEmptyRow"/>
21+
<see userInput="Drag content types or columns here" selector="{{RowOnStage.emptyPlaceholder(rowIndex)}}" stepKey="seeEmptyRowPlaceholderMessage"/>
2122
<seeNumberOfElements userInput="1" selector="{{pageBuilderArea}}{{RowOnStage.allRows}}" stepKey="seeOnlyOneRow"/>
2223
</actionGroup>
2324
</actionGroups>

app/code/Magento/PageBuilder/Test/Mftf/Section/PageBuilderRowSection/RowOnStageSection.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<element name="notHidden" type="text" selector="(//div[contains(@class,'pagebuilder-content-type') and contains(@class,'pagebuilder-row')])[{{arg1}}]/ancestor::*[contains(@class, 'pagebuilder-content-type-wrapper') and not(contains(@class, 'pagebuilder-content-type-hidden'))][1]" parameterized="true"/>
1616
<element name="baseCSS" type="text" selector="div.pagebuilder-content-type.pagebuilder-row"/>
1717
<element name="empty" type="button" selector="(//div[contains(@class,'pagebuilder-content-type') and contains(@class,'pagebuilder-row')])[{{arg1}}][contains(@class,'empty-container')]//div[contains(@class,'element-children') and contains(@class,'row-container')]" parameterized="true"/>
18+
<element name="emptyPlaceholder" type="button" selector="(//div[contains(@class,'pagebuilder-content-type') and contains(@class,'pagebuilder-row')])[{{arg1}}][contains(@class,'empty-container')]//div[contains(@class,'empty-placeholder')]" parameterized="true"/>
1819
<element name="displayLabel" type="button" selector="(//div[contains(@class,'pagebuilder-content-type') and contains(@class,'pagebuilder-row')])[{{arg1}}]//div[contains(@class,'pagebuilder-display-label')]" parameterized="true"/>
1920
<element name="rowChildrenStyle" type="text" selector="(//div[contains(@class, 'pagebuilder-row')])[{{arg1}}]//div[contains(@class, 'element-children') and contains(@class, 'row-container')][contains(@style, '{{arg2}}')]" parameterized="true"/>
2021
<element name="rowWidthJS" type="text" selector="document.querySelectorAll('[data-content-type=row]')[{{arg1}} - 1].clientWidth" parameterized="true"/>

app/code/Magento/PageBuilder/Test/Mftf/Section/PageBuilderStageSection/PageBuilderStageSection.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@
1111
<element name="imageSource" type="text" selector="//img[contains(@src,'{{var1}}')]" parameterized="true"/>
1212
<element name="applyTemplateButton" type="button" selector="//button[contains(@data-bind,'toggleTemplateManger') and text()='Apply Template']"/>
1313
<element name="saveAsTemplateButton" type="button" selector="//button[contains(@data-bind,'saveAsTemplate') and text()='Save as Template']"/>
14+
<element name="editWithPageBuilderButton" type="button" selector="//button[contains(@data-bind,'pageBuilderEditButtonClick')]"/>
1415
<element name="openFullScreen" type="button" selector="//i[@class='icon-pagebuilder-fullscreen']"/>
1516
<element name="exitFullScreen" type="button" selector=".pagebuilder-header .icon-pagebuilder-fullscreen-exit"/>
1617
<element name="stageLoading" type="button" selector="div.pagebuilder-stage-loading"/>
1718
<element name="stageWrapper" type="button" selector="//div[@class='pagebuilder-stage-wrapper']"/>
1819
<element name="enabled" type="button" selector="//div[not(contains(@class, '_disabled'))]/div[contains(@class, 'pagebuilder-wysiwyg-wrapper')]/div[@class='pagebuilder-stage-wrapper']"/>
1920
<element name="disabled" type="button" selector="//div[contains(@class, '_disabled')]/div[contains(@class, 'pagebuilder-wysiwyg-wrapper')]/div[@class='pagebuilder-stage-wrapper']"/>
2021
<element name="stageWrapperFullScreen" type="button" selector="div.pagebuilder-stage-wrapper.stage-full-screen"/>
22+
<element name="stageOverlay" type="button" selector="div.pagebuilder-wysiwyg-overlay"/>
23+
<element name="stageOverlayOnHover" type="button" selector="div.pagebuilder-wysiwyg-overlay._hover"/>
2124
<element name="stageWidthJS" type="button" selector="document.querySelector('div[class~=\'root-container-container\']').clientWidth"/>
2225
<element name="modal" type="text" selector="aside.modal-popup._show"/>
2326
<element name="modalOk" type="button" selector="aside.modal-popup._show button.action-primary.action-accept"/>

app/code/Magento/PageBuilder/Test/Mftf/Test/AdminCatalogProductPageBuilderTest/PageBuilderWorksForEachCatalogProductAttributeTest.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@
112112
<actionGroup ref="dragContentTypeToContainer" stepKey="dragButtonsToRow">
113113
<argument name="contentType" value="PageBuilderButtonsContentType"/>
114114
<argument name="containerTargetType" value="PageBuilderRowContentType"/>
115-
<argument name="containerTargetIndex" value="2"/>
116115
<argument name="pageBuilderArea" value="{{PageBuilderProductAttribute.PageBuilderArea('description')}}"/>
117116
</actionGroup>
118117
<!-- Edit Button Item -->
@@ -154,7 +153,6 @@
154153
<actionGroup ref="dragContentTypeToContainer" stepKey="dragDividerIntoRow">
155154
<argument name="contentType" value="PageBuilderDividerContentType"/>
156155
<argument name="containerTargetType" value="PageBuilderRowContentType"/>
157-
<argument name="containerTargetIndex" value="3"/>
158156
<argument name="pageBuilderArea" value="{{PageBuilderProductAttribute.PageBuilderArea('short_description')}}"/>
159157
</actionGroup>
160158
<actionGroup ref="openPageBuilderEditPanelByIndex" stepKey="openEditMenuForDivider">
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
10+
<test name="PageBuilderCatalogCategoryContentSnapshotTest">
11+
<annotations>
12+
<features value="PageBuilder"/>
13+
<stories value="Content Snapshot"/>
14+
<title value="Catalog Category - Verify PageBuilder Content Snapshot"/>
15+
<description value="This test is to ensure that the PageBuilder Content Snapshot appears on stage and PageBuilder works in full-screen mode."/>
16+
<severity value="MAJOR"/>
17+
<group value="pagebuilder"/>
18+
<group value="pagebuilder-contentSnapshot"/>
19+
<group value="pagebuilder-catalog-category"/>
20+
</annotations>
21+
<before>
22+
<createData entity="_defaultCategory" stepKey="createPreReqCategory"/>
23+
<actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/>
24+
<actionGroup ref="NavigateToCreatedCategoryActionGroup" stepKey="navigateToAPageWithPageBuilder">
25+
<argument name="Category" value="$$createPreReqCategory$$"/>
26+
</actionGroup>
27+
<actionGroup ref="expandAdminCategorySection" stepKey="expandContentSection"/>
28+
</before>
29+
<after>
30+
<deleteData createDataKey="createPreReqCategory" stepKey="deleteCreatedCategory"/>
31+
<actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/>
32+
</after>
33+
<!-- Verify Page Builder preview is ready -->
34+
<actionGroup ref="ValidatePageBuilderPreviewActionGroup" stepKey="verifyPageBuilderPreview"/>
35+
<!-- Verify Empty Row -->
36+
<actionGroup ref="verifyEmptyStage" stepKey="verifyPreviewEmptyRow"/>
37+
<!-- Open Page Builder Full Screen -->
38+
<actionGroup ref="AdminOpenPageBuilderFromContentPreviewOverlayActionGroup" stepKey="openPageBuilderFullScreen"/>
39+
<!-- Verify Empty Row -->
40+
<actionGroup ref="verifyEmptyStage" stepKey="verifyFullScreenEmptyRow"/>
41+
<!-- Add Button to Row -->
42+
<actionGroup ref="expandPageBuilderPanelMenuSection" stepKey="expandPageBuilderPanelMenuSection">
43+
<argument name="contentType" value="PageBuilderButtonsContentType"/>
44+
</actionGroup>
45+
<actionGroup ref="dragContentTypeToStage" stepKey="dragContentTypeToStage">
46+
<argument name="contentType" value="PageBuilderButtonsContentType"/>
47+
</actionGroup>
48+
<actionGroup ref="inlineEditButton" stepKey="inlineEditButton">
49+
<argument name="text" value="PageBuilderButtonItemText_OneCharacter"/>
50+
</actionGroup>
51+
<!-- Exit full screen -->
52+
<actionGroup ref="exitPageBuilderFullScreen" stepKey="exitFullScreen"/>
53+
<!-- Verify PageBuilder Button Content Type is on Stage -->
54+
<waitForElementVisible selector="{{ButtonItemOnStorefrontEmptyLink.buttonItemText('1', PageBuilderButtonItemText_OneCharacter.value)}}" stepKey="seePageBuilderButtonText"/>
55+
<!-- Verify no Empty Preview Message on Stage -->
56+
<dontSeeElementInDOM selector="{{RowOnStage.empty('1')}}" stepKey="dontSeeEmptyRowOnPreview"/>
57+
<!-- Verify Page Builder preview is ready -->
58+
<actionGroup ref="ValidatePageBuilderPreviewActionGroup" stepKey="verifyPageBuilderPreviewAfterFullScreen"/>
59+
<!-- Verify Page Builder Full Screen -->
60+
<actionGroup ref="AdminOpenPageBuilderFromContentPreviewOverlayActionGroup" stepKey="openPageBuilderFullScreen2"/>
61+
</test>
62+
</tests>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
10+
<test name="PageBuilderCatalogProductContentSnapshotTest" extends="PageBuilderCatalogCategoryContentSnapshotTest">
11+
<annotations>
12+
<features value="PageBuilder"/>
13+
<stories value="Content Snapshot"/>
14+
<title value="Catalog Product - Verify PageBuilder Content Snapshot"/>
15+
<description value="This test is to ensure that the PageBuilder Content Snapshot appears on stage in Product Admin Page and PageBuilder works in full-screen mode."/>
16+
<severity value="MAJOR"/>
17+
<group value="pagebuilder"/>
18+
<group value="pagebuilder-contentSnapshot"/>
19+
<group value="pagebuilder-catalog-product"/>
20+
</annotations>
21+
<before>
22+
<createData entity="_defaultProduct" stepKey="createProduct" after="createPreReqCategory">
23+
<requiredEntity createDataKey="createPreReqCategory"/>
24+
</createData>
25+
<actionGroup ref="NavigateToCreatedProductEditPageActionGroup" stepKey="navigateToAPageWithPageBuilder">
26+
<argument name="product" value="$$createProduct$$"/>
27+
</actionGroup>
28+
<actionGroup ref="ExpandAdminProductSectionActionGroup" stepKey="expandContentSection"/>
29+
</before>
30+
<after>
31+
<deleteData createDataKey="createProduct" stepKey="deleteCreatedProduct" after="deleteCreatedCategory"/>
32+
<actionGroup ref="NavigateToAndResetProductGridToDefaultViewActionGroup" stepKey="NavigateToAndResetProductGridToDefaultView" after="deleteCreatedProduct"/>
33+
</after>
34+
</test>
35+
</tests>

app/code/Magento/PageBuilder/Ui/DataProvider/Product/Form/Modifier/Eav/WysiwygConfigDataProcessor.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@ class WysiwygConfigDataProcessor implements
1212
\Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Eav\WysiwygConfigDataProcessorInterface
1313
{
1414
/**
15-
* {@inheritdoc}
15+
* @inheritdoc
1616
*/
1717
public function process(\Magento\Catalog\Api\Data\ProductAttributeInterface $attribute)
1818
{
1919
$wysiwygConfigData = [];
2020
if ($attribute->getData('is_pagebuilder_enabled')) {
2121
$wysiwygConfigData['is_pagebuilder_enabled'] = true;
22+
$wysiwygConfigData['pagebuilder_content_snapshot'] = true;
2223
$wysiwygConfigData['pagebuilder_button'] = true;
2324
} else {
2425
$wysiwygConfigData['is_pagebuilder_enabled'] = false;

0 commit comments

Comments
 (0)