Skip to content

Commit ccbe710

Browse files
committed
ACP2E-3941: Updating Store Code Cleared Design Configuration
1 parent bc8abed commit ccbe710

File tree

5 files changed

+279
-135
lines changed

5 files changed

+279
-135
lines changed

app/code/Magento/Backend/Controller/Adminhtml/System/Store/Save.php

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@
55
*/
66
namespace Magento\Backend\Controller\Adminhtml\System\Store;
77

8+
use Magento\Backend\App\Action\Context;
9+
use Magento\Backend\Model\View\Result\ForwardFactory;
10+
use Magento\Framework\App\Cache\TypeListInterface;
11+
use Magento\Framework\Filter\FilterManager;
12+
use Magento\Framework\Registry;
13+
use Magento\Framework\View\Result\PageFactory;
814
use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
915
use Magento\Store\Model\Group as StoreGroup;
1016
use Magento\Store\Model\Store;
@@ -17,6 +23,32 @@
1723
*/
1824
class Save extends \Magento\Backend\Controller\Adminhtml\System\Store implements HttpPostActionInterface
1925
{
26+
/**
27+
* @var TypeListInterface
28+
*/
29+
private $cacheTypeList;
30+
31+
/**
32+
* Constructor
33+
*
34+
* @param Context $context
35+
* @param Registry $coreRegistry
36+
* @param FilterManager $filterManager
37+
* @param ForwardFactory $resultForwardFactory
38+
* @param PageFactory $resultPageFactory
39+
* @param TypeListInterface $cacheTypeList
40+
*/
41+
public function __construct(
42+
Context $context,
43+
Registry $coreRegistry,
44+
FilterManager $filterManager,
45+
ForwardFactory $resultForwardFactory,
46+
PageFactory $resultPageFactory,
47+
TypeListInterface $cacheTypeList,
48+
) {
49+
parent::__construct($context, $coreRegistry, $filterManager, $resultForwardFactory, $resultPageFactory);
50+
$this->cacheTypeList = $cacheTypeList;
51+
}
2052
/**
2153
* Process Website model save
2254
*
@@ -67,6 +99,8 @@ private function processStoreSave($postData)
6799
if ($postData['store']['store_id']) {
68100
$storeModel->load($postData['store']['store_id']);
69101
}
102+
$originalCode = $storeModel->getCode();
103+
$newCode = $postData['store']['code'] ?? null;
70104
$storeModel->setData($postData['store']);
71105
if ($postData['store']['store_id'] == '') {
72106
$storeModel->setId(null);
@@ -84,7 +118,9 @@ private function processStoreSave($postData)
84118
}
85119
$storeModel->save();
86120
$this->messageManager->addSuccessMessage(__('You saved the store view.'));
87-
121+
if ($originalCode !== $newCode) {
122+
$this->cacheTypeList->cleanType('config');
123+
}
88124
return $postData;
89125
}
90126

app/code/Magento/Backend/Plugin/StoreSaveFlushConfig.php

Lines changed: 0 additions & 45 deletions
This file was deleted.
Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,242 @@
1+
<?php
2+
/**
3+
* Copyright 2025 Adobe
4+
* All Rights Reserved.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Backend\Test\Unit\Controller\Adminhtml\System\Store;
9+
10+
use Magento\Backend\App\Action\Context;
11+
use Magento\Backend\Controller\Adminhtml\System\Store\Save;
12+
use Magento\Backend\Helper\Data;
13+
use Magento\Backend\Model\Session;
14+
use Magento\Backend\Model\View\Result\ForwardFactory;
15+
use Magento\Backend\Model\View\Result\Redirect;
16+
use Magento\Framework\App\Cache\TypeListInterface;
17+
use Magento\Framework\App\Request\Http;
18+
use Magento\Framework\App\RequestInterface;
19+
use Magento\Framework\App\ResponseInterface;
20+
use Magento\Framework\Controller\Result\RedirectFactory;
21+
use Magento\Framework\Filter\FilterManager;
22+
use Magento\Framework\Message\ManagerInterface;
23+
use Magento\Framework\ObjectManager\ObjectManager;
24+
use Magento\Framework\Registry;
25+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as TestObjectManager;
26+
use Magento\Framework\View\Result\PageFactory;
27+
use Magento\Store\Model\Group;
28+
use Magento\Store\Model\Store;
29+
use PHPUnit\Framework\MockObject\MockObject;
30+
use PHPUnit\Framework\TestCase;
31+
32+
class SaveTest extends TestCase
33+
{
34+
/**
35+
* @var Save
36+
*/
37+
protected $controller;
38+
39+
/**
40+
* @var RequestInterface|MockObject
41+
*/
42+
protected $requestMock;
43+
44+
/**
45+
* @var ResponseInterface|MockObject
46+
*/
47+
protected $responseMock;
48+
49+
/**
50+
* @var ObjectManager|MockObject
51+
*/
52+
protected $objectManagerMock;
53+
54+
/**
55+
* @var ManagerInterface|MockObject
56+
*/
57+
protected $messagesMock;
58+
59+
/**
60+
* @var Data|MockObject
61+
*/
62+
protected $helperMock;
63+
64+
/**
65+
* @var Session|MockObject
66+
*/
67+
protected $sessionMock;
68+
69+
/**
70+
* @var Store|MockObject
71+
*/
72+
protected $storeModelMock;
73+
74+
/**
75+
* @var Group|MockObject
76+
*/
77+
protected $groupModelMock;
78+
79+
/**
80+
* @var FilterManager|MockObject
81+
*/
82+
protected $filterManagerMock;
83+
84+
/**
85+
* @var TypeListInterface|MockObject
86+
*/
87+
protected $cacheTypeListMock;
88+
89+
/**
90+
* @var Registry|MockObject
91+
*/
92+
protected $registryMock;
93+
94+
/**
95+
* @var ForwardFactory|MockObject
96+
*/
97+
protected $resultForwardFactoryMock;
98+
99+
/**
100+
* @var PageFactory|MockObject
101+
*/
102+
protected $resultPageFactoryMock;
103+
104+
/**
105+
* @inheritDoc
106+
*/
107+
protected function setUp(): void
108+
{
109+
$this->requestMock = $this->getMockBuilder(Http::class)
110+
->disableOriginalConstructor()
111+
->onlyMethods(['isPost', 'getPostValue'])
112+
->getMock();
113+
$this->responseMock = $this->getMockBuilder(\Magento\Framework\App\Response\Http::class)
114+
->disableOriginalConstructor()
115+
->getMock();
116+
$this->objectManagerMock = $this->getMockBuilder(ObjectManager::class)
117+
->disableOriginalConstructor()
118+
->onlyMethods(['get', 'create'])
119+
->getMock();
120+
$this->messagesMock = $this->getMockBuilder(ManagerInterface::class)
121+
->disableOriginalConstructor()
122+
->onlyMethods(['addSuccessMessage', 'addErrorMessage'])
123+
->getMockForAbstractClass();
124+
$this->helperMock = $this->getMockBuilder(Data::class)
125+
->disableOriginalConstructor()
126+
->onlyMethods(['getUrl'])
127+
->getMock();
128+
$this->sessionMock = $this->getMockBuilder(Session::class)
129+
->disableOriginalConstructor()
130+
->addMethods(['setPostData'])
131+
->getMock();
132+
$this->storeModelMock = $this->getMockBuilder(Store::class)
133+
->disableOriginalConstructor()
134+
->onlyMethods(['load', 'setData', 'setId', 'getGroupId', 'setWebsiteId', 'isActive', 'isDefault', 'save'])
135+
->getMock();
136+
$this->groupModelMock = $this->getMockBuilder(Group::class)
137+
->disableOriginalConstructor()
138+
->onlyMethods(['load', 'getWebsiteId'])
139+
->getMock();
140+
$this->filterManagerMock = $this->getMockBuilder(FilterManager::class)
141+
->disableOriginalConstructor()
142+
->addMethods(['removeTags'])
143+
->getMock();
144+
$this->cacheTypeListMock = $this->getMockBuilder(TypeListInterface::class)
145+
->disableOriginalConstructor()
146+
->onlyMethods(['cleanType'])
147+
->getMockForAbstractClass();
148+
$this->registryMock = $this->getMockBuilder(Registry::class)
149+
->disableOriginalConstructor()
150+
->getMock();
151+
$this->resultForwardFactoryMock = $this->getMockBuilder(ForwardFactory::class)
152+
->disableOriginalConstructor()
153+
->getMock();
154+
$this->resultPageFactoryMock = $this->getMockBuilder(PageFactory::class)
155+
->disableOriginalConstructor()
156+
->getMock();
157+
$redirectFactory = $this->getMockBuilder(RedirectFactory::class)
158+
->disableOriginalConstructor()
159+
->onlyMethods(['create'])
160+
->getMock();
161+
$resultRedirect = $this->getMockBuilder(Redirect::class)
162+
->disableOriginalConstructor()
163+
->onlyMethods(['setPath', 'setUrl'])
164+
->getMock();
165+
$resultRedirect->expects($this->once())->method('setPath')->willReturnSelf();
166+
$redirectFactory->expects($this->atLeastOnce())->method('create')->willReturn($resultRedirect);
167+
$contextMock = $this->getMockBuilder(Context::class)
168+
->onlyMethods([
169+
'getRequest',
170+
'getResponse',
171+
'getObjectManager',
172+
'getHelper',
173+
'getMessageManager',
174+
'getResultRedirectFactory'
175+
])
176+
->disableOriginalConstructor()
177+
->getMock();
178+
$contextMock->expects($this->once())->method('getRequest')->willReturn($this->requestMock);
179+
$contextMock->expects($this->once())->method('getResponse')->willReturn($this->responseMock);
180+
$contextMock->expects($this->once())->method('getObjectManager')->willReturn($this->objectManagerMock);
181+
$contextMock->expects($this->once())->method('getHelper')->willReturn($this->helperMock);
182+
$contextMock->expects($this->once())->method('getMessageManager')->willReturn($this->messagesMock);
183+
$contextMock->expects($this->once())->method('getResultRedirectFactory')->willReturn($redirectFactory);
184+
$testHelper = new TestObjectManager($this);
185+
$this->controller = $testHelper->getObject(
186+
Save::class,
187+
[
188+
'context' => $contextMock,
189+
'coreRegistry' => $this->registryMock,
190+
'filterManager' => $this->filterManagerMock,
191+
'resultForwardFactory' => $this->resultForwardFactoryMock,
192+
'resultPageFactory' => $this->resultPageFactoryMock,
193+
'cacheTypeList' => $this->cacheTypeListMock
194+
]
195+
);
196+
}
197+
198+
/**
199+
* Test saving a store view
200+
*/
201+
public function testSaveAction(): void
202+
{
203+
$storeId = 2;
204+
$requestParams = [
205+
'store_type' => 'store',
206+
'store_action' => 'edit',
207+
'store' => [
208+
'store_id' => $storeId,
209+
'name' => 'Test Store View',
210+
'code' => 'test_store',
211+
'is_active' => 1,
212+
'group_id' => 1
213+
]
214+
];
215+
$this->requestMock->expects($this->once())->method('isPost')->willReturn(true);
216+
$this->requestMock->expects($this->once())->method('getPostValue')->willReturn($requestParams);
217+
$this->filterManagerMock->expects($this->once())
218+
->method('removeTags')
219+
->with($requestParams['store']['name'])
220+
->willReturn($requestParams['store']['name']);
221+
$this->objectManagerMock->expects($this->exactly(2))
222+
->method('create')
223+
->willReturnMap([
224+
[Store::class, $this->storeModelMock],
225+
[Group::class, $this->groupModelMock]
226+
]);
227+
$this->storeModelMock->expects($this->once())->method('load')->with($storeId)->willReturnSelf();
228+
$this->storeModelMock->expects($this->once())->method('setData')->willReturnSelf();
229+
$this->storeModelMock->expects($this->never())->method('setId');
230+
$this->storeModelMock->expects($this->once())->method('getGroupId')->willReturn(1);
231+
$this->storeModelMock->expects($this->once())->method('isActive')->willReturn(true);
232+
$this->storeModelMock->expects($this->once())->method('save')->willReturnSelf();
233+
$this->groupModelMock->expects($this->once())->method('load')->willReturnSelf();
234+
$this->groupModelMock->expects($this->once())->method('getWebsiteId')->willReturn(1);
235+
$this->storeModelMock->expects($this->once())->method('setWebsiteId')->willReturnSelf();
236+
$this->cacheTypeListMock->expects($this->once())->method('cleanType')->with('config');
237+
$this->messagesMock->expects($this->once())
238+
->method('addSuccessMessage')
239+
->with(__('You saved the store view.'));
240+
$this->controller->execute();
241+
}
242+
}

0 commit comments

Comments
 (0)