Skip to content

Commit 72f8dc1

Browse files
author
vpaladiychuk
committed
MAGETWO-38857: Decrease crap
1 parent be9b60e commit 72f8dc1

File tree

2 files changed

+219
-76
lines changed
  • app/code/Magento/Sitemap

2 files changed

+219
-76
lines changed

app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Save.php

100644100755
Lines changed: 102 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -8,102 +8,128 @@
88

99
use Magento\Backend\App\Action;
1010
use Magento\Framework\App\Filesystem\DirectoryList;
11+
use Magento\Framework\Controller;
1112

1213
class Save extends \Magento\Sitemap\Controller\Adminhtml\Sitemap
1314
{
1415
/**
15-
* Save action
16+
* Validate path to generate
1617
*
17-
* @return void
18-
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
18+
* @param $data
19+
* @return bool
20+
* @throws \Exception
1921
*/
20-
public function execute()
22+
protected function validatePathToGenerate($data)
2123
{
22-
// check if data sent
23-
$data = $this->getRequest()->getPostValue();
24-
if ($data) {
25-
// init model and set data
26-
/** @var \Magento\Sitemap\Model\Sitemap $model */
27-
$model = $this->_objectManager->create('Magento\Sitemap\Model\Sitemap');
28-
29-
//validate path to generate
30-
if (!empty($data['sitemap_filename']) && !empty($data['sitemap_path'])) {
31-
$data['sitemap_path'] = '/' . ltrim($data['sitemap_path'], '/');
32-
$path = rtrim($data['sitemap_path'], '\\/') . '/' . $data['sitemap_filename'];
33-
/** @var $validator \Magento\MediaStorage\Model\File\Validator\AvailablePath */
34-
$validator = $this->_objectManager->create('Magento\MediaStorage\Model\File\Validator\AvailablePath');
35-
/** @var $helper \Magento\Sitemap\Helper\Data */
36-
$helper = $this->_objectManager->get('Magento\Sitemap\Helper\Data');
37-
$validator->setPaths($helper->getValidPaths());
38-
if (!$validator->isValid($path)) {
39-
foreach ($validator->getMessages() as $message) {
40-
$this->messageManager->addError($message);
41-
}
42-
// save data in session
43-
$this->_objectManager->get('Magento\Backend\Model\Session')->setFormData($data);
44-
// redirect to edit form
45-
$this->_redirect(
46-
'adminhtml/*/edit',
47-
['sitemap_id' => $this->getRequest()->getParam('sitemap_id')]
48-
);
49-
return;
24+
if (!empty($data['sitemap_filename']) && !empty($data['sitemap_path'])) {
25+
$data['sitemap_path'] = '/' . ltrim($data['sitemap_path'], '/');
26+
$path = rtrim($data['sitemap_path'], '\\/') . '/' . $data['sitemap_filename'];
27+
/** @var $validator \Magento\MediaStorage\Model\File\Validator\AvailablePath */
28+
$validator = $this->_objectManager->create('Magento\MediaStorage\Model\File\Validator\AvailablePath');
29+
/** @var $helper \Magento\Sitemap\Helper\Data */
30+
$helper = $this->_objectManager->get('Magento\Sitemap\Helper\Data');
31+
$validator->setPaths($helper->getValidPaths());
32+
if (!$validator->isValid($path)) {
33+
foreach ($validator->getMessages() as $message) {
34+
$this->messageManager->addError($message);
5035
}
36+
// save data in session
37+
$this->_objectManager->get('Magento\Backend\Model\Session')->setFormData($data);
38+
// redirect to edit form
39+
return false;
5140
}
41+
}
42+
return true;
43+
}
5244

53-
/** @var \Magento\Framework\Filesystem\Directory\Write $directory */
54-
$directory = $this->_objectManager->get(
55-
'Magento\Framework\Filesystem'
56-
)->getDirectoryWrite(
57-
DirectoryList::ROOT
58-
);
45+
/**
46+
* Clear sitemap
47+
*
48+
* @param $model
49+
*/
50+
protected function clearSiteMap($model)
51+
{
52+
/** @var \Magento\Framework\Filesystem\Directory\Write $directory */
53+
$directory = $this->_objectManager->get('Magento\Framework\Filesystem')
54+
->getDirectoryWrite(DirectoryList::ROOT);
5955

60-
if ($this->getRequest()->getParam('sitemap_id')) {
61-
$model->load($this->getRequest()->getParam('sitemap_id'));
62-
$fileName = $model->getSitemapFilename();
56+
if ($this->getRequest()->getParam('sitemap_id')) {
57+
$model->load($this->getRequest()->getParam('sitemap_id'));
58+
$fileName = $model->getSitemapFilename();
6359

64-
$path = $model->getSitemapPath() . '/' . $fileName;
65-
if ($fileName && $directory->isFile($path)) {
66-
$directory->delete($path);
67-
}
60+
$path = $model->getSitemapPath() . '/' . $fileName;
61+
if ($fileName && $directory->isFile($path)) {
62+
$directory->delete($path);
6863
}
64+
}
65+
}
66+
67+
/**
68+
* Save model
69+
*
70+
* @param array $data
71+
* @return Controller\Result\Redirect|Controller\Result\Forward
72+
*/
73+
protected function saveModel($data)
74+
{
75+
// init model and set data
76+
/** @var \Magento\Sitemap\Model\Sitemap $model */
77+
$model = $this->_objectManager->create('Magento\Sitemap\Model\Sitemap');
78+
$this->clearSiteMap($model);
79+
$model->setData($data);
6980

70-
$model->setData($data);
81+
// try to save it
82+
try {
83+
// save the data
84+
$model->save();
85+
// display success message
86+
$this->messageManager->addSuccess(__('You saved the sitemap.'));
87+
// clear previously saved data from session
88+
$this->_objectManager->get('Magento\Backend\Model\Session')->setFormData(false);
7189

72-
// try to save it
73-
try {
74-
// save the data
75-
$model->save();
76-
// display success message
77-
$this->messageManager->addSuccess(__('You saved the sitemap.'));
78-
// clear previously saved data from session
79-
$this->_objectManager->get('Magento\Backend\Model\Session')->setFormData(false);
90+
// check if 'Save and Continue'
91+
if ($this->getRequest()->getParam('back')) {
92+
return $this->resultFactory->create(Controller\ResultFactory::TYPE_REDIRECT)
93+
->setPath('adminhtml/*/edit', ['sitemap_id' => $model->getId()]);
94+
}
95+
// go to grid or forward to generate action
96+
if ($this->getRequest()->getParam('generate')) {
97+
$this->getRequest()->setParam('sitemap_id', $model->getId());
98+
return $this->resultFactory->create(Controller\ResultFactory::TYPE_FORWARD)->forward('generate');
99+
}
100+
return $this->resultFactory->create(Controller\ResultFactory::TYPE_REDIRECT)->setPath('adminhtml/*/');
101+
} catch (\Exception $e) {
102+
// display error message
103+
$this->messageManager->addError($e->getMessage());
104+
// save data in session
105+
$this->_objectManager->get('Magento\Backend\Model\Session')->setFormData($data);
106+
// redirect to edit form
107+
return $this->resultFactory->create(Controller\ResultFactory::TYPE_REDIRECT)
108+
->setPath('adminhtml/*/edit',['sitemap_id' => $this->getRequest()->getParam('sitemap_id')]);
109+
}
110+
}
80111

81-
// check if 'Save and Continue'
82-
if ($this->getRequest()->getParam('back')) {
83-
$this->_redirect('adminhtml/*/edit', ['sitemap_id' => $model->getId()]);
84-
return;
85-
}
86-
// go to grid or forward to generate action
87-
if ($this->getRequest()->getParam('generate')) {
88-
$this->getRequest()->setParam('sitemap_id', $model->getId());
89-
$this->_forward('generate');
90-
return;
91-
}
92-
$this->_redirect('adminhtml/*/');
93-
return;
94-
} catch (\Exception $e) {
95-
// display error message
96-
$this->messageManager->addError($e->getMessage());
97-
// save data in session
98-
$this->_objectManager->get('Magento\Backend\Model\Session')->setFormData($data);
99-
// redirect to edit form
100-
$this->_redirect(
112+
/**
113+
* Save action
114+
*
115+
* @return Controller\Result\Redirect
116+
*/
117+
public function execute()
118+
{
119+
// check if data sent
120+
$data = $this->getRequest()->getPostValue();
121+
if ($data) {
122+
if (!$this->validatePathToGenerate($data)) {
123+
/** @var Controller\Result\Redirect $resultRedirect */
124+
$resultRedirect = $this->resultFactory->create(Controller\ResultFactory::TYPE_REDIRECT);
125+
return $resultRedirect->setPath(
101126
'adminhtml/*/edit',
102127
['sitemap_id' => $this->getRequest()->getParam('sitemap_id')]
103128
);
104-
return;
105129
}
130+
$this->saveModel($data);
106131
}
107-
$this->_redirect('adminhtml/*/');
132+
return $this->resultFactory->create(Controller\ResultFactory::TYPE_REDIRECT)->setPath('adminhtml/*/');
108133
}
134+
109135
}
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Sitemap\Test\Unit\Controller\Adminhtml;
8+
9+
10+
class SaveTest extends \PHPUnit_Framework_TestCase
11+
{
12+
/**
13+
* @var \Magento\Framework\HTTP\PhpEnvironment\Request|\PHPUnit_Framework_MockObject_MockObject
14+
*/
15+
protected $request;
16+
17+
/**
18+
* @var \Magento\Framework\Controller\ResultFactory|\PHPUnit_Framework_MockObject_MockObject
19+
*/
20+
protected $resultFactory;
21+
22+
/**
23+
* @var \Magento\Backend\Model\View\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject
24+
*/
25+
protected $resultRedirect;
26+
27+
/**
28+
* @var \Magento\Sitemap\Controller\Adminhtml\Sitemap\Save|\PHPUnit_Framework_MockObject_MockObject
29+
*/
30+
protected $controller;
31+
32+
/**
33+
* @var \Magento\Backend\App\Action\Context|\PHPUnit_Framework_MockObject_MockObject
34+
*/
35+
protected $context;
36+
37+
protected function setUp()
38+
{
39+
$this->request = $this->getMock('Magento\Framework\HTTP\PhpEnvironment\Request', [], [], '', false);
40+
$this->resultRedirect = $this->getMock('Magento\Backend\Model\View\Result\Redirect', [], [], '', false);
41+
42+
$this->resultFactory = $this->getMock('Magento\Framework\Controller\ResultFactory', [], [], '', false);
43+
$this->resultFactory->expects($this->once())
44+
->method('create')
45+
->with(\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT)
46+
->willReturn($this->resultRedirect);
47+
48+
$this->context = $this->getMock('Magento\Backend\App\Action\Context', [], [], '', false);
49+
$this->context->expects($this->once())->method('getResultFactory')->willReturn($this->resultFactory);
50+
$this->context->expects($this->once())->method('getRequest')->willReturn($this->request);
51+
}
52+
53+
public function testSaveEmptyDataShouldRedirectToDefault()
54+
{
55+
$this->request->expects($this->once())->method('getPostValue')->willReturn([]);
56+
$this->resultRedirect->expects($this->once())->method('setPath')->with('adminhtml/*/')->willReturnSelf();
57+
58+
$this->controller = (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this))
59+
->getObject('Magento\Sitemap\Controller\Adminhtml\Sitemap\Save', ['context' => $this->context]);
60+
61+
$this->assertSame($this->resultRedirect, $this->controller->execute());
62+
}
63+
64+
public function testTryToSaveInvalidDataShouldFailWithErrors()
65+
{
66+
$validatorClass = 'Magento\MediaStorage\Model\File\Validator\AvailablePath';
67+
$helperClass = 'Magento\Sitemap\Helper\Data';
68+
$validPaths = [];
69+
$messages = ['message1', 'message2'];
70+
$sessionClass = 'Magento\Backend\Model\Session';
71+
$data = ['sitemap_filename' => 'sitemap_filename', 'sitemap_path' => '/sitemap_path'];
72+
$siteMapId = 1;
73+
74+
$this->request->expects($this->once())->method('getPostValue')->willReturn($data);
75+
$this->request->expects($this->once())->method('getParam')->with('sitemap_id')->willReturn($siteMapId);
76+
77+
$validator = $this->getMock($validatorClass, [], [], '', false);
78+
$validator->expects($this->once())->method('setPaths')->with($validPaths);
79+
$validator->expects($this->once())
80+
->method('isValid')
81+
->with('/sitemap_path/sitemap_filename')
82+
->willReturn(false);
83+
$validator->expects($this->once())->method('getMessages')->willReturn($messages);
84+
85+
$helper = $this->getMock($helperClass, [], [], '', false);
86+
$helper->expects($this->once())->method('getValidPaths')->willReturn($validPaths);
87+
88+
$session = $this->getMock($sessionClass, ['setFormData'], [], '', false);
89+
$session->expects($this->once())->method('setFormData')->with($data);
90+
91+
$objectManager = $this->getMock('Magento\Framework\ObjectManagerInterface', [], [], '', false);
92+
$objectManager->expects($this->once())
93+
->method('create')
94+
->with($validatorClass)
95+
->willReturn($validator);
96+
$objectManager->expects($this->any())
97+
->method('get')
98+
->willReturnMap([[$helperClass, $helper], [$sessionClass, $session]]);
99+
100+
$messageManager = $this->getMock('Magento\Framework\Message\ManagerInterface', [], [], '', false);
101+
$messageManager->expects($this->at(0))->method('addError')->with($messages[0]);
102+
$messageManager->expects($this->at(1))->method('addError')->with($messages[1]);
103+
104+
$this->resultRedirect->expects($this->once())
105+
->method('setPath')
106+
->with('adminhtml/*/edit', ['sitemap_id' => $siteMapId])
107+
->willReturnSelf();
108+
109+
$this->context->expects($this->once())->method('getObjectManager')->willReturn($objectManager);
110+
$this->context->expects($this->once())->method('getMessageManager')->willReturn($messageManager);
111+
112+
$this->controller = (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this))
113+
->getObject('Magento\Sitemap\Controller\Adminhtml\Sitemap\Save', ['context' => $this->context]);
114+
115+
$this->assertSame($this->resultRedirect, $this->controller->execute());
116+
}
117+
}

0 commit comments

Comments
 (0)