Skip to content

Commit 3837c4c

Browse files
Merge pull request #5633 from magento-borg/MC-22963
[CIA] Identify and Refactor GET requests which modify data
2 parents cef94f0 + bf9d533 commit 3837c4c

File tree

13 files changed

+178
-17
lines changed

13 files changed

+178
-17
lines changed

app/code/Magento/Multishipping/Controller/Checkout/RemoveItem.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,14 @@
66
*/
77
namespace Magento\Multishipping\Controller\Checkout;
88

9-
class RemoveItem extends \Magento\Multishipping\Controller\Checkout
9+
use Magento\Framework\App\Action\HttpPostActionInterface;
10+
11+
/**
12+
* Class RemoveItem
13+
*
14+
* Removes multishipping items
15+
*/
16+
class RemoveItem extends \Magento\Multishipping\Controller\Checkout implements HttpPostActionInterface
1017
{
1118
/**
1219
* Multishipping checkout remove item action

app/code/Magento/Multishipping/view/frontend/templates/checkout/addresses.phtml

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
* See COPYING.txt for license details.
55
*/
66

7-
// phpcs:disable Magento2.Files.LineLength
8-
7+
// phpcs:disable Generic.Files.LineLength
8+
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundHelper
99
?>
1010
<?php
1111
/**
@@ -43,8 +43,8 @@
4343
</tr>
4444
</thead>
4545
<tbody>
46-
<?php foreach ($block->getItems() as $_index => $_item) : ?>
47-
<?php if ($_item->getQuoteItem()) : ?>
46+
<?php foreach ($block->getItems() as $_index => $_item): ?>
47+
<?php if ($_item->getQuoteItem()): ?>
4848
<tr>
4949
<td class="col product" data-th="<?= $block->escapeHtml(__('Product')) ?>">
5050
<?= $block->getItemHtml($_item->getQuoteItem()) ?>
@@ -69,11 +69,11 @@
6969
</div>
7070
</td>
7171
<td class="col address" data-th="<?= $block->escapeHtml(__('Send To')) ?>">
72-
<?php if ($_item->getProduct()->getIsVirtual()) : ?>
72+
<?php if ($_item->getProduct()->getIsVirtual()): ?>
7373
<div class="applicable">
7474
<?= $block->escapeHtml(__('A shipping selection is not applicable.')) ?>
7575
</div>
76-
<?php else : ?>
76+
<?php else: ?>
7777
<div class="field address">
7878
<label for="ship_<?= $block->escapeHtml($_index) ?>_<?= $block->escapeHtml($_item->getQuoteItemId()) ?>_address"
7979
class="label">
@@ -86,8 +86,12 @@
8686
<?php endif; ?>
8787
</td>
8888
<td class="col actions" data-th="<?= $block->escapeHtml(__('Actions')) ?>">
89-
<a href="<?= $block->escapeUrl($block->getItemDeleteUrl($_item)) ?>"
89+
<a href="#"
9090
title="<?= $block->escapeHtml(__('Remove Item')) ?>"
91+
data-post='<?= /* @noEscape */
92+
$this->helper(\Magento\Framework\Data\Helper\PostHelper::class)
93+
->getPostData($block->getItemDeleteUrl($_item))
94+
?>'
9195
class="action delete"
9296
data-multiship-item-remove="">
9397
<span><?= $block->escapeHtml(__('Remove item')) ?></span>
@@ -106,7 +110,7 @@
106110
class="action primary continue<?= $block->isContinueDisabled() ? ' disabled' : '' ?>"
107111
data-role="can-continue"
108112
data-flag="1"
109-
<?php if ($block->isContinueDisabled()) : ?>
113+
<?php if ($block->isContinueDisabled()): ?>
110114
disabled="disabled"
111115
<?php endif; ?>>
112116
<span><?= $block->escapeHtml(__('Go to Shipping Information')) ?></span>

app/code/Magento/Search/Block/Adminhtml/Synonyms/Edit/DeleteButton.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
use Magento\Framework\View\Element\UiComponent\Control\ButtonProviderInterface;
99

1010
/**
11-
* Class DeleteButton
11+
* Delete Synonyms Group Button Class
1212
*/
1313
class DeleteButton extends GenericButton implements ButtonProviderInterface
1414
{
1515
/**
16+
* Delete Button Data
17+
*
1618
* @return array
1719
*/
1820
public function getButtonData()
@@ -24,14 +26,16 @@ public function getButtonData()
2426
'class' => 'delete',
2527
'on_click' => 'deleteConfirm(\''
2628
. __('Are you sure you want to delete this synonym group?')
27-
. '\', \'' . $this->getDeleteUrl() . '\')',
29+
. '\', \'' . $this->getDeleteUrl() . '\', {data: {}})',
2830
'sort_order' => 20,
2931
];
3032
}
3133
return $data;
3234
}
3335

