Skip to content

Commit f7ff64e

Browse files
author
Valeriy Nayda
authored
Merge pull request #145 from magento-engcom/fix-static-tests-stock-save
Fix static tests
2 parents 9d4984f + 331f9d7 commit f7ff64e

File tree

3 files changed

+144
-105
lines changed

3 files changed

+144
-105
lines changed

app/code/Magento/Inventory/Controller/Adminhtml/Stock/Save.php

Lines changed: 25 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,12 @@
55
*/
66
namespace Magento\Inventory\Controller\Adminhtml\Stock;
77

8-
use Exception;
98
use Magento\Backend\App\Action;
109
use Magento\Backend\App\Action\Context;
11-
use Magento\Framework\Api\DataObjectHelper;
1210
use Magento\Framework\Controller\Result\Redirect;
13-
use Magento\Framework\EntityManager\EventManager;
14-
use Magento\Framework\Exception\CouldNotSaveException;
15-
use Magento\Framework\Exception\InputException;
16-
use Magento\Framework\Exception\NoSuchEntityException;
11+
use Magento\Framework\Exception\LocalizedException;
1712
use Magento\Framework\Validation\ValidationException;
1813
use Magento\InventoryApi\Api\Data\StockInterface;
19-
use Magento\InventoryApi\Api\Data\StockInterfaceFactory;
20-
use Magento\InventoryApi\Api\StockRepositoryInterface;
2114

2215
/**
2316
* Save Controller
@@ -30,52 +23,20 @@ class Save extends Action
3023
const ADMIN_RESOURCE = 'Magento_Inventory::stock';
3124

3225
/**
33-
* @var StockInterfaceFactory
26+
* @var StockSaveProcessor
3427
*/
35-
private $stockFactory;
36-
37-
/**
38-
* @var StockRepositoryInterface
39-
*/
40-
private $stockRepository;
41-
42-
/**
43-
* @var DataObjectHelper
44-
*/
45-
private $dataObjectHelper;
46-
47-
/**
48-
* @var StockSourceLinkProcessor
49-
*/
50-
private $stockSourceLinkProcessor;
51-
52-
/**
53-
* @var EventManager
54-
*/
55-
private $eventManager;
28+
private $stockSaveProcessor;
5629

5730
/**
5831
* @param Context $context
59-
* @param StockInterfaceFactory $stockFactory
60-
* @param StockRepositoryInterface $stockRepository
61-
* @param DataObjectHelper $sourceHydrator
62-
* @param StockSourceLinkProcessor $stockSourceLinkProcessor
63-
* @param EventManager $eventManager
32+
* @param StockSaveProcessor $stockSaveProcessor
6433
*/
6534
public function __construct(
6635
Context $context,
67-
StockInterfaceFactory $stockFactory,
68-
StockRepositoryInterface $stockRepository,
69-
DataObjectHelper $sourceHydrator,
70-
StockSourceLinkProcessor $stockSourceLinkProcessor,
71-
EventManager $eventManager
36+
StockSaveProcessor $stockSaveProcessor
7237
) {
7338
parent::__construct($context);
74-
$this->stockFactory = $stockFactory;
75-
$this->stockRepository = $stockRepository;
76-
$this->dataObjectHelper = $sourceHydrator;
77-
$this->stockSourceLinkProcessor = $stockSourceLinkProcessor;
78-
$this->eventManager = $eventManager;
39+
$this->stockSaveProcessor = $stockSaveProcessor;
7940
}
8041

