Skip to content

Commit a81b5ad

Browse files
committed
MAGETWO-58383: [Backport] - [GitHub] Saving CMS page does not create URL rewrite in Magento 2.1.0 with single-store mode #5923 - for 2.1
1 parent 7fa17f3 commit a81b5ad

File tree

8 files changed

+365
-110
lines changed

8 files changed

+365
-110
lines changed

app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,23 +35,33 @@ class Save extends \Magento\Backend\App\Action
3535
*/
3636
private $pageFactory;
3737

38+
/**
39+
* @var \Magento\Cms\Api\PageRepositoryInterface
40+
*/
41+
private $pageRepository;
42+
3843
/**
3944
* @param Action\Context $context
4045
* @param PostDataProcessor $dataProcessor
4146
* @param DataPersistorInterface $dataPersistor
4247
* @param \Magento\Cms\Model\PageFactory $pageFactory
48+
* @param \Magento\Cms\Api\PageRepositoryInterface $pageRepository
49+
*
4350
*/
4451
public function __construct(
4552
Action\Context $context,
4653
PostDataProcessor $dataProcessor,
4754
DataPersistorInterface $dataPersistor,
48-
\Magento\Cms\Model\PageFactory $pageFactory = null
55+
\Magento\Cms\Model\PageFactory $pageFactory = null,
56+
\Magento\Cms\Api\PageRepositoryInterface $pageRepository = null
4957
) {
5058
$this->dataProcessor = $dataProcessor;
5159
$this->dataPersistor = $dataPersistor;
5260
$this->pageFactory = $pageFactory
5361
?: \Magento\Framework\App\ObjectManager::getInstance()->get(\Magento\Cms\Model\PageFactory::class);
54-
62+
$this->pageRepository = $pageRepository
63+
?: \Magento\Framework\App\ObjectManager::getInstance()
64+
->get(\Magento\Cms\Api\PageRepositoryInterface::class);
5565
parent::__construct($context);
5666
}
5767

@@ -102,7 +112,7 @@ public function execute()
102112
}
103113