3436
/**
37+
* Delete Url
38+
*
3539
* @return string
3640
*/
3741
public function getDeleteUrl()

app/code/Magento/Search/Controller/Adminhtml/Synonyms/Delete.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66

77
namespace Magento\Search\Controller\Adminhtml\Synonyms;
88

9+
use Magento\Framework\App\Action\HttpPostActionInterface;
10+
911
/**
1012
* Delete Controller
1113
*/
12-
class Delete extends \Magento\Backend\App\Action
14+
class Delete extends \Magento\Backend\App\Action implements HttpPostActionInterface
1315
{
1416
/**
1517
* Authorization level of a basic admin session

app/code/Magento/Search/Test/Unit/Ui/Component/Listing/Column/SynonymActionsTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ public function testPrepareDataSourceWithItems()
112112
self::STUB_SYNONYM_GROUP_ID
113113
)
114114
],
115+
'post' => true
115116
],
116117
'edit' => [
117118
'href' => sprintf(

app/code/Magento/Search/Ui/Component/Listing/Column/SynonymActions.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public function prepareDataSource(array $dataSource)
6464
'title' => __('Delete'),
6565
'message' => __('Are you sure you want to delete synonym group with id: %1?', $item['group_id'])
6666
],
67+
'post' => true
6768
];
6869
$item[$name]['edit'] = [
6970
'href' => $this->urlBuilder->getUrl(self::SYNONYM_URL_PATH_EDIT, ['group_id' => $item['group_id']]),

app/code/Magento/Tax/Block/Adminhtml/Rate/Toolbar/Save.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ protected function _prepareLayout()
133133
) . '\', \'' . $this->getUrl(
134134
'tax/*/delete',
135135
['rate' => $rate]
136-
) . '\')',
136+
) . '\', {data: {}})',
137137
'class' => 'delete'
138138
]
139139
);

app/code/Magento/Tax/Controller/Adminhtml/Rate/Delete.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88

99
use Magento\Framework\Exception\NoSuchEntityException;
1010
use Magento\Framework\Controller\ResultFactory;
11+
use Magento\Framework\App\Action\HttpPostActionInterface;
1112

