Skip to content

Commit 40b649f

Browse files
committed
ACP2E-1854: Attribute that is not searchable but used in Search Results works incorrectly
- implemented solution and unit tests
1 parent 12da28c commit 40b649f

File tree

4 files changed

+166
-19
lines changed

4 files changed

+166
-19
lines changed

app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Front.php

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -178,29 +178,35 @@ protected function _prepareForm()
178178
'adminhtml_catalog_product_attribute_edit_frontend_prepare_form',
179179
['form' => $form, 'attribute' => $attributeObject]
180180
);
181+
//here
182+
$dependencies = $this->getLayout()->createBlock(
183+
\Magento\Backend\Block\Widget\Form\Element\Dependence::class
184+
)->addFieldMap(
185+
"is_html_allowed_on_front",
186+
'html_allowed_on_front'
187+
)->addFieldMap(
188+
"frontend_input",
189+
'frontend_input_type'
190+
)->addFieldMap(
191+
"is_searchable",
192+
'searchable'
193+
)->addFieldMap(
194+
"is_visible_in_advanced_search",
195+
'advanced_search'
196+
)->addFieldDependence(
197+
'advanced_search',
198+
'searchable',
199+
'1'
200+
);
201+
$this->_eventManager->dispatch(
202+
'adminhtml_catalog_product_attribute_edit_frontend_prepare_field_dependencies',
203+
['dependencies' => $dependencies]
204+
);
181205

182206
// define field dependencies
183207
$this->setChild(
184208
'form_after',
185-
$this->getLayout()->createBlock(
186-
\Magento\Backend\Block\Widget\Form\Element\Dependence::class
187-
)->addFieldMap(
188-
"is_html_allowed_on_front",
189-
'html_allowed_on_front'
190-
)->addFieldMap(
191-
"frontend_input",
192-
'frontend_input_type'
193-
)->addFieldMap(
194-
"is_searchable",
195-
'searchable'
196-
)->addFieldMap(
197-
"is_visible_in_advanced_search",
198-
'advanced_search'
199-
)->addFieldDependence(
200-
'advanced_search',
201-
'searchable',
202-
'1'
203-
)
209+
$dependencies
204210
);
205211

206212
$this->setForm($form);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
/**
3+
* Product attribute edit form observer
4+
*
5+
* Copyright © Magento, Inc. All rights reserved.
6+
* See COPYING.txt for license details.
7+
*/
8+
9+
namespace Magento\LayeredNavigation\Observer\Edit\Tab\Front;
10+
11+
use Magento\Framework\Module\Manager;
12+
use Magento\Framework\Event\ObserverInterface;
13+
use Magento\Framework\Event\Observer;
14+
use Magento\Framework\View\Element\BlockInterface;
15+
16+
class ProductAttributeFormBuildFormFieldDependenciesObserver implements ObserverInterface
17+
{
18+
/**
19+
* @var Manager
20+
*/
21+
protected Manager $moduleManager;
22+
23+
/**
24+
* @param Manager $moduleManager
25+
*/
26+
public function __construct(Manager $moduleManager)
27+
{
28+
$this->moduleManager = $moduleManager;
29+
}
30+
31+
/**
32+
* Adds field related dependencies in the administrator attribute edit form
33+
*
34+
* @param Observer $observer
35+
* @return void
36+
*/
37+
public function execute(Observer $observer)
38+
{
39+
if (!$this->moduleManager->isOutputEnabled('Magento_LayeredNavigation')) {
40+
return;
41+
}
42+
/** @var BlockInterface $dependencies */
43+
$dependencies = $observer->getDependencies();
44+
$dependencies->addFieldMap('is_filterable_in_search', 'filterable_in_search');
45+
$dependencies->addFieldDependence(
46+
'filterable_in_search',
47+
'searchable',
48+
'1'
49+
);
50+
}
51+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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\LayeredNavigation\Test\Unit\Observer\Edit\Tab\Front;
10+
11+
use Magento\Backend\Block\Widget\Form\Element\Dependence;
12+
use Magento\Framework\Event\Observer;
13+
use Magento\Framework\Module\Manager;
14+
use Magento\LayeredNavigation\Observer\Edit\Tab\Front\ProductAttributeFormBuildFormFieldDependenciesObserver;
15+
use PHPUnit\Framework\MockObject\MockObject;
16+
use PHPUnit\Framework\TestCase;
17+
18+
class ProductAttributeFormBuildFormFieldDependenciesObserverTest extends TestCase
19+
{
20+
/**
21+
* @var MockObject|Manager
22+
*/
23+
private Manager $moduleManager;
24+
/**
25+
* @var MockObject|Observer
26+
*/
27+
private Observer $event;
28+
29+
/**
30+
* @var MockObject|ProductAttributeFormBuildFormFieldDependenciesObserver
31+
*/
32+
private ProductAttributeFormBuildFormFieldDependenciesObserver $observer;
33+
34+
/**
35+
* @inheritDoc
36+
*/
37+
protected function setUp(): void
38+
{
39+
$this->moduleManager = $this->createMock(Manager::class);
40+
$this->event = $this->getMockBuilder(Observer::class)
41+
->disableOriginalConstructor()
42+
->addMethods(['getDependencies'])
43+
->getMock();
44+
$this->observer = new ProductAttributeFormBuildFormFieldDependenciesObserver($this->moduleManager);
45+
46+
parent::setUp();
47+
}
48+
49+
/**
50+
* Test case when module output is disabled
51+
*/
52+
public function testExecuteDisabled(): void
53+
{
54+
$this->moduleManager->expects($this->once())
55+
->method('isOutputEnabled')
56+
->with('Magento_LayeredNavigation')
57+
->willReturn(false);
58+
59+
$this->event->expects($this->never())->method('getDependencies');
60+
61+
$this->observer->execute($this->event);
62+
}
63+
64+
/**
65+
* Test case when module output is enabled
66+
*/
67+
public function testExecuteEnabled(): void
68+
{
69+
$this->moduleManager->expects($this->once())
70+
->method('isOutputEnabled')
71+
->with('Magento_LayeredNavigation')
72+
->willReturn(true);
73+
74+
$dependencies = $this->createMock(Dependence::class);
75+
$dependencies->expects($this->once())
76+
->method('addFieldMap')
77+
->with('is_filterable_in_search', 'filterable_in_search');
78+
$dependencies->expects($this->once())
79+
->method('addFieldDependence')
80+
->with('filterable_in_search', 'searchable', '1');
81+
$this->event->expects($this->once())
82+
->method('getDependencies')
83+
->willReturn($dependencies);
84+
85+
$this->observer->execute($this->event);
86+
}
87+
}

app/code/Magento/LayeredNavigation/etc/adminhtml/events.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,7 @@
1212
<event name="product_attribute_grid_build">
1313
<observer name="layeredNavigation" instance="Magento\LayeredNavigation\Observer\Grid\ProductAttributeGridBuildObserver" />
1414
</event>
15+
<event name="adminhtml_catalog_product_attribute_edit_frontend_prepare_field_dependencies">
16+
<observer name="layeredNavigation" instance="Magento\LayeredNavigation\Observer\Edit\Tab\Front\ProductAttributeFormBuildFormFieldDependenciesObserver" />
17+
</event>
1518
</config>

0 commit comments

Comments
 (0)