104114
try {
105-
$model->save();
115+
$this->pageRepository->save($model);
106116
$this->messageManager->addSuccess(__('You saved the page.'));
107117
$this->dataPersistor->clear('cms_page');
108118
if ($this->getRequest()->getParam('back')) {

app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/SaveTest.php

Lines changed: 64 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -13,78 +13,61 @@ class SaveTest extends \PHPUnit_Framework_TestCase
1313
/**
1414
* @var \Magento\Framework\App\RequestInterface|\PHPUnit_Framework_MockObject_MockObject
1515
*/
16-
protected $requestMock;
16+
private $requestMock;
1717

1818
/**
1919
* @var \Magento\Cms\Controller\Adminhtml\Page\PostDataProcessor|\PHPUnit_Framework_MockObject_MockObject
2020
*/
21-
protected $dataProcessorMock;
21+
private $dataProcessorMock;
2222

2323
/**
2424
* @var \Magento\Framework\App\Request\DataPersistorInterface|\PHPUnit_Framework_MockObject_MockObject
2525
*/
26-
protected $dataPersistorMock;
26+
private $dataPersistorMock;
2727

2828
/**
2929
* @var \Magento\Backend\Model\View\Result\RedirectFactory|\PHPUnit_Framework_MockObject_MockObject
3030
*/
31-
protected $resultRedirectFactory;
31+
private $resultRedirectFactory;
3232

3333
/**
3434
* @var \Magento\Backend\Model\View\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject
3535
*/
36-
protected $resultRedirect;
37-
38-
/**
39-
* @var \Magento\Backend\App\Action\Context|\PHPUnit_Framework_MockObject_MockObject
40-
*/
41-
protected $contextMock;
42-
43-
/**
44-
* @var \Magento\Framework\ObjectManager\ObjectManager|\PHPUnit_Framework_MockObject_MockObject
45-
*/
46-
protected $objectManagerMock;
47-
48-
/**
49-
* @var \Magento\Cms\Model\Page|\PHPUnit_Framework_MockObject_MockObject $pageMock
50-
*/
51-
protected $pageMock;
36+
private $resultRedirect;
5237

5338
/**
5439
* @var \Magento\Framework\Message\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
5540
*/
56-
protected $messageManagerMock;
41+
private $messageManagerMock;
5742

5843
/**
5944
* @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
6045
*/
61-
protected $eventManagerMock;
46+
private $eventManagerMock;
6247

6348
/**
64-
* @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
49+
* @var \Magento\Cms\Model\PageFactory|\PHPUnit_Framework_MockObject_MockObject
6550
*/
66-
protected $objectManager;
51+
private $pageFactory;
6752

6853
/**
69-
* @var \Magento\Cms\Controller\Adminhtml\Page\Save
54+
* @var \Magento\Cms\Api\PageRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject
7055
*/
71-
protected $saveController;
56+
private $pageRepository;
7257

7358
/**
74-
* @var \Magento\Cms\Model\PageFactory|\PHPUnit_Framework_MockObject_MockObject
59+
* @var \Magento\Cms\Controller\Adminhtml\Page\Save
7560
*/
76-
private $pageFactory;
61+
private $saveController;
7762

7863
/**
7964
* @var int
8065
*/
81-
protected $pageId = 1;
66+
private $pageId = 1;
8267

8368
protected function setUp()
8469
{
85-
$this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
86-
87-
$this->contextMock = $this->getMock(\Magento\Backend\App\Action\Context::class, [], [], '', false);
70+
$objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
8871

8972
$this->resultRedirectFactory = $this->getMockBuilder(\Magento\Backend\Model\View\Result\RedirectFactory::class)
9073
->disableOriginalConstructor()
@@ -96,69 +79,37 @@ protected function setUp()
9679
$this->resultRedirectFactory->expects($this->atLeastOnce())
9780
->method('create')
9881
->willReturn($this->resultRedirect);
99-
100-
$this->dataProcessorMock = $this->getMock(
101-
\Magento\Cms\Controller\Adminhtml\Page\PostDataProcessor::class,
102-
['filter'],
103-
[],
104-
'',
105-
false
106-
);
107-
82+
$this->dataProcessorMock = $this->getMockBuilder(
83+
\Magento\Cms\Controller\Adminhtml\Page\PostDataProcessor::class
84+
)->setMethods(['filter'])->disableOriginalConstructor()->getMock();
10885
$this->dataPersistorMock = $this->getMockBuilder(\Magento\Framework\App\Request\DataPersistorInterface::class)
10986
->getMock();
110-
111-
$this->requestMock = $this->getMockForAbstractClass(
112-
\Magento\Framework\App\RequestInterface::class,
113-
[],
114-
'',
115-
false,
116-
true,
117-
true,
118-
['getParam', 'getPostValue']
119-
);
120-
121-
$this->pageMock = $this->getMockBuilder(\Magento\Cms\Model\Page::class)
122-
->disableOriginalConstructor()
123-
->getMock();
124-
125-
$this->messageManagerMock = $this->getMock(
126-
\Magento\Framework\Message\ManagerInterface::class,
127-
[],
128-
[],
129-
'',
130-
false
131-
);
132-
133-
$this->eventManagerMock = $this->getMockForAbstractClass(
134-
\Magento\Framework\Event\ManagerInterface::class,
135-
[],
136-
'',
137-
false,
138-
true,
139-
true,
140-
['dispatch']
141-
);
142-
143-
$this->contextMock->expects($this->any())->method('getRequest')->willReturn($this->requestMock);
144-
$this->contextMock->expects($this->any())->method('getMessageManager')->willReturn($this->messageManagerMock);
145-
$this->contextMock->expects($this->any())->method('getEventManager')->willReturn($this->eventManagerMock);
146-
$this->contextMock->expects($this->any())
147-
->method('getResultRedirectFactory')
148-
->willReturn($this->resultRedirectFactory);
149-
87+
$this->requestMock = $this->getMockBuilder(\Magento\Framework\App\RequestInterface::class)
88+
->setMethods(['getParam', 'getPostValue'])
89+
->getMockForAbstractClass();
90+
$this->messageManagerMock = $this->getMockBuilder(\Magento\Framework\Message\ManagerInterface::class)
91+
->getMockForAbstractClass();
92+
$this->eventManagerMock = $this->getMockBuilder(\Magento\Framework\Event\ManagerInterface::class)
93+
->setMethods(['dispatch'])
94+
->getMockForAbstractClass();
15095
$this->pageFactory = $this->getMockBuilder(\Magento\Cms\Model\PageFactory::class)
96+
->disableOriginalConstructor()
15197
->setMethods(['create'])
98+
->getMock();
99+
$this->pageRepository = $this->getMockBuilder(\Magento\Cms\Api\PageRepositoryInterface::class)
152100
->disableOriginalConstructor()
153101
->getMockForAbstractClass();
154-
155-
$this->saveController = $this->objectManager->getObject(
102+
$this->saveController = $objectManager->getObject(
156103
\Magento\Cms\Controller\Adminhtml\Page\Save::class,
157104
[
158-
'context' => $this->contextMock,
105+
'request' => $this->requestMock,
106+
'messageManager' => $this->messageManagerMock,
107+
'eventManager' => $this->eventManagerMock,
108+
'resultRedirectFactory' => $this->resultRedirectFactory,
159109
'dataProcessor' => $this->dataProcessorMock,
160110
'dataPersistor' => $this->dataPersistorMock,
161-
'pageFactory' => $this->pageFactory,
111+
'pageFactory' => $this->pageFactory,
112+
'pageRepository' => $this->pageRepository
162113
]
163114
);
164115
}
@@ -195,19 +146,21 @@ public function testSaveAction()
195146
['back', null, false],
196147
]
197148
);
198-
199-
$this->pageFactory->expects($this->once())
149+
$page = $this->getMockBuilder(\Magento\Cms\Model\Page::class)
150+
->disableOriginalConstructor()
151+
->getMock();
152+
$this->pageFactory->expects($this->atLeastOnce())
200153
->method('create')
201-
->willReturn($this->pageMock);
154+
->willReturn($page);
202155

203-
$this->pageMock->expects($this->any())
156+
$page->expects($this->any())
204157
->method('load')
205158
->willReturnSelf();
206-
$this->pageMock->expects($this->any())
159+
$page->expects($this->any())
207160
->method('getId')
208161
->willReturn(true);
209-
$this->pageMock->expects($this->once())->method('setData');
210-
$this->pageMock->expects($this->once())->method('save');
162+
$page->expects($this->once())->method('setData');
163+
$this->pageRepository->expects($this->once())->method('save')->with($page);
211164

212165
$this->dataPersistorMock->expects($this->any())
213166
->method('clear')
@@ -244,19 +197,21 @@ public function testSaveAndContinue()
244197
$this->dataProcessorMock->expects($this->any())
245198
->method('filter')
246199
->willReturnArgument(0);
247-
248-
$this->pageFactory->expects($this->once())
200+
$page = $this->getMockBuilder(\Magento\Cms\Model\Page::class)
201+
->disableOriginalConstructor()
202+
->getMock();
203+
$this->pageFactory->expects($this->atLeastOnce())
249204
->method('create')
250-
->willReturn($this->pageMock);
205+
->willReturn($page);
251206

252-
$this->pageMock->expects($this->any())
207+
$page->expects($this->any())
253208
->method('load')
254209
->willReturnSelf();
255-
$this->pageMock->expects($this->any())
210+
$page->expects($this->any())
256211
->method('getId')
257212
->willReturn(true);
258-
$this->pageMock->expects($this->once())->method('setData');
259-
$this->pageMock->expects($this->once())->method('save');
213+
$page->expects($this->once())->method('setData');
214+
$this->pageRepository->expects($this->once())->method('save')->with($page);
260215

261216
$this->messageManagerMock->expects($this->once())
262217
->method('addSuccess')
@@ -289,19 +244,22 @@ public function testSaveActionThrowsException()
289244
$this->dataProcessorMock->expects($this->any())
290245
->method('filter')
291246
->willReturnArgument(0);
292-
293-
$this->pageFactory->expects($this->once())
247+
$page = $this->getMockBuilder(\Magento\Cms\Model\Page::class)
248+
->disableOriginalConstructor()
249+
->getMock();
250+
$this->pageFactory->expects($this->atLeastOnce())
294251
->method('create')
295-
->willReturn($this->pageMock);
252+
->willReturn($page);
296253

297-
$this->pageMock->expects($this->any())
254+
$page->expects($this->any())
298255
->method('load')
299256
->willReturnSelf();
300-
$this->pageMock->expects($this->any())
257+
$page->expects($this->any())
301258
->method('getId')
302259
->willReturn(true);
303-
$this->pageMock->expects($this->once())->method('setData');
304-
$this->pageMock->expects($this->once())->method('save')->willThrowException(new \Exception('Error message.'));
260+
$page->expects($this->once())->method('setData');
261+
$this->pageRepository->expects($this->once())->method('save')->with($page)
262+
->willThrowException(new \Exception('Error message.'));
305263

306264
$this->messageManagerMock->expects($this->never())
307265
->method('addSuccess');

0 commit comments

Comments
 (0)