Skip to content

Commit d52eef3

Browse files
committed
Merge remote-tracking branch 'magento-l3/ACP2E-1751' into MAR212023_PR_sarmistha
2 parents 42d96f3 + 7425789 commit d52eef3

File tree

2 files changed

+105
-1
lines changed
  • app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer
  • dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/Column/Renderer

2 files changed

+105
-1
lines changed

app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/Action.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*
1616
* @api
1717
* @deprecated 100.2.0 in favour of UI component implementation
18+
* @see don't recommend this approach in favour of UI component implementation
1819
* @since 100.0.2
1920
*/
2021
class Action extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\Text
@@ -132,14 +133,16 @@ protected function _toLinkHtml($action, \Magento\Framework\DataObject $row)
132133
}
133134

134135
if (empty($action['id'])) {
135-
$action['id'] = 'id' .$this->random->getRandomString(10);
136+
$action['id'] = 'id' . $this->random->getRandomString(10);
136137
}
137138
$actionAttributes->setData($action);
138139
$onclick = $actionAttributes->getData('onclick');
139140
$style = $actionAttributes->getData('style');
140141
$actionAttributes->unsetData(['onclick', 'style']);
141142
$html = '<a ' . $actionAttributes->serialize() . '>' . $actionCaption . '</a>';
142143
if ($onclick) {
144+
// phpcs:ignore Magento2.Functions.DiscouragedFunction
145+
$onclick = html_entity_decode($onclick);
143146
$html .= $this->secureHtmlRenderer->renderEventListenerAsTag('onclick', $onclick, "#{$action['id']}");
144147
}
145148
if ($style) {
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
/**
5+
* Copyright © Magento, Inc. All rights reserved.
6+
* See COPYING.txt for license details.
7+
*/
8+
namespace Magento\Backend\Block\Widget\Grid\Column\Renderer;
9+
10+
use Magento\Backend\Block\Widget\Grid\Column;
11+
use Magento\Framework\DataObject;
12+
use Magento\Framework\Phrase;
13+
use Magento\Framework\Phrase\RendererInterface;
14+
use Magento\TestFramework\Helper\Bootstrap;
15+
use Magento\TestFramework\ObjectManager;
16+
17+
class ActionTest extends \PHPUnit\Framework\TestCase
18+
{
19+
/**
20+
* @var ObjectManager
21+
*/
22+
private $objectManager;
23+
24+
/**
25+
* @var RendererInterface
26+
*/
27+
private $origRenderer;
28+
29+
protected function setUp(): void
30+
{
31+
$this->objectManager = Bootstrap::getObjectManager();
32+
$this->origRenderer = Phrase::getRenderer();
33+
/** @var RendererInterface|PHPUnit\Framework\MockObject_MockObject $rendererMock */
34+
$rendererMock = $this->getMockForAbstractClass(RendererInterface::class);
35+
$rendererMock->expects($this->any())
36+
->method('render')
37+
->willReturnCallback(
38+
function ($input) {
39+
return end($input) . ' translated';
40+
}
41+
);
42+
Phrase::setRenderer($rendererMock);
43+
}
44+
45+
protected function tearDown(): void
46+
{
47+
Phrase::setRenderer($this->origRenderer);
48+
}
49+
50+
/**
51+
* @param array $columnData
52+
* @param array $rowData
53+
* @param string $expected
54+
* @dataProvider renderDataProvider
55+
*/
56+
public function testRender($columnData, $rowData, $expected)
57+
{
58+
/** @var Text $renderer */
59+
$renderer = $this->objectManager->create(Action::class);
60+
/** @var Column $column */
61+
$column = $this->objectManager->create(
62+
Column::class,
63+
[
64+
'data' => $columnData
65+
]
66+
);
67+
/** @var DataObject $row */
68+
$row = $this->objectManager->create(
69+
DataObject::class,
70+
[
71+
'data' => $rowData
72+
]
73+
);
74+
$this->assertStringContainsString(
75+
$expected,
76+
$renderer->setColumn($column)->render($row)
77+
);
78+
}
79+
80+
/**
81+
* @return array
82+
*/
83+
public function renderDataProvider(): array
84+
{
85+
return [
86+
[
87+
[
88+
'index' => 'type',
89+
'type' => 'action',
90+
'actions' => [
91+
'rollback_action'=> [
92+
'caption' => 'Rollback', 'href'=>'#', 'onclick' => 'alert("test")'
93+
]
94+
]
95+
],
96+
[],
97+
'alert("test")'
98+
],
99+
];
100+
}
101+
}

0 commit comments

Comments
 (0)