Skip to content

Commit

Permalink
Merge pull request #145 from magento-engcom/fix-static-tests-stock-save
Browse files Browse the repository at this point in the history
Fix static tests
  • Loading branch information
Valeriy Nayda authored Nov 9, 2017
2 parents 9d4984f + 331f9d7 commit f7ff64e
Show file tree
Hide file tree
Showing 3 changed files with 144 additions and 105 deletions.
130 changes: 25 additions & 105 deletions app/code/Magento/Inventory/Controller/Adminhtml/Stock/Save.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,12 @@
*/
namespace Magento\Inventory\Controller\Adminhtml\Stock;

use Exception;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\Api\DataObjectHelper;
use Magento\Framework\Controller\Result\Redirect;
use Magento\Framework\EntityManager\EventManager;
use Magento\Framework\Exception\CouldNotSaveException;
use Magento\Framework\Exception\InputException;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Validation\ValidationException;
use Magento\InventoryApi\Api\Data\StockInterface;
use Magento\InventoryApi\Api\Data\StockInterfaceFactory;
use Magento\InventoryApi\Api\StockRepositoryInterface;

/**
* Save Controller
Expand All @@ -30,52 +23,20 @@ class Save extends Action
const ADMIN_RESOURCE = 'Magento_Inventory::stock';

/**
* @var StockInterfaceFactory
* @var StockSaveProcessor
*/
private $stockFactory;

/**
* @var StockRepositoryInterface
*/
private $stockRepository;

/**
* @var DataObjectHelper
*/
private $dataObjectHelper;

/**
* @var StockSourceLinkProcessor
*/
private $stockSourceLinkProcessor;

/**
* @var EventManager
*/
private $eventManager;
private $stockSaveProcessor;

/**
* @param Context $context
* @param StockInterfaceFactory $stockFactory
* @param StockRepositoryInterface $stockRepository
* @param DataObjectHelper $sourceHydrator
* @param StockSourceLinkProcessor $stockSourceLinkProcessor
* @param EventManager $eventManager
* @param StockSaveProcessor $stockSaveProcessor
*/
public function __construct(
Context $context,
StockInterfaceFactory $stockFactory,
StockRepositoryInterface $stockRepository,
DataObjectHelper $sourceHydrator,
StockSourceLinkProcessor $stockSourceLinkProcessor,
EventManager $eventManager
StockSaveProcessor $stockSaveProcessor
) {
parent::__construct($context);
$this->stockFactory = $stockFactory;
$this->stockRepository = $stockRepository;
$this->dataObjectHelper = $sourceHydrator;
$this->stockSourceLinkProcessor = $stockSourceLinkProcessor;
$this->eventManager = $eventManager;
$this->stockSaveProcessor = $stockSaveProcessor;
}

