Skip to content

Commit eb662db

Browse files
committed
Merge remote-tracking branch 'adobe-commerce-tier-4/ACP2E-3286' into Tier4-Kings-PR-10-14-2024
2 parents a4cf5e6 + 96351a6 commit eb662db

File tree

2 files changed

+71
-7
lines changed

2 files changed

+71
-7
lines changed

app/code/Magento/Catalog/view/frontend/web/js/related-products.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,12 @@ define([
4747
* @return {Boolean} - Prevent default event action and event propagation.
4848
*/
4949
_selectAllRelated: function (e) {
50-
var innerHTML = this.options.relatedProductsCheckFlag ?
51-
this.options.selectAllMessage : this.options.unselectAllMessage;
50+
let isChecked = this.options.relatedProductsCheckFlag;
5251

53-
$(e.target).html(innerHTML);
54-
$(this.options.relatedCheckbox + ':visible').attr(
55-
'checked',
56-
this.options.relatedProductsCheckFlag = !this.options.relatedProductsCheckFlag
57-
);
52+
$(e.target).html(isChecked ? this.options.selectAllMessage : this.options.unselectAllMessage);
53+
this.options.relatedProductsCheckFlag = !isChecked;
54+
55+
$(this.options.relatedCheckbox + ':visible').prop('checked', this.options.relatedProductsCheckFlag);
5856
this._addRelatedToProduct();
5957

6058
return false;
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/**
2+
* Copyright 2024 Adobe
3+
* All Rights Reserved.
4+
*/
5+
define([
6+
'jquery',
7+
'Magento_Catalog/js/related-products'
8+
], function ($) {
9+
'use strict';
10+
11+
describe('Related Products Widget', function () {
12+
var widgetElement,
13+
selectAllLinkSelector = '[data-role="select-all"]',
14+
relatedCheckboxSelector = '.related-checkbox';
15+
16+
beforeEach(function () {
17+
// Create elements and initialize widget manually
18+
widgetElement = $('<div>')
19+
.append('<a href="#" data-role="select-all">select all</a>')
20+
.append('<input type="checkbox" class="related-checkbox" value="1">')
21+
.append('<input type="checkbox" class="related-checkbox" value="2">')
22+
.append('<input type="hidden" id="related-products-field">')
23+
.appendTo('body');
24+
25+
// Initialize the widget
26+
widgetElement.relatedProducts();
27+
});
28+
29+
afterEach(function () {
30+
widgetElement.remove();
31+
});
32+
33+
it('should select all related products when "Select All" is clicked', function () {
34+
$(selectAllLinkSelector).trigger('click');
35+
36+
// Verify all checkboxes are checked
37+
expect($(relatedCheckboxSelector + ':checked').length).toBe(2);
38+
});
39+
40+
it('should unselect all related products when "Unselect All" is clicked', function () {
41+
$(selectAllLinkSelector).trigger('click');
42+
$(selectAllLinkSelector).trigger('click');
43+
44+
// Verify all checkboxes are unchecked
45+
expect($(relatedCheckboxSelector + ':checked').length).toBe(0);
46+
});
47+
48+
it('should select all products, including those manually selected, when "Select All" is clicked',
49+
function () {
50+
$(relatedCheckboxSelector).first().prop('checked', true).trigger('click');
51+
$(selectAllLinkSelector).trigger('click');
52+
53+
// Verify all products are selected, including the manually selected one
54+
expect($(relatedCheckboxSelector + ':checked').length).toBe(2);
55+
});
56+
57+
it('should unselect all products when "Unselect All" is clicked after manual selection', function () {
58+
$(relatedCheckboxSelector).first().prop('checked', true).trigger('click');
59+
$(selectAllLinkSelector).trigger('click');
60+
$(selectAllLinkSelector).trigger('click');
61+
62+
// Verify all checkboxes are unchecked
63+
expect($(relatedCheckboxSelector + ':checked').length).toBe(0);
64+
});
65+
});
66+
});

0 commit comments

Comments
 (0)