Skip to content

Commit ca9e582

Browse files
committed
Zend_Feed refactoring progress
1 parent 33261e7 commit ca9e582

File tree

9 files changed

+180
-9
lines changed

9 files changed

+180
-9
lines changed

app/code/Magento/Rss/Model/Rss.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ class Rss
2121
*/
2222
protected $cache;
2323

24+
/**
25+
* @var \Magento\Framework\App\FeedImporterInterface
26+
*/
27+
private $feedImporter;
28+
2429
/**
2530
* @var SerializerInterface
2631
*/
@@ -30,13 +35,16 @@ class Rss
3035
* Rss constructor
3136
*
3237
* @param \Magento\Framework\App\CacheInterface $cache
38+
* @param \Magento\Framework\App\FeedImporterInterface $feedImporter
3339
* @param SerializerInterface|null $serializer
3440
*/
3541
public function __construct(
3642
\Magento\Framework\App\CacheInterface $cache,
43+
\Magento\Framework\App\FeedImporterInterface $feedImporter,
3744
SerializerInterface $serializer = null
3845
) {
3946
$this->cache = $cache;
47+
$this->feedImporter = $feedImporter;
4048
$this->serializer = $serializer ?: ObjectManager::getInstance()->get(SerializerInterface::class);
4149
}
4250

@@ -86,7 +94,7 @@ public function setDataProvider(DataProviderInterface $dataProvider)
8694
*/
8795
public function createRssXml()
8896
{
89-
$rssFeedFromArray = \Zend_Feed::importArray($this->getFeeds(), 'rss');
90-
return $rssFeedFromArray->saveXML();
97+
$rssFeed = $this->feedImporter->importArray($this->getFeeds(), 'rss');
98+
return $rssFeed->asXML();
9199
}
92100
}

app/code/Magento/Rss/Test/Unit/Controller/Adminhtml/Feed/IndexTest.php

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,28 @@ public function testExecuteWithException()
102102
$this->scopeConfigInterface->expects($this->once())->method('getValue')->will($this->returnValue(true));
103103
$dataProvider = $this->getMock(\Magento\Framework\App\Rss\DataProviderInterface::class);
104104
$dataProvider->expects($this->once())->method('isAllowed')->will($this->returnValue(true));
105+
$dataProvider->expects($this->once())->method('getRssData')->will($this->returnValue([]));
105106

106-
$rssModel = $this->getMock(\Magento\Rss\Model\Rss::class, ['setDataProvider'], [], '', false);
107-
$rssModel->expects($this->once())->method('setDataProvider')->will($this->returnSelf());
107+
$objectManagerHelper = new ObjectManagerHelper($this);
108+
$feedImporter = $objectManagerHelper->getObject(
109+
\Magento\Framework\App\Feed\Importer::class,
110+
[
111+
'feedProcessor' => $objectManagerHelper->getObject(\Zend_Feed::class),
112+
]
113+
);
114+
115+
$rssModel = $objectManagerHelper->getObject(
116+
\Magento\Rss\Model\Rss::class,
117+
[
118+
'feedImporter' => $feedImporter,
119+
]
120+
);
108121

109122
$this->response->expects($this->once())->method('setHeader')->will($this->returnSelf());
110123
$this->rssFactory->expects($this->once())->method('create')->will($this->returnValue($rssModel));
111124
$this->rssManager->expects($this->once())->method('getProvider')->will($this->returnValue($dataProvider));
112125

113-
$this->setExpectedException('\Zend_Feed_Builder_Exception');
126+
$this->setExpectedException('\Magento\Framework\Exception\FeedImporterException');
114127
$this->controller->execute();
115128
}
116129
}

app/code/Magento/Rss/Test/Unit/Controller/Feed/IndexTest.php

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ protected function setUp()
5252
->disableOriginalConstructor()->getMock();
5353

5454
$objectManagerHelper = new ObjectManagerHelper($this);
55+
5556
$this->controller = $objectManagerHelper->getObject(
5657
\Magento\Rss\Controller\Feed\Index::class,
5758
[
@@ -89,15 +90,27 @@ public function testExecuteWithException()
8990
$this->scopeConfigInterface->expects($this->once())->method('getValue')->will($this->returnValue(true));
9091
$dataProvider = $this->getMock(\Magento\Framework\App\Rss\DataProviderInterface::class);
9192
$dataProvider->expects($this->once())->method('isAllowed')->will($this->returnValue(true));
92-
93-
$rssModel = $this->getMock(\Magento\Rss\Model\Rss::class, ['setDataProvider'], [], '', false);
94-
$rssModel->expects($this->once())->method('setDataProvider')->will($this->returnSelf());
93+
$dataProvider->expects($this->once())->method('getRssData')->will($this->returnValue([]));
94+
95+
$objectManagerHelper = new ObjectManagerHelper($this);
96+
$feedImporter = $objectManagerHelper->getObject(
97+
\Magento\Framework\App\Feed\Importer::class,
98+
[
99+
'feedProcessor' => $objectManagerHelper->getObject(\Zend_Feed::class),
100+
]
101+
);
102+
$rssModel = $objectManagerHelper->getObject(
103+
\Magento\Rss\Model\Rss::class,
104+
[
105+
'feedImporter' => $feedImporter,
106+
]
107+
);
95108

96109
$this->response->expects($this->once())->method('setHeader')->will($this->returnSelf());
97110
$this->rssFactory->expects($this->once())->method('create')->will($this->returnValue($rssModel));
98111
$this->rssManager->expects($this->once())->method('getProvider')->will($this->returnValue($dataProvider));
99112

100-
$this->setExpectedException('\Zend_Feed_Builder_Exception');
113+
$this->setExpectedException('\Magento\Framework\Exception\FeedImporterException');
101114
$this->controller->execute();
102115
}
103116
}

