Skip to content

Commit 4ae6590

Browse files
Merge pull request #168 from magento-cia/2.4.5-develop-2.4-develop-sync-05172022
Sync of 2.4.5-develop with 2.4-develop
2 parents 46e8f10 + b040c54 commit 4ae6590

File tree

30 files changed

+1281
-1312
lines changed

30 files changed

+1281
-1312
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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="StorefrontClickProductAddToCartValidateAsyncActionGroup">
11+
<arguments>
12+
<argument name="product" type="string"/>
13+
</arguments>
14+
<waitForElementVisible selector="{{ProductsOnStorefront.productImageByProductName(product)}}" stepKey="waitForProductImage"/>
15+
<moveMouseOver selector="{{ProductsOnStorefront.productImageByProductName(product)}}" stepKey="moveMouseOverProduct"/>
16+
<click selector="{{ProductsOnStorefront.productAddToCartByProductName(product)}}" stepKey="clickProductAddToCart"/>
17+
<seeElement selector="{{StorefrontProductActionSection.addToCartButtonTitleIsAdding}}" stepKey="seeAddingButtonLabel"/>
18+
<waitForElementVisible selector="{{StorefrontProductActionSection.addToCartButtonTitleIsAdded}}" stepKey="waitForAddedButtonLabel"/>
19+
<seeElement selector="{{StorefrontProductActionSection.addToCartButtonTitleIsAdded}}" stepKey="seeAddedButtonLabel"/>
20+
<waitForPageLoad stepKey="waitForProductPageToLoad"/>
21+
<see userInput="You added {{product}} to your shopping cart." stepKey="seeAddToCartSuccessMessage"/>
22+
</actionGroup>
23+
</actionGroups>

app/code/Magento/PageBuilder/Test/Mftf/Data/BackgroundFormData.xml

