Skip to content

Commit 6611218

Browse files
MAGETWO-56071: [Performance] Unnecessary AJAX request for product reviews on product details page
1 parent 732d445 commit 6611218

File tree

3 files changed

+92
-3
lines changed

3 files changed

+92
-3
lines changed

app/code/Magento/Review/view/frontend/templates/review.phtml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
{
1414
"*": {
1515
"Magento_Review/js/process-reviews": {
16-
"productReviewUrl": "<?php echo $block->escapeJs($block->escapeUrl($block->getProductReviewUrl())); ?>"
16+
"productReviewUrl": "<?php echo $block->escapeJs($block->escapeUrl($block->getProductReviewUrl())); ?>",
17+
"reviewsTabSelector": "#tab-label-reviews"
1718
}
1819
}
1920
}

app/code/Magento/Review/view/frontend/web/js/process-reviews.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ define([
1111
$.ajax({
1212
url: url,
1313
cache: true,
14-
dataType: 'html'
14+
dataType: 'html',
15+
showLoader: true,
16+
loaderContext: $('.product.data.items')
1517
}).done(function (data) {
1618
$('#product-review-container').html(data);
1719
$('[data-role="product-review"] .pages a').each(function (index, element) {
@@ -30,7 +32,17 @@ define([
3032
}
3133

3234
return function (config, element) {
33-
processReviews(config.productReviewUrl);
35+
var reviewTab = $(config.reviewsTabSelector);
36+
var requiredReviewTabRole = 'tab';
37+
38+
if (reviewTab.attr('role') === requiredReviewTabRole && reviewTab.hasClass('active')) {
39+
processReviews(config.productReviewUrl);
40+
} else {
41+
reviewTab.one('beforeOpen', function () {
42+
processReviews(config.productReviewUrl);
43+
});
44+
}
45+
3446
$(function () {
3547
$('.product-info-main .reviews-actions a').click(function (event) {
3648
event.preventDefault();
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/**
2+
* Copyright © 2016 Magento. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
/*eslint max-nested-callbacks: 0*/
7+
/*jscs:disable jsDoc*/
8+
9+
define([
10+
'jquery',
11+
'Magento_Review/js/process-reviews'
12+
], function ($, reviewProcessor) {
13+
'use strict';
14+
15+
describe('Test product page reviews processor', function () {
16+
var element,
17+
config = {
18+
reviewsTabSelector: '#review-tab'
19+
};
20+
21+
beforeEach(function () {
22+
element = $('<div id="review-tab" role="tab"></div>');
23+
24+
$('body').append(element);
25+
});
26+
27+
afterEach(function () {
28+
element.remove();
29+
});
30+
31+
it('Should automatically load reviews after page load if review tab is active', function () {
32+
element.addClass('active');
33+
34+
spyOn($, 'ajax').and.callFake(function () {
35+
var d = $.Deferred();
36+
37+
d.promise().complete = function () {};
38+
39+
return d.promise();
40+
});
41+
42+
reviewProcessor(config, null);
43+
44+
expect($.ajax).toHaveBeenCalled();
45+
});
46+
47+
it('Should not automatically load reviews after page load if review tab is not active', function () {
48+
spyOn($, 'ajax').and.callFake(function () {
49+
var d = $.Deferred();
50+
51+
d.promise().complete = function () {};
52+
53+
return d.promise();
54+
});
55+
56+
reviewProcessor(config, null);
57+
58+
expect($.ajax).not.toHaveBeenCalled();
59+
});
60+
61+
it('Should load reviews if non active review tab was opened', function () {
62+
spyOn($, 'ajax').and.callFake(function () {
63+
var d = $.Deferred();
64+
65+
d.promise().complete = function () {};
66+
67+
return d.promise();
68+
});
69+
70+
reviewProcessor(config, null);
71+
element.trigger('beforeOpen');
72+
73+
expect($.ajax).toHaveBeenCalled();
74+
});
75+
});
76+
});

0 commit comments

Comments
 (0)