app/etc/di.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@
170170
<preference for="Magento\Framework\App\View\Deployment\Version\StorageInterface" type="Magento\Framework\App\View\Deployment\Version\Storage\File"/>
171171
<preference for="Magento\Framework\View\Page\FaviconInterface" type="Magento\Theme\Model\Favicon\Favicon" />
172172
<preference for="Magento\Framework\View\Element\Message\InterpretationStrategyInterface" type="Magento\Framework\View\Element\Message\InterpretationMediator" />
173+
<preference for="Magento\Framework\App\FeedInterface" type="Magento\Framework\App\Feed" />
174+
<preference for="Magento\Framework\App\FeedImporterInterface" type="Magento\Framework\App\Feed\Importer" />
173175
<type name="Magento\Framework\Model\ResourceModel\Db\TransactionManager" shared="false" />
174176
<type name="Magento\Framework\Acl\Data\Cache">
175177
<arguments>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\App;
7+
8+
class Feed implements \Magento\Framework\App\FeedInterface
9+
{
10+
/**
11+
* @var \Magento\Framework\App\FeedImporterInterface
12+
*/
13+
private $feed;
14+
15+
/**
16+
* @param \Zend_Feed_Abstract $feed
17+
*/
18+
public function __construct(\Zend_Feed_Abstract $feed)
19+
{
20+
$this->feed = $feed;
21+
}
22+
23+
/**
24+
* Get the xml from Zend_Feed_Abstract object
25+
*
26+
* @return string
27+
*/
28+
public function asXml()
29+
{
30+
return $this->feed->saveXml();
31+
}
32+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\App\Feed;
7+
8+
/**
9+
* Feed importer
10+
*/
11+
class Importer implements \Magento\Framework\App\FeedImporterInterface
12+
{
13+
/**
14+
* @var \Zend_Feed
15+
*/
16+
private $feedProcessor;
17+
18+
/**
19+
* @var \Magento\Framework\App\FeedFactory
20+
*/
21+
private $feedFactory;
22+
23+
/**
24+
* @param \Zend_Feed $feedProcessor
25+
* @param \Magento\Framework\App\FeedFactory $feedFactory
26+
*/
27+
public function __construct(
28+
\Zend_Feed $feedProcessor,
29+
\Magento\Framework\App\FeedFactory $feedFactory
30+
) {
31+
$this->feedProcessor = $feedProcessor;
32+
$this->feedFactory = $feedFactory;
33+
}
34+
35+
/**
36+
* Get a new \Magento\Framework\App\Feed object from a custom array
37+
*
38+
* @throws \Magento\Framework\Exception\FeedImporterException
39+
* @param array $data
40+
* @param string $format
41+
* @return \Magento\Framework\App\FeedInterface
42+
*/
43+
public function importArray(array $data, $format = 'atom')
44+
{
45+
try {
46+
$feed = $this->feedProcessor->importArray($data, $format);
47+
return $this->feedFactory->create(['feed' => $feed]);
48+
}
49+
catch (\Zend_Feed_Exception $e) {
50+
throw new \Magento\Framework\Exception\FeedImporterException(
51+
new \Magento\Framework\Phrase($e->getMessage()),
52+
$e
53+
);
54+
}
55+
}
56+
}
57+
58+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\App;
7+
8+
interface FeedImporterInterface
9+
{
10+
11+
/**
12+
* @throws \Magento\Framework\Exception\FeedImporterException
13+
* @param array $data
14+
* @param string $format
15+
* @return FeedInterface
16+
*/
17+
public function importArray(array $data, $format = 'atom');
18+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\App;
7+
8+
interface FeedInterface
9+
{
10+
/**
11+
* @return string
12+
*/
13+
public function asXml();
14+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
/**
3+
* Feed importer exception
4+
*
5+
* Copyright © Magento, Inc. All rights reserved.
6+
* See COPYING.txt for license details.
7+
*/
8+
namespace Magento\Framework\Exception;
9+
10+
class FeedImporterException extends LocalizedException
11+
{
12+
13+
}

0 commit comments

Comments
 (0)