+3-3
Original file line numberDiff line numberDiff line change
@@ -598,21 +598,21 @@
598598
<data key="section">background</data>
599599
<data key="fieldName">video_source</data>
600600
<data key="value">https://www.youtube.com/embed/slOtnjsbff0</data>
601-
<data key="renderedValue">https://www.youtube.com/embed/slOtnjsbff0</data>
601+
<data key="renderedValue">https://www.youtube-nocookie.com/embed/slOtnjsbff0</data>
602602
</entity>
603603
<entity name="PageBuilderVideoBackgroundUrl_YouTube_NonEmbedded" type="pagebuilder_video_background_url">
604604
<data key="name">Video URL</data>
605605
<data key="section">background</data>
606606
<data key="fieldName">video_source</data>
607607
<data key="value">https://www.youtube.com/watch?v=slOtnjsbff0</data>
608-
<data key="renderedValue">https://www.youtube.com/embed/slOtnjsbff0</data>
608+
<data key="renderedValue">https://www.youtube-nocookie.com/embed/slOtnjsbff0</data>
609609
</entity>
610610
<entity name="PageBuilderVideoBackgroundUrl_YouTube_Insecure" type="pagebuilder_video_background_url">
611611
<data key="name">Video URL</data>
612612
<data key="section">background</data>
613613
<data key="fieldName">video_source</data>
614614
<data key="value">http://www.youtube.com/watch?v=slOtnjsbff0</data>
615-
<data key="renderedValue">https://www.youtube.com/embed/slOtnjsbff0</data>
615+
<data key="renderedValue">https://www.youtube-nocookie.com/embed/slOtnjsbff0</data>
616616
</entity>
617617
<entity name="PageBuilderVideoBackgroundUrl_Vimeo_Embedded" type="pagebuilder_video_background_url">
618618
<data key="name">Video URL</data>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
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="StorefrontProductCarouselAddToCartShouldNotReloadPage">
11+
<annotations>
12+
<features value="PageBuilder"/>
13+
<stories value="Add to cart from Carousel"/>
14+
<title value="Adding to cart from product widget carousel should not reload page"/>
15+
<description value="Clicking on Add to Cart on product in carousel widget should not reload page, the request should be submitted asynchronously."/>
16+
<severity value="AVERAGE"/>
17+
<useCaseId value="ACP2E-703"/>
18+
<testCaseId value="AC-2853"/>
19+
<group value="pagebuilder"/>
20+
<group value="pagebuilder-cms-page"/>
21+
<group value="pagebuilder-products"/>
22+
<group value="pagebuilder-productsCarousel"/>
23+
</annotations>
24+
<before>
25+
<createData entity="_defaultCategory" stepKey="createCategory"/>
26+
<createData entity="_defaultProduct" stepKey="createProduct">
27+
<requiredEntity createDataKey="createCategory"/>
28+
</createData>
29+
<createData entity="_emptyCmsPage" stepKey="createCMSPage"/>
30+
<actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/>
31+
</before>
32+
<after>
33+
<deleteData createDataKey="createCategory" stepKey="deleteCreatedCategory"/>
34+
<deleteData createDataKey="createProduct" stepKey="deleteCreatedProduct"/>
35+
<deleteData createDataKey="createCMSPage" stepKey="deleteCMSPage"/>
36+
<actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/>
37+
</after>
38+
39+
<!-- Open the newly created CMS Page for editing -->
40+
<actionGroup ref="NavigateToCreatedCMSPageActionGroup" stepKey="navigateToCreatedCMSPage">
41+
<argument name="CMSPage" value="$$createCMSPage$$"/>
42+
</actionGroup>
43+
44+
<!-- Add the product widget with Page Builder, set it to carousel mode and assign the product category -->
45+
<actionGroup ref="AdminOpenPageBuilderFromContentPreviewOverlayActionGroup" stepKey="openPageBuilderFullScreen"/>
46+
<actionGroup ref="dragContentTypeToStage" stepKey="dragRowToRootContainer">
47+
<argument name="contentType" value="PageBuilderRowContentType"/>
48+
<argument name="containerTargetType" value="PageBuilderRootContainerContentType"/>
49+
</actionGroup>
50+
<actionGroup ref="expandPageBuilderPanelMenuSection" stepKey="expandMenuSectionAddContent">
51+
<argument name="contentType" value="PageBuilderProductsContentType"/>
52+
</actionGroup>
53+
<actionGroup ref="dragContentTypeToStage" stepKey="dragOntoStage">
54+
<argument name="contentType" value="PageBuilderProductsContentType"/>
55+
</actionGroup>
56+
<actionGroup ref="openPageBuilderEditPanel" stepKey="openEditAfterDrop">
57+
<argument name="contentType" value="PageBuilderProductsContentType"/>
58+
</actionGroup>
59+
<actionGroup ref="chooseVisualSelectOption" stepKey="selectAppearance">
60+
<argument name="property" value="PageBuilderProductsProductCarouselAppearance"/>
61+
</actionGroup>
62+
<actionGroup ref="chooseVisualSelectOption" stepKey="chooseSelectProductsBy">
63+
<argument name="property" value="PageBuilderProductsSelectProductsByCategory"/>
64+
</actionGroup>
65+
<actionGroup ref="selectCategoryFromCategoryDropDown" stepKey="selectCategory">
66+
<argument name="category" value="$$createCategory.name$$"/>
67+
</actionGroup>
68+
<actionGroup ref="saveEditPanelSettings" stepKey="saveEditPanelSettings"/>
69+
<actionGroup ref="exitPageBuilderFullScreen" stepKey="exitPageBuilderFullScreenBeforeSave"/>
70+
71+
<!-- Save the CMS Page -->
72+
<actionGroup ref="SaveCmsPageActionGroup" stepKey="saveCMSPage"/>
73+
74+
<!-- Validate Add to Cart on the storefront -->
75+
<actionGroup ref="NavigateToStorefrontForCreatedPageActionGroup" stepKey="navigateToCMSPageStorefront">
76+
<argument name="page" value="$$createCMSPage.identifier$$"/>
77+
</actionGroup>
78+
<actionGroup ref="StorefrontClickProductAddToCartValidateAsyncActionGroup" stepKey="clickProductAddToCartInProductsCMSPageStorefront">
79+
<argument name="product" value="$$createProduct.name$$"/>
80+
</actionGroup>
81+
</test>
82+
</tests>

app/code/Magento/PageBuilder/Test/Mftf/Test/StorefrontReviewWithProductFullWidthLayoutTest.xml

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
<severity value="BLOCKER"/>
1818
<useCaseId value="MC-18071"/>
1919
<testCaseId value="MC-19606"/>
20+
<skip>
21+
<issueId value="MQE-3442"/>
22+
</skip>
2023
<group value="pagebuilder"/>
2124
<group value="pagebuilder-layout"/>
2225
<group value="pagebuilder-fullwidth"/>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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+
<csp_whitelist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Csp:etc/csp_whitelist.xsd">
9+
<policies>
10+
<policy id="connect-src">
11+
<values>
12+
<value id="vimeo" type="host">vimeo.com</value>
13+
</values>
14+
</policy>
15+
<policy id="frame-src">
16+
<values>
17+
<value id="youtube" type="host">*.youtube.com</value>
18+
<value id="youtube_nocookie" type="host">*.youtube-nocookie.com</value>
19+
</values>
20+
</policy>
21+
</policies>
22+
</csp_whitelist>

app/code/Magento/PageBuilder/view/adminhtml/web/js/content-type/video/converter/attribute/videosrc.js