8142
/**
@@ -85,71 +46,30 @@ public function execute()
8546
{
8647
$resultRedirect = $this->resultRedirectFactory->create();
8748
$requestData = $this->getRequest()->getParams();
88-
if ($this->getRequest()->isPost() && !empty($requestData['general'])) {
89-
try {
90-
$stockId = isset($requestData['general'][StockInterface::STOCK_ID])
91-
? (int)$requestData['general'][StockInterface::STOCK_ID]
92-
: null;
93-
$stockId = $this->processSave($requestData, $stockId);
94-
95-
$this->messageManager->addSuccessMessage(__('The Stock has been saved.'));
96-
$this->processRedirectAfterSuccessSave($resultRedirect, $stockId);
97-
} catch (NoSuchEntityException $e) {
98-
$this->messageManager->addErrorMessage(__('The Stock does not exist.'));
99-
$this->processRedirectAfterFailureSave($resultRedirect);
100-
} catch (ValidationException $e) {
101-
foreach ($e->getErrors() as $localizedError) {
102-
$this->messageManager->addErrorMessage($localizedError->getMessage());
103-
}
104-
$this->processRedirectAfterFailureSave($resultRedirect, $stockId);
105-
} catch (CouldNotSaveException $e) {
106-
$this->messageManager->addErrorMessage($e->getMessage());
107-
$this->processRedirectAfterFailureSave($resultRedirect, $stockId);
108-
} catch (InputException $e) {
109-
$this->messageManager->addErrorMessage($e->getMessage());
110-
$this->processRedirectAfterFailureSave($resultRedirect, $stockId);
111-
} catch (Exception $e) {
112-
$this->messageManager->addErrorMessage(__('Could not save stock.'));
113-
$this->processRedirectAfterFailureSave($resultRedirect, $stockId ?? null);
114-
}
115-
} else {
49+
if (!$this->getRequest()->isPost() || empty($requestData['general'])) {
11650
$this->messageManager->addErrorMessage(__('Wrong request.'));
11751
$this->processRedirectAfterFailureSave($resultRedirect);
118-
}
119-
return $resultRedirect;
120-
}
12152

122-
/**
123-
* Saves inventory stock and returns stock id
124-
*
125-
* @param int $stockId
126-
* @param array $requestData
127-
* @return int
128-
*/
129-
private function processSave(array $requestData, int $stockId = null): int
130-
{
131-
if (null === $stockId) {
132-
/** @var StockInterface $stock */
133-
$stock = $this->stockFactory->create();
134-
} else {
135-
$stock = $this->stockRepository->get($stockId);
53+
return $resultRedirect;
54+
}
55+
try {
56+
$stockId = isset($requestData['general'][StockInterface::STOCK_ID])
57+
? (int)$requestData['general'][StockInterface::STOCK_ID]
58+
: null;
59+
$stockId = $this->stockSaveProcessor->process($stockId, $requestData);
60+
$this->messageManager->addSuccessMessage(__('The Stock has been saved.'));
61+
$this->processRedirectAfterSuccessSave($resultRedirect, $stockId);
62+
} catch (ValidationException $e) {
63+
foreach ($e->getErrors() as $localizedError) {
64+
$this->messageManager->addErrorMessage($localizedError->getMessage());
65+
}
66+
$this->processRedirectAfterFailureSave($resultRedirect, $stockId);
67+
} catch (LocalizedException $e) {
68+
$this->messageManager->addErrorMessage($e->getMessage());
69+
$this->processRedirectAfterFailureSave($resultRedirect, $stockId ?? null);
13670
}
137-
$this->dataObjectHelper->populateWithArray($stock, $requestData['general'], StockInterface::class);
138-
$this->eventManager->dispatch(
139-
'save_stock_controller_populate_stock_with_data',
140-
[
141-
'request_data' => $requestData,
142-
'stock' => $stock,
143-
]
144-
);
145-
$stockId = $this->stockRepository->save($stock);
14671

147-
$assignedSources =
148-
isset($requestData['sources']['assigned_sources']) && is_array($requestData['sources']['assigned_sources'])
149-
? $requestData['sources']['assigned_sources']
150-
: [];
151-
$this->stockSourceLinkProcessor->process($stockId, $assignedSources);
152-
return $stockId;
72+
return $resultRedirect;
15373
}
15474

