Skip to content

Commit 4aaa29e

Browse files
Merge pull request #29 from magento-commerce/develop
Sync develop
2 parents 404f98b + 19d5bbd commit 4aaa29e

File tree

7 files changed

+195
-10
lines changed

7 files changed

+195
-10
lines changed

app/code/Magento/AwsS3PageBuilder/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "magento/module-aws-s-3-page-builder",
2+
"name": "magento/module-aws-s3-page-builder",
33
"description": "Aws S3 Page Builder module",
44
"require": {
55
"magento/framework": "*",

app/code/Magento/PageBuilder/view/frontend/page_layout/product-full-width.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
<block class="Magento\Framework\View\Element\Template" name="product.attributes.wrapper" template="Magento_PageBuilder::catalog/product/view/section_wrapper.phtml">
3838
<arguments>
3939
<argument name="title" translate="true" xsi:type="string">More Information</argument>
40+
<argument name="section_id" xsi:type="string">additional</argument>
4041
</arguments>
4142
<!-- Create a new instance of attributes which excludes Page Builder attributes -->
4243
<block class="Magento\PageBuilder\Block\Catalog\Block\Product\View\Attributes" name="product.attributes.exclude.pagebuilder" as="additional" template="Magento_Catalog::product/view/attributes.phtml">
@@ -48,6 +49,7 @@
4849
<block class="Magento\Framework\View\Element\Template" name="product.reviews.wrapper" after="product.attributes.wrapper" template="Magento_PageBuilder::catalog/product/view/section_wrapper.phtml">
4950
<arguments>
5051
<argument name="title" translate="true" xsi:type="string">Reviews</argument>
52+
<argument name="section_id" xsi:type="string">reviews</argument>
5153
</arguments>
5254
<block class="Magento\Review\Block\Product\View\ListView" name="product.info.product_additional_data.wrapper" template="Magento_Review::product/view/list.phtml" ifconfig="catalog/review/active">
5355
<arguments>

app/code/Magento/PageBuilder/view/frontend/templates/catalog/product/view/section_wrapper.phtml

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,20 @@
77
/**
88
* Wrapper for product sections to include title
99
*
10-
* @var \Magento\Framework\View\Element\Template $block
10+
* @var Template $block
11+
* @var Escaper $escaper
1112
*/
13+
14+
use Magento\Framework\Escaper;
15+
use Magento\Framework\View\Element\Template;
16+
1217
$childHtml = $block->getChildHtml();
18+
$sectionId = $block->getSectionId();
19+
$sectionIdAttribute = $sectionId ? ' id="' . $escaper->escapeHtmlAttr($sectionId) . '"' : '';
1320
?>
14-
<?php if (trim($childHtml) !== "") : ?>
15-
<div class="product-full-width-section">
16-
<h2 class="product-section-title"><?= $block->escapeHtml($block->getTitle()); ?></h2>
21+
<?php if (trim($childHtml) !== ""): ?>
22+
<div class="product-full-width-section"<?= /* @noEscape */ $sectionIdAttribute ?>>
23+
<h2 class="product-section-title"><?= $escaper->escapeHtml($block->getTitle()); ?></h2>
1724
<?= $block->getChildHtml(); ?>
1825
</div>
19-
<?php endif; ?>
26+
<?php endif; ?>

app/code/Magento/PageBuilderAdminAnalytics/view/adminhtml/web/js/page-builder/events-mixin.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ define(['underscore', 'Magento_PageBuilderAdminAnalytics/js/page-builder/event-b
1111
var originalTarget = target.trigger,
1212
isAdminAnalyticsEnabled,
1313
event,
14-
hasPageBuilderBeenUsed = false;
14+
hasPageBuilderBeenUsed = false,
15+
delayedPush;
1516

1617
/**
1718
* Invokes custom code to track information regarding Page Builder usage
@@ -40,8 +41,13 @@ define(['underscore', 'Magento_PageBuilderAdminAnalytics/js/page-builder/event-b
4041
event = EventBuilder.build(name, args);
4142

4243
if (isAdminAnalyticsEnabled && !_.isUndefined(window.digitalData.event) && !_.isUndefined(event)) {
43-
window.digitalData.event.push(event);
44-
window._satellite.track('event');
44+
delayedPush = setInterval(function (object) {
45+
if (_.isArray(window.digitalData.event)) {
46+
window.digitalData.event.push(object);
47+
window._satellite.track('event');
48+
clearInterval(delayedPush);
49+
}
50+
}, 500, event);
4551
}
4652
};
4753

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\PageBuilder\Block\Catalog\Product;
9+
10+
use Magento\Framework\View\LayoutInterface;
11+
use Magento\Review\Block\Product\Review;
12+
use Magento\TestFramework\Helper\Bootstrap;
13+
use Magento\Framework\View\Element\Template;
14+
use PHPUnit\Framework\TestCase;
15+
16+
/**
17+
* PageBuilder Product view integration tests.
18+
*
19+
* @magentoAppArea frontend
20+
*/
21+
class ViewTest extends TestCase
22+
{
23+
/**
24+
* @var string
25+
*/
26+
private $wrapperTemplatePath = 'Magento_PageBuilder::catalog/product/view/%s';
27+
28+
/**
29+
* @var LayoutInterface
30+
*/
31+
private $layout;
32+
33+
/**
34+
* @inheritDoc
35+
*/
36+
protected function setUp(): void
37+
{
38+
$this->layout = Bootstrap::getObjectManager()->get(LayoutInterface::class);
39+
}
40+
41+
/**
42+
* Check that Section Wrapper page contains section ID if it was provided.
43+
*
44+
* @param string $sectionId
45+
* @return void
46+
* @dataProvider sectionWrapperDataProvider
47+
*/
48+
public function testSectionWrapperWithProvidedSectionId(string $sectionId): void
49+
{
50+
$wrapperBlock = $this->prepareSectionWrapperBlock();
51+
$wrapperBlock->setSectionId($sectionId);
52+
53+
$this->assertStringContainsString(sprintf('id="%s"', $sectionId), $wrapperBlock->toHtml());
54+
}
55+
56+
/**
57+
* Check that Section Wrapper page does NOT contain section ID if it was NOT provided.
58+
*
59+
* @param string $sectionId
60+
* @return void
61+
* @dataProvider sectionWrapperDataProvider
62+
*/
63+
public function testSectionWrapperWithoutSectionId(string $sectionId): void
64+
{
65+
$wrapperBlock = $this->prepareSectionWrapperBlock();
66+
67+
$this->assertStringNotContainsString(sprintf('id="%s"', $sectionId), $wrapperBlock->toHtml());
68+
}
69+
70+
/**
71+
* DataProvider for testSectionWrapper().
72+
*
73+
* @return array
74+
*/
75+
public function sectionWrapperDataProvider(): array
76+
{
77+
return [
78+
['description'],
79+
['additional'],
80+
['reviews'],
81+
];
82+
}
83+
84+
/**
85+
* Create and retrieve Section Wrapper block instance.
86+
*
87+
* @return Template
88+
*/
89+
private function prepareSectionWrapperBlock(): Template
90+
{
91+
/** @var Template $wrapperBlock */
92+
$wrapperBlock = $this->layout->createBlock(Template::class);
93+
$wrapperBlock->setTemplate(
94+
sprintf(
95+
$this->wrapperTemplatePath,
96+
'section_wrapper.phtml'
97+
)
98+
);
99+
/** @var Review $childReviewBlock */
100+
$childReviewBlock = $this->layout->createBlock(Review::class);
101+
$childReviewBlock->setTemplate('Magento_Review::review.phtml');
102+
$wrapperBlock->setChild('child.review', $childReviewBlock);
103+
104+
return $wrapperBlock;
105+
}
106+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/**
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
/* eslint-disable max-nested-callbacks */
7+
define([
8+
'squire'
9+
], function (Squire) {
10+
'use strict';
11+
12+
var injector = new Squire(),
13+
eventObject = {
14+
field: 'value'
15+
},
16+
mocks = {
17+
'Magento_PageBuilderAdminAnalytics/js/page-builder/event-builder': {
18+
build: jasmine.createSpy().and.returnValue(eventObject)
19+
}
20+
},
21+
mixin,
22+
uiEvents,
23+
empty = {},
24+
origSatellite = window._satellite;
25+
26+
beforeEach(function (done) {
27+
injector.mock(mocks);
28+
injector.require([
29+
'Magento_PageBuilderAdminAnalytics/js/page-builder/events-mixin',
30+
'uiEvents'
31+
], function (Mixin, UiEvents) {
32+
mixin = Mixin;
33+
uiEvents = UiEvents;
34+
done();
35+
});
36+
window.digitalData = {
37+
event: empty
38+
};
39+
window._satellite = {
40+
track: jasmine.createSpy()
41+
};
42+
});
43+
44+
afterEach(function () {
45+
try {
46+
injector.clean();
47+
injector.remove();
48+
window._satellite = origSatellite;
49+
} catch (e) {
50+
}
51+
});
52+
53+
describe('Magento_PageBuilderAdminAnalytics/js/page-builder/events-mixin', function () {
54+
it('Check event is pushed to array', function (done) {
55+
mixin(uiEvents).trigger('name', 'arg');
56+
expect(window.digitalData.event).toBe(empty);
57+
window.digitalData.event = [];
58+
setTimeout(function () {
59+
expect(window.digitalData.event).toEqual([eventObject]);
60+
done();
61+
}, 1000);
62+
});
63+
});
64+
});

dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/composer_root_modules_pagebuilder.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ magento/module-page-builder-analytics
33
magento/module-page-builder-admin-analytics
44
magento/module-catalog-page-builder-analytics
55
magento/module-cms-page-builder-analytics
6-
magento/module-aws-s-3-page-builder
6+
magento/module-aws-s3-page-builder

0 commit comments

Comments
 (0)