+53-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/content-type/video/converter/attribute/videosrc.ts

+64-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,68 @@ import {DataObject} from "../../../../data-store";
88
import {get} from "../../../../utils/object";
99

1010
export default class VideoSrc implements ConverterInterface {
11+
12+
/**
13+
* Parse YouTube parameters from given URL and Autoplay setting from UI
14+
*
15+
* @param url string
16+
* @param data DataObject
17+
* @returns string
18+
* @private
19+
*/
20+
private static parseYoutubeGetParams(url: string, data: DataObject): string {
21+
const acceptableYouTubeParams = [
22+
"rel",
23+
"controls",
24+
"autoplay",
25+
"mute",
26+
"loop",
27+
"playlist",
28+
"cc_lang_pref",
29+
"cc_load_policy",
30+
"color",
31+
"disablekb",
32+
"end",
33+
"fs",
34+
"hl",
35+
"iv_load_policy",
36+
"modestbranding",
37+
"start",
38+
];
39+
40+
const a = document.createElement("a");
41+
a.href = url;
42+
const urlGetParams: {[key: string]: string} = {};
43+
a.search.slice(a.search.indexOf("?") + 1).split("&").map((hash) => {
44+
const [key, val] = hash.split("=");
45+
urlGetParams[key] = decodeURIComponent(val);
46+
});
47+
48+
const filteredGetParams: {[key: string]: string} = {};
49+
for (const param of acceptableYouTubeParams) {
50+
if (urlGetParams.hasOwnProperty(param)) {
51+
filteredGetParams[param] = urlGetParams[param];
52+
}
53+
}
54+
55+
if (data.autoplay === "true") {
56+
filteredGetParams.autoplay = "1";
57+
filteredGetParams.mute = "1";
58+
} else {
59+
delete filteredGetParams.autoplay;
60+
delete filteredGetParams.mute;
61+
}
62+
63+
const processedGetParams = [];
64+
for (const param in filteredGetParams) {
65+
if (filteredGetParams.hasOwnProperty(param)) {
66+
processedGetParams.push(encodeURI(param + "=" + filteredGetParams[param]));
67+
}
68+
}
69+
70+
return processedGetParams.length > 0 ? "?" + processedGetParams.join("&") : "";
71+
}
72+
1173
/**
1274
* Convert value to internal format
1375
*
@@ -16,6 +78,7 @@ export default class VideoSrc implements ConverterInterface {
1678
*/
1779
public fromDom(value: string): string | object {
1880
value = value.replace(/\?autoplay=1&mute=1/g, "");
81+
value = value.replace(/&autoplay=1&mute=1/g, "");
1982
value = value.replace(/\?title=0&byline=0&portrait=0/g, "");
2083
value = value.replace(/&autoplay=1&autopause=0&muted=1/g, "");
2184
return value;
@@ -41,7 +104,7 @@ export default class VideoSrc implements ConverterInterface {
41104

42105
if (youtubeRegExp.test(value)) {
43106
return "https://www.youtube.com/embed/" + youtubeRegExp.exec(value)[1] +
44-
(data.autoplay === "true" ? "?autoplay=1&mute=1" : "");
107+
VideoSrc.parseYoutubeGetParams(value, data);
45108
} else if (vimeoRegExp.test(value)) {
46109
return "https://player.vimeo.com/video/" + vimeoRegExp.exec(value)[3] +
47110
"?title=0&byline=0&portrait=0" + (data.autoplay === "true" ? "&autoplay=1&autopause=0&muted=1" : "");

app/code/Magento/PageBuilder/view/base/requirejs-config.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,16 @@ var config = {
1010
'jarallax': 'Magento_PageBuilder/js/resource/jarallax/jarallax',
1111
'jarallaxVideo': 'Magento_PageBuilder/js/resource/jarallax/jarallax-video',
1212
'Magento_PageBuilder/js/resource/vimeo/player': 'vimeo/player',
13-
'Magento_PageBuilder/js/resource/vimeo/vimeo-wrapper': 'vimeo/vimeo-wrapper'
13+
'Magento_PageBuilder/js/resource/vimeo/vimeo-wrapper': 'vimeo/vimeo-wrapper',
14+
'jarallax-wrapper': 'Magento_PageBuilder/js/resource/jarallax/jarallax-wrapper'
1415
}
1516
},
1617
shim: {
1718
'Magento_PageBuilder/js/resource/slick/slick': {
1819
deps: ['jquery']
1920
},
2021
'Magento_PageBuilder/js/resource/jarallax/jarallax-video': {
21-
deps: ['jarallax', 'vimeoWrapper']
22+
deps: ['jarallax-wrapper', 'vimeoWrapper']
2223
}
2324
}
2425
};

0 commit comments

Comments
 (0)