/**
Expand All @@ -85,71 +46,30 @@ public function execute()
{
$resultRedirect = $this->resultRedirectFactory->create();
$requestData = $this->getRequest()->getParams();
if ($this->getRequest()->isPost() && !empty($requestData['general'])) {
try {
$stockId = isset($requestData['general'][StockInterface::STOCK_ID])
? (int)$requestData['general'][StockInterface::STOCK_ID]
: null;
$stockId = $this->processSave($requestData, $stockId);

$this->messageManager->addSuccessMessage(__('The Stock has been saved.'));
$this->processRedirectAfterSuccessSave($resultRedirect, $stockId);
} catch (NoSuchEntityException $e) {
$this->messageManager->addErrorMessage(__('The Stock does not exist.'));
$this->processRedirectAfterFailureSave($resultRedirect);
} catch (ValidationException $e) {
foreach ($e->getErrors() as $localizedError) {
$this->messageManager->addErrorMessage($localizedError->getMessage());
}
$this->processRedirectAfterFailureSave($resultRedirect, $stockId);
} catch (CouldNotSaveException $e) {
$this->messageManager->addErrorMessage($e->getMessage());
$this->processRedirectAfterFailureSave($resultRedirect, $stockId);
} catch (InputException $e) {
$this->messageManager->addErrorMessage($e->getMessage());
$this->processRedirectAfterFailureSave($resultRedirect, $stockId);
} catch (Exception $e) {
$this->messageManager->addErrorMessage(__('Could not save stock.'));
$this->processRedirectAfterFailureSave($resultRedirect, $stockId ?? null);
}
} else {
if (!$this->getRequest()->isPost() || empty($requestData['general'])) {
$this->messageManager->addErrorMessage(__('Wrong request.'));
$this->processRedirectAfterFailureSave($resultRedirect);
}
return $resultRedirect;
}

/**
* Saves inventory stock and returns stock id
*
* @param int $stockId
* @param array $requestData
* @return int
*/
private function processSave(array $requestData, int $stockId = null): int
{
if (null === $stockId) {
/** @var StockInterface $stock */
$stock = $this->stockFactory->create();
} else {
$stock = $this->stockRepository->get($stockId);
return $resultRedirect;
}
try {
$stockId = isset($requestData['general'][StockInterface::STOCK_ID])
? (int)$requestData['general'][StockInterface::STOCK_ID]
: null;
$stockId = $this->stockSaveProcessor->process($stockId, $requestData);
$this->messageManager->addSuccessMessage(__('The Stock has been saved.'));
$this->processRedirectAfterSuccessSave($resultRedirect, $stockId);
} catch (ValidationException $e) {
foreach ($e->getErrors() as $localizedError) {
$this->messageManager->addErrorMessage($localizedError->getMessage());
}
$this->processRedirectAfterFailureSave($resultRedirect, $stockId);
} catch (LocalizedException $e) {
$this->messageManager->addErrorMessage($e->getMessage());
$this->processRedirectAfterFailureSave($resultRedirect, $stockId ?? null);
}
$this->dataObjectHelper->populateWithArray($stock, $requestData['general'], StockInterface::class);
$this->eventManager->dispatch(
'save_stock_controller_populate_stock_with_data',
[
'request_data' => $requestData,
'stock' => $stock,
]
);
$stockId = $this->stockRepository->save($stock);

$assignedSources =
isset($requestData['sources']['assigned_sources']) && is_array($requestData['sources']['assigned_sources'])
? $requestData['sources']['assigned_sources']
: [];
$this->stockSourceLinkProcessor->process($stockId, $assignedSources);
return $stockId;
return $resultRedirect;
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Inventory\Controller\Adminhtml\Stock;

use Magento\Framework\Api\DataObjectHelper;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Exception\CouldNotSaveException;
use Magento\Framework\Exception\InputException;
use Magento\InventoryApi\Api\Data\StockInterface;
use Magento\InventoryApi\Api\Data\StockInterfaceFactory;
use Magento\InventoryApi\Api\StockRepositoryInterface;
use Magento\Framework\EntityManager\EventManager;

/**
* Save stock processor for save stock controller
*/
class StockSaveProcessor
{
/**
* @var StockInterfaceFactory
*/
private $stockFactory;

/**
* @var StockRepositoryInterface
*/
private $stockRepository;

/**
* @var StockSourceLinkProcessor
*/
private $stockSourceLinkProcessor;

/**
* @var DataObjectHelper
*/
private $dataObjectHelper;

/**
* @var EventManager
*/
private $eventManager;

/**
* @param StockInterfaceFactory $stockFactory
* @param StockRepositoryInterface $stockRepository
* @param StockSourceLinkProcessor $stockSourceLinkProcessor
* @param DataObjectHelper $dataObjectHelper
* @param EventManager $eventManager
*/
public function __construct(
StockInterfaceFactory $stockFactory,
StockRepositoryInterface $stockRepository,
StockSourceLinkProcessor $stockSourceLinkProcessor,
DataObjectHelper $dataObjectHelper,
EventManager $eventManager
) {
$this->stockFactory = $stockFactory;
$this->stockRepository = $stockRepository;
$this->stockSourceLinkProcessor = $stockSourceLinkProcessor;
$this->dataObjectHelper = $dataObjectHelper;
$this->eventManager = $eventManager;
}

/**
* Save stock process action
*
* @param int|null $stockId
* @param array $requestData
*
* @return int
* @throws LocalizedException
*/
public function process($stockId, array $requestData): int
{
try {
if (null === $stockId) {
$stock = $this->stockFactory->create();
} else {
$stock = $this->stockRepository->get($stockId);
}
$this->dataObjectHelper->populateWithArray($stock, $requestData['general'], StockInterface::class);
$this->eventManager->dispatch(
'save_stock_controller_populate_stock_with_data',
[
'request_data' => $requestData,
'stock' => $stock,
]
);
$stockId = $this->stockRepository->save($stock);

$assignedSources =
isset($requestData['sources']['assigned_sources'])
&& is_array($requestData['sources']['assigned_sources'])
? $requestData['sources']['assigned_sources']
: [];
$this->stockSourceLinkProcessor->process($stockId, $assignedSources);

return $stockId;
} catch (NoSuchEntityException $e) {
throw new LocalizedException(__('The Stock does not exist.'));
} catch (CouldNotSaveException $e) {
throw new LocalizedException(__($e->getMessage()));
} catch (InputException $e) {
throw new LocalizedException(__($e->getMessage()));
} catch (\Exception $e) {
throw new LocalizedException(__('Could not save stock.'));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,10 @@ public function testFailedValidationOnUpdate(string $field, $value, array $expec
}

/**
* SuppressWarnings was added due to a tests on different fail types and big size of data provider
*
* @return array
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
*/
public function failedValidationDataProvider(): array
{
Expand Down

0 comments on commit f7ff64e

Please sign in to comment.