15575
/**
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
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\Inventory\Controller\Adminhtml\Stock;
9+
10+
use Magento\Framework\Api\DataObjectHelper;
11+
use Magento\Framework\Exception\LocalizedException;
12+
use Magento\Framework\Exception\NoSuchEntityException;
13+
use Magento\Framework\Exception\CouldNotSaveException;
14+
use Magento\Framework\Exception\InputException;
15+
use Magento\InventoryApi\Api\Data\StockInterface;
16+
use Magento\InventoryApi\Api\Data\StockInterfaceFactory;
17+
use Magento\InventoryApi\Api\StockRepositoryInterface;
18+
use Magento\Framework\EntityManager\EventManager;
19+
20+
/**
21+
* Save stock processor for save stock controller
22+
*/
23+
class StockSaveProcessor
24+
{
25+
/**
26+
* @var StockInterfaceFactory
27+
*/
28+
private $stockFactory;
29+
30+
/**
31+
* @var StockRepositoryInterface
32+
*/
33+
private $stockRepository;
34+
35+
/**
36+
* @var StockSourceLinkProcessor
37+
*/
38+
private $stockSourceLinkProcessor;
39+
40+
/**
41+
* @var DataObjectHelper
42+
*/
43+
private $dataObjectHelper;
44+
45+
/**
46+
* @var EventManager
47+
*/
48+
private $eventManager;
49+
50+
/**
51+
* @param StockInterfaceFactory $stockFactory
52+
* @param StockRepositoryInterface $stockRepository
53+
* @param StockSourceLinkProcessor $stockSourceLinkProcessor
54+
* @param DataObjectHelper $dataObjectHelper
55+
* @param EventManager $eventManager
56+
*/
57+
public function __construct(
58+
StockInterfaceFactory $stockFactory,
59+
StockRepositoryInterface $stockRepository,
60+
StockSourceLinkProcessor $stockSourceLinkProcessor,
61+
DataObjectHelper $dataObjectHelper,
62+
EventManager $eventManager
63+
) {
64+
$this->stockFactory = $stockFactory;
65+
$this->stockRepository = $stockRepository;
66+
$this->stockSourceLinkProcessor = $stockSourceLinkProcessor;
67+
$this->dataObjectHelper = $dataObjectHelper;
68+
$this->eventManager = $eventManager;
69+
}
70+
71+
/**
72+
* Save stock process action
73+
*
74+
* @param int|null $stockId
75+
* @param array $requestData
76+
*
77+
* @return int
78+
* @throws LocalizedException
79+
*/
80+
public function process($stockId, array $requestData): int
81+
{
82+
try {
83+
if (null === $stockId) {
84+
$stock = $this->stockFactory->create();
85+
} else {
86+
$stock = $this->stockRepository->get($stockId);
87+
}
88+
$this->dataObjectHelper->populateWithArray($stock, $requestData['general'], StockInterface::class);
89+
$this->eventManager->dispatch(
90+
'save_stock_controller_populate_stock_with_data',
91+
[
92+
'request_data' => $requestData,
93+
'stock' => $stock,
94+
]
95+
);
96+
$stockId = $this->stockRepository->save($stock);
97+
98+
$assignedSources =
99+
isset($requestData['sources']['assigned_sources'])
100+
&& is_array($requestData['sources']['assigned_sources'])
101+
? $requestData['sources']['assigned_sources']
102+
: [];
103+
$this->stockSourceLinkProcessor->process($stockId, $assignedSources);
104+
105+
return $stockId;
106+
} catch (NoSuchEntityException $e) {
107+
throw new LocalizedException(__('The Stock does not exist.'));
108+
} catch (CouldNotSaveException $e) {
109+
throw new LocalizedException(__($e->getMessage()));
110+
} catch (InputException $e) {
111+
throw new LocalizedException(__($e->getMessage()));
112+
} catch (\Exception $e) {
113+
throw new LocalizedException(__('Could not save stock.'));
114+
}
115+
}
116+
}

app/code/Magento/InventoryApi/Test/Api/SourceRepository/ValidationTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,10 @@ public function testFailedValidationOnUpdate(string $field, $value, array $expec
140140
}
141141

142142
/**
143+
* SuppressWarnings was added due to a tests on different fail types and big size of data provider
144+
*
143145
* @return array
146+
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
144147
*/
145148
public function failedValidationDataProvider(): array
146149
{

0 commit comments

Comments
 (0)