12-
class Delete extends \Magento\Tax\Controller\Adminhtml\Rate
13+
class Delete extends \Magento\Tax\Controller\Adminhtml\Rate implements HttpPostActionInterface
1314
{
1415
/**
1516
* Delete Rate and Data
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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\Search\Controller\Adminhtml\Synonyms;
9+
10+
use Magento\Framework\App\Request\Http as HttpRequest;
11+
use Magento\Search\Model\SynonymGroup;
12+
use Magento\TestFramework\Helper\Bootstrap;
13+
use Magento\TestFramework\TestCase\AbstractBackendController;
14+
use Magento\Search\Model\ResourceModel\SynonymGroup\Collection;
15+
16+
/**
17+
* Test for class \Magento\Search\Controller\Adminhtml\Synonyms\Delete
18+
*
19+
* @magentoAppArea adminhtml
20+
*/
21+
class DeleteTest extends AbstractBackendController
22+
{
23+
24+
/** Test Delete Synonyms
25+
* @magentoAppIsolation enabled
26+
* @magentoDbIsolation enabled
27+
* @magentoDataFixture Magento/Search/_files/synonym_group.php
28+
* @return void
29+
*/
30+
public function testExecute(): void
31+
{
32+
$synonymGroupModel=$this->getTestFixture();
33+
$this->getRequest()->setMethod(HttpRequest::METHOD_POST);
34+
$this->getRequest()->setPostValue(['group_id' => $synonymGroupModel->getGroupId()]);
35+
$this->dispatch('backend/search/synonyms/delete');
36+
$this->assertSessionMessages($this->equalTo([(string)__('The synonym group has been deleted.')]));
37+
}
38+
39+
/**
40+
* Test execute with no params
41+
*
42+
* @return void
43+
*/
44+
public function testExecuteNoId(): void
45+
{
46+
$this->getRequest()->setMethod(HttpRequest::METHOD_POST);
47+
$this->dispatch('backend/search/synonyms/delete');
48+
$this->assertSessionMessages($this->equalTo([(string)__('We can&#039;t find a synonym group to delete.')]));
49+
}
50+
51+
/**
52+
* Gets synonym group Fixture.
53+
*
54+
* @return SynonymGroup
55+
*/
56+
private function getTestFixture(): SynonymGroup
57+
{
58+
/** @var Collection */
59+
$synonymGroupCollection = Bootstrap::getObjectManager()->get(Collection::class);
60+
return $synonymGroupCollection->getLastItem();
61+
}
62+
}

dev/tests/integration/testsuite/Magento/Search/Model/ResourceModel/SynonymGroupTest.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,16 @@
55
*/
66
namespace Magento\Search\Model\ResourceModel;
77

8+
/**
9+
* Test for class \Magento\Search\Model\ResourceModel\SynonymGroup
10+
*/
811
class SynonymGroupTest extends \PHPUnit\Framework\TestCase
912
{
13+
/**
14+
* Test Get By Scope
15+
*
16+
* @return void
17+
*/
1018
public function testGetByScope()
1119
{
1220
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
@@ -16,32 +24,36 @@ public function testGetByScope()
1624
$synonymGroupModel1->setStoreId(0);
1725
$synonymGroupModel1->setSynonymGroup('a,b,c');
1826
$synonymGroupModel1->save();
27+
$group1 = $synonymGroupModel1->getGroupId();
1928
/** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel2 */
2029
$synonymGroupModel2 = $objectManager->create(\Magento\Search\Model\SynonymGroup::class);
2130
$synonymGroupModel2->setWebsiteId(0);
2231
$synonymGroupModel2->setStoreId(1);
2332
$synonymGroupModel2->setSynonymGroup('d,e,f');
2433
$synonymGroupModel2->save();
34+
$group2 = $synonymGroupModel2->getGroupId();
2535
/** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel3 */
2636
$synonymGroupModel3 = $objectManager->create(\Magento\Search\Model\SynonymGroup::class);
2737
$synonymGroupModel3->setWebsiteId(1);
2838
$synonymGroupModel3->setStoreId(0);
2939
$synonymGroupModel3->setSynonymGroup('g,h,i');
3040
$synonymGroupModel3->save();
41+
$group3 = $synonymGroupModel3->getGroupId();
3142
/** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel4 */
3243
$synonymGroupModel4 = $objectManager->create(\Magento\Search\Model\SynonymGroup::class);
3344
$synonymGroupModel4->setWebsiteId(0);
3445
$synonymGroupModel4->setStoreId(0);
3546
$synonymGroupModel4->setSynonymGroup('d,e,f');
3647
$synonymGroupModel4->save();
48+
$group4 = $synonymGroupModel4->getGroupId();
3749

3850
/** @var \Magento\Search\Model\ResourceModel\SynonymGroup $resourceModel */
3951
$resourceModel = $objectManager->create(\Magento\Search\Model\ResourceModel\SynonymGroup::class);
4052
$this->assertEquals(
41-
[['group_id' => 1, 'synonyms' => 'a,b,c'], ['group_id' => 4, 'synonyms' => 'd,e,f']],
53+
[['group_id' => $group1, 'synonyms' => 'a,b,c'], ['group_id' => $group4, 'synonyms' => 'd,e,f']],
4254
$resourceModel->getByScope(0, 0)
4355
);
44-
$this->assertEquals([['group_id' => 2, 'synonyms' => 'd,e,f']], $resourceModel->getByScope(0, 1));
45-
$this->assertEquals([['group_id' => 3, 'synonyms' => 'g,h,i']], $resourceModel->getByScope(1, 0));
56+
$this->assertEquals([['group_id' => $group2, 'synonyms' => 'd,e,f']], $resourceModel->getByScope(0, 1));
57+
$this->assertEquals([['group_id' => $group3, 'synonyms' => 'g,h,i']], $resourceModel->getByScope(1, 0));
4658
}
4759
}

0 commit comments

Comments
 (0)