Skip to content

Commit 10c97b7

Browse files
committed
Merge remote-tracking branch 'origin/MC-24772' into 2.4-develop-pr119
2 parents 7952cfe + 21ddf0b commit 10c97b7

File tree

3 files changed

+113
-18
lines changed
  • app/code/Magento/Backend
  • dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System

3 files changed

+113
-18
lines changed

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

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
namespace Magento\Backend\Controller\Adminhtml\System\Store;
88

99
use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
10+
use Magento\Store\Model\Group as StoreGroup;
11+
use Magento\Store\Model\Store;
12+
use Magento\Framework\Exception\LocalizedException;
1013

1114
/**
1215
* Class Save
@@ -33,6 +36,17 @@ private function processWebsiteSave($postData)
3336
$websiteModel->setId(null);
3437
}
3538

39+
$groupModel = $this->_objectManager->create(StoreGroup::class);
40+
$groupModel->load($websiteModel->getDefaultGroupId());
41+
$storeModel = $this->_objectManager->create(Store::class);
42+
$storeModel->load($groupModel->getDefaultStoreId());
43+
44+
if ($websiteModel->getIsDefault() && !$storeModel->isActive()) {
45+
throw new LocalizedException(
46+
__('Please enable your Store View before using this Web Site as Default')
47+
);
48+
}
49+
3650
$websiteModel->save();
3751
$this->messageManager->addSuccessMessage(__('You saved the website.'));
3852

@@ -43,13 +57,13 @@ private function processWebsiteSave($postData)
4357
* Process Store model save
4458
*
4559
* @param array $postData
46-
* @throws \Magento\Framework\Exception\LocalizedException
60+
* @throws LocalizedException
4761
* @return array
4862
*/
4963
private function processStoreSave($postData)
5064
{
51-
/** @var \Magento\Store\Model\Store $storeModel */
52-
$storeModel = $this->_objectManager->create(\Magento\Store\Model\Store::class);
65+
/** @var Store $storeModel */
66+
$storeModel = $this->_objectManager->create(Store::class);
5367
$postData['store']['name'] = $this->filterManager->removeTags($postData['store']['name']);
5468
if ($postData['store']['store_id']) {
5569
$storeModel->load($postData['store']['store_id']);
@@ -59,13 +73,13 @@ private function processStoreSave($postData)
5973
$storeModel->setId(null);
6074
}
6175
$groupModel = $this->_objectManager->create(
62-
\Magento\Store\Model\Group::class
76+
StoreGroup::class
6377
)->load(
6478
$storeModel->getGroupId()
6579
);
6680
$storeModel->setWebsiteId($groupModel->getWebsiteId());
6781
if (!$storeModel->isActive() && $storeModel->isDefault()) {
68-
throw new \Magento\Framework\Exception\LocalizedException(
82+
throw new LocalizedException(
6983
__('The default store cannot be disabled')
7084
);
7185
}
@@ -79,14 +93,14 @@ private function processStoreSave($postData)
7993
* Process StoreGroup model save
8094
*
8195
* @param array $postData
82-
* @throws \Magento\Framework\Exception\LocalizedException
96+
* @throws LocalizedException
8397
* @return array
8498
*/
8599
private function processGroupSave($postData)
86100
{
87101
$postData['group']['name'] = $this->filterManager->removeTags($postData['group']['name']);
88-
/** @var \Magento\Store\Model\Group $groupModel */
89-
$groupModel = $this->_objectManager->create(\Magento\Store\Model\Group::class);
102+
/** @var StoreGroup $groupModel */
103+
$groupModel = $this->_objectManager->create(StoreGroup::class);
90104
if ($postData['group']['group_id']) {
91105
$groupModel->load($postData['group']['group_id']);
92106
}
@@ -95,10 +109,11 @@ private function processGroupSave($postData)
95109
$groupModel->setId(null);
96110
}
97111
if (!$this->isSelectedDefaultStoreActive($postData, $groupModel)) {
98-
throw new \Magento\Framework\Exception\LocalizedException(
112+
throw new LocalizedException(
99113
__('An inactive store view cannot be saved as default store view')
100114
);
101115
}
116+
102117
$groupModel->save();
103118
$this->messageManager->addSuccessMessage(__('You saved the store.'));
104119

@@ -135,7 +150,7 @@ public function execute()
135150
}
136151
$redirectResult->setPath('adminhtml/*/');
137152
return $redirectResult;
138-
} catch (\Magento\Framework\Exception\LocalizedException $e) {
153+
} catch (LocalizedException $e) {
139154
$this->messageManager->addErrorMessage($e->getMessage());
140155
$this->_getSession()->setPostData($postData);
141156
} catch (\Exception $e) {
@@ -156,10 +171,10 @@ public function execute()
156171
* Verify if selected default store is active
157172
*
158173
* @param array $postData
159-
* @param \Magento\Store\Model\Group $groupModel
174+
* @param StoreGroup $groupModel
160175
* @return bool
161176
*/
162-
private function isSelectedDefaultStoreActive(array $postData, \Magento\Store\Model\Group $groupModel)
177+
private function isSelectedDefaultStoreActive(array $postData, StoreGroup $groupModel)
163178
{
164179
if (!empty($postData['group']['default_store_id'])) {
165180
$defaultStoreId = $postData['group']['default_store_id'];

app/code/Magento/Backend/i18n/en_US.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ System,System
198198
"All Stores","All Stores"
199199
"You saved the website.","You saved the website."
200200
"The default store cannot be disabled","The default store cannot be disabled"
201+
"Please enable your Store View before using this Web Site as Default","Please enable your Store View before using this Web Site as Default"
201202
"You saved the store view.","You saved the store view."
202203
"An inactive store view cannot be saved as default store view","An inactive store view cannot be saved as default store view"
203204
"You saved the store.","You saved the store."

dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/StoreTest.php

Lines changed: 85 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,56 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
namespace Magento\Backend\Controller\Adminhtml\System;
79

10+
use Magento\Store\Model\ResourceModel\Store as StoreResource;
11+
use Magento\Store\Api\Data\StoreInterfaceFactory;
12+
use Magento\Store\Api\WebsiteRepositoryInterface;
13+
use Magento\Framework\Data\Form\FormKey;
14+
use Magento\Framework\Message\MessageInterface;
15+
use Magento\Framework\Message\ManagerInterface;
16+
use Magento\Framework\App\Request\Http as HttpRequest;
17+
818
/**
919
* @magentoAppArea adminhtml
1020
*/
1121
class StoreTest extends \Magento\TestFramework\TestCase\AbstractBackendController
1222
{
23+
/**
24+
* @var FormKey
25+
*/
26+
private $formKey;
27+
28+
/**
29+
* @var StoreResource
30+
*/
31+
private $storeResource;
32+
33+
/**
34+
* @var StoreInterfaceFactory
35+
*/
36+
private $storeFactory;
37+
38+
/**
39+
* @var WebsiteRepositoryInterface
40+
*/
41+
private $websiteRepository;
42+
43+
/**
44+
* @inheritDoc
45+
*/
46+
protected function setUp(): void
47+
{
48+
parent::setUp();
49+
50+
$this->formKey = $this->_objectManager->get(FormKey::class);
51+
$this->storeResource = $this->_objectManager->get(StoreResource::class);
52+
$this->storeFactory = $this->_objectManager->get(StoreInterfaceFactory::class);
53+
$this->websiteRepository = $this->_objectManager->get(WebsiteRepositoryInterface::class);
54+
}
55+
1356
public function testIndexAction()
1457
{
1558
$this->dispatch('backend/admin/system_store/index');
@@ -67,17 +110,53 @@ public function testIndexAction()
67110
*/
68111
public function testSaveActionWithExistCode($post, $message)
69112
{
70-
/** @var $formKey \Magento\Framework\Data\Form\FormKey */
71-
$formKey = $this->_objectManager->get(\Magento\Framework\Data\Form\FormKey::class);
72-
$post['form_key'] = $formKey->getFormKey();
73-
$this->getRequest()->setMethod('POST');
113+
$post['form_key'] = $this->formKey->getFormKey();
114+
$this->getRequest()->setMethod(HttpRequest::METHOD_POST);
74115
$this->getRequest()->setPostValue($post);
75116
$this->dispatch('backend/admin/system_store/save');
76117
//Check that errors was generated and set to session
77118
$this->assertSessionMessages(
78119
$this->containsEqual($message),
79-
\Magento\Framework\Message\MessageInterface::TYPE_ERROR,
80-
\Magento\Framework\Message\ManagerInterface::class
120+
MessageInterface::TYPE_ERROR,
121+
ManagerInterface::class
122+
);
123+
}
124+
125+
/**
126+
* Save action test.
127+
* Changing of a default website when a target website doesn't have a default store view.
128+
*
129+
* @return void
130+
* @magentoDataFixture Magento/Store/_files/second_website_with_store_group_and_store.php
131+
*/
132+
public function testSaveActionChangeDefaultWebsiteThatDoesntHaveDefaultStoreView(): void
133+
{
134+
$secondWebsite = $this->websiteRepository->get('test');
135+
// inactivate default store view of second store
136+
$secondStore = $this->storeFactory->create();
137+
$this->storeResource->load($secondStore, 'fixture_second_store', 'code');
138+
$secondStore->setIsActive(0);
139+
$this->storeResource->save($secondStore);
140+
141+
$this->getRequest()->setMethod(HttpRequest::METHOD_POST);
142+
$this->getRequest()->setPostValue([
143+
'website' => [
144+
'name' => 'Test Website',
145+
'code' => 'test',
146+
'sort_order' => '0',
147+
'default_group_id' => $secondWebsite->getDefaultGroupId(),
148+
'is_default' => '1',
149+
'website_id' => $secondWebsite->getId(),
150+
],
151+
'store_type' => 'website',
152+
'store_action' => 'edit',
153+
],);
154+
$this->dispatch('backend/admin/system_store/save');
155+
//Check that errors was generated and set to session
156+
$this->assertSessionMessages(
157+
$this->containsEqual('Please enable your Store View before using this Web Site as Default'),
158+
MessageInterface::TYPE_ERROR,
159+
ManagerInterface::class
81160
);
82161
}
83162

0 commit comments

Comments
 (0)