123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\AdminNotification\Test\Unit\Model;
- use Magento\Framework\Config\ConfigOptionsListConstants;
- use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class FeedTest extends \PHPUnit\Framework\TestCase
- {
- /** @var \Magento\AdminNotification\Model\Feed */
- protected $feed;
- /** @var ObjectManagerHelper */
- protected $objectManagerHelper;
- /** @var \Magento\AdminNotification\Model\InboxFactory|\PHPUnit_Framework_MockObject_MockObject */
- protected $inboxFactory;
- /** @var \Magento\AdminNotification\Model\Inbox|\PHPUnit_Framework_MockObject_MockObject */
- protected $inboxModel;
- /** @var \Magento\Framework\HTTP\Adapter\CurlFactory|\PHPUnit_Framework_MockObject_MockObject */
- protected $curlFactory;
- /** @var \Magento\Framework\HTTP\Adapter\Curl|\PHPUnit_Framework_MockObject_MockObject */
- protected $curl;
- /** @var \Magento\Backend\App\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $backendConfig;
- /** @var \Magento\Framework\App\CacheInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $cacheManager;
- /** @var \Magento\Framework\App\State|\PHPUnit_Framework_MockObject_MockObject */
- protected $appState;
- /** @var \Magento\Framework\App\DeploymentConfig|\PHPUnit_Framework_MockObject_MockObject */
- protected $deploymentConfig;
- /** @var \Magento\Framework\App\ProductMetadata|\PHPUnit_Framework_MockObject_MockObject */
- protected $productMetadata;
- /** @var \Magento\Framework\UrlInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $urlBuilder;
- protected function setUp()
- {
- $this->inboxFactory = $this->createPartialMock(
- \Magento\AdminNotification\Model\InboxFactory::class,
- ['create']
- );
- $this->curlFactory = $this->createPartialMock(\Magento\Framework\HTTP\Adapter\CurlFactory::class, ['create']);
- $this->curl = $this->getMockBuilder(\Magento\Framework\HTTP\Adapter\Curl::class)
- ->disableOriginalConstructor()->getMock();
- $this->appState = $this->createPartialMock(\Magento\Framework\App\State::class, ['getInstallDate']);
- $this->inboxModel = $this->createPartialMock(\Magento\AdminNotification\Model\Inbox::class, [
- '__wakeup',
- 'parse'
- ]);
- $this->backendConfig = $this->createPartialMock(
- \Magento\Backend\App\ConfigInterface::class,
- [
- 'getValue',
- 'setValue',
- 'isSetFlag'
- ]
- );
- $this->cacheManager = $this->createPartialMock(
- \Magento\Framework\App\CacheInterface::class,
- [
- 'load',
- 'getFrontend',
- 'remove',
- 'save',
- 'clean'
- ]
- );
- $this->deploymentConfig = $this->getMockBuilder(\Magento\Framework\App\DeploymentConfig::class)
- ->disableOriginalConstructor()->getMock();
- $this->objectManagerHelper = new ObjectManagerHelper($this);
- $this->productMetadata = $this->getMockBuilder(\Magento\Framework\App\ProductMetadata::class)
- ->disableOriginalConstructor()->getMock();
- $this->urlBuilder = $this->createMock(\Magento\Framework\UrlInterface::class);
- $this->feed = $this->objectManagerHelper->getObject(
- \Magento\AdminNotification\Model\Feed::class,
- [
- 'backendConfig' => $this->backendConfig,
- 'cacheManager' => $this->cacheManager,
- 'inboxFactory' => $this->inboxFactory,
- 'appState' => $this->appState,
- 'curlFactory' => $this->curlFactory,
- 'deploymentConfig' => $this->deploymentConfig,
- 'productMetadata' => $this->productMetadata,
- 'urlBuilder' => $this->urlBuilder
- ]
- );
- }
- /**
- * @dataProvider checkUpdateDataProvider
- * @param bool $callInbox
- * @param string $curlRequest
- */
- public function testCheckUpdate($callInbox, $curlRequest)
- {
- $mockName = 'Test Product Name';
- $mockVersion = '0.0.0';
- $mockEdition = 'Test Edition';
- $mockUrl = 'http://test-url';
- $this->productMetadata->expects($this->once())->method('getName')->willReturn($mockName);
- $this->productMetadata->expects($this->once())->method('getVersion')->willReturn($mockVersion);
- $this->productMetadata->expects($this->once())->method('getEdition')->willReturn($mockEdition);
- $this->urlBuilder->expects($this->once())->method('getUrl')->with('*/*/*')->willReturn($mockUrl);
- $configValues = [
- 'timeout' => 2,
- 'useragent' => $mockName . '/' . $mockVersion . ' (' . $mockEdition . ')',
- 'referer' => $mockUrl
- ];
- $lastUpdate = 0;
- $this->cacheManager->expects($this->once())->method('load')->will(($this->returnValue($lastUpdate)));
- $this->curlFactory->expects($this->at(0))->method('create')->will($this->returnValue($this->curl));
- $this->curl->expects($this->once())->method('setConfig')->with($configValues)->willReturnSelf();
- $this->curl->expects($this->once())->method('read')->will($this->returnValue($curlRequest));
- $this->backendConfig->expects($this->at(0))->method('getValue')->will($this->returnValue('1'));
- $this->backendConfig->expects($this->once())->method('isSetFlag')->will($this->returnValue(false));
- $this->backendConfig->expects($this->at(1))->method('getValue')
- ->will($this->returnValue('http://feed.magento.com'));
- $this->deploymentConfig->expects($this->once())->method('get')
- ->with(ConfigOptionsListConstants::CONFIG_PATH_INSTALL_DATE)
- ->will($this->returnValue('Sat, 6 Sep 2014 16:46:11 UTC'));
- if ($callInbox) {
- $this->inboxFactory->expects($this->once())->method('create')
- ->will($this->returnValue($this->inboxModel));
- $this->inboxModel->expects($this->once())
- ->method('parse')
- ->with(
- $this->callback(
- function ($data) {
- $fieldsToCheck = ['title', 'description', 'url'];
- return array_reduce(
- $fieldsToCheck,
- function ($initialValue, $item) use ($data) {
- $haystack = $data[0][$item] ?? false;
- return $haystack
- ? $initialValue && !strpos($haystack, '<') && !strpos($haystack, '>')
- : true;
- },
- true
- );
- }
- )
- )
- ->will($this->returnSelf());
- } else {
- $this->inboxFactory->expects($this->never())->method('create');
- $this->inboxModel->expects($this->never())->method('parse');
- }
- $this->feed->checkUpdate();
- }
- /**
- * @return array
- */
- public function checkUpdateDataProvider()
- {
- return [
- [
- true,
- 'HEADER
- <?xml version="1.0" encoding="utf-8" ?>
- <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
- <channel>
- <title>MagentoCommerce</title>
- <item>
- <title><![CDATA[Test Title]]></title>
- <link><![CDATA[http://magento.com/feed_url]]></link>
- <severity>4</severity>
- <description><![CDATA[Test Description]]></description>
- <pubDate>Tue, 9 Sep 2014 16:46:11 UTC</pubDate>
- </item>
- </channel>
- </rss>',
- ],
- [
- false,
- 'HEADER
- <?xml version="1.0" encoding="utf-8" ?>
- <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
- <channel>
- <title>MagentoCommerce</title>
- <item>
- <title><![CDATA[Test Title]]></title>
- <link><![CDATA[http://magento.com/feed_url]]></link>
- <severity>4</severity>
- <description><![CDATA[Test Description]]></description>
- <pubDate>Tue, 1 Sep 2014 16:46:11 UTC</pubDate>
- </item>
- </channel>
- </rss>'
- ],
- [
- true,
- // @codingStandardsIgnoreStart
- 'HEADER
- <?xml version="1.0" encoding="utf-8" ?>
- <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
- <channel>
- <title>MagentoCommerce</title>
- <item>
- <title><![CDATA[<script>alert("Hello!");</script>Test Title]]></title>
- <link><![CDATA[http://magento.com/feed_url<script>alert("Hello!");</script>]]></link>
- <severity>4</severity>
- <description><![CDATA[Test <script>alert("Hello!");</script>Description]]></description>
- <pubDate>Tue, 20 Jun 2017 13:14:47 UTC</pubDate>
- </item>
- </channel>
- </rss>'
- // @codingStandardsIgnoreEnd
- ],
- ];
- }
- }
|