RssTest.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Rss\Test\Unit\Model;
  7. use Magento\Framework\Serialize\SerializerInterface;
  8. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  9. class RssTest extends \PHPUnit\Framework\TestCase
  10. {
  11. /**
  12. * @var \Magento\Rss\Model\Rss
  13. */
  14. protected $rss;
  15. /**
  16. * @var array
  17. */
  18. private $feedData = [
  19. 'title' => 'Feed Title',
  20. 'link' => 'http://magento.com/rss/link',
  21. 'description' => 'Feed Description',
  22. 'charset' => 'UTF-8',
  23. 'entries' => [
  24. [
  25. 'title' => 'Feed 1 Title',
  26. 'link' => 'http://magento.com/rss/link/id/1',
  27. 'description' => 'Feed 1 Description',
  28. ],
  29. ],
  30. ];
  31. /**
  32. * @var string
  33. */
  34. private $feedXml = '<?xml version="1.0" encoding="UTF-8"?>
  35. <rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  36. <channel>
  37. <title><![CDATA[Feed Title]]></title>
  38. <link>http://magento.com/rss/link</link>
  39. <description><![CDATA[Feed Description]]></description>
  40. <pubDate>Sat, 22 Apr 2017 13:21:12 +0200</pubDate>
  41. <generator>Zend\Feed</generator>
  42. <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  43. <item>
  44. <title><![CDATA[Feed 1 Title]]></title>
  45. <link>http://magento.com/rss/link/id/1</link>
  46. <description><![CDATA[Feed 1 Description]]></description>
  47. <pubDate>Sat, 22 Apr 2017 13:21:12 +0200</pubDate>
  48. </item>
  49. </channel>
  50. </rss>';
  51. /**
  52. * @var ObjectManagerHelper
  53. */
  54. protected $objectManagerHelper;
  55. /**
  56. * @var \Magento\Framework\App\CacheInterface|\PHPUnit_Framework_MockObject_MockObject
  57. */
  58. private $cacheMock;
  59. /**
  60. * @var \Magento\Framework\App\FeedFactoryInterface|\PHPUnit_Framework_MockObject_MockObject
  61. */
  62. private $feedFactoryMock;
  63. /**
  64. * @var \Magento\Framework\App\FeedInterface|\PHPUnit_Framework_MockObject_MockObject
  65. */
  66. private $feedMock;
  67. /**
  68. * @var SerializerInterface|\PHPUnit_Framework_MockObject_MockObject
  69. */
  70. private $serializerMock;
  71. protected function setUp()
  72. {
  73. $this->cacheMock = $this->createMock(\Magento\Framework\App\CacheInterface::class);
  74. $this->serializerMock = $this->createMock(SerializerInterface::class);
  75. $this->feedFactoryMock = $this->createMock(\Magento\Framework\App\FeedFactoryInterface::class);
  76. $this->feedMock = $this->createMock(\Magento\Framework\App\FeedInterface::class);
  77. $this->objectManagerHelper = new ObjectManagerHelper($this);
  78. $this->rss = $this->objectManagerHelper->getObject(
  79. \Magento\Rss\Model\Rss::class,
  80. [
  81. 'cache' => $this->cacheMock,
  82. 'feedFactory' => $this->feedFactoryMock,
  83. 'serializer' => $this->serializerMock
  84. ]
  85. );
  86. }
  87. public function testGetFeeds()
  88. {
  89. $dataProvider = $this->createMock(\Magento\Framework\App\Rss\DataProviderInterface::class);
  90. $dataProvider->expects($this->any())->method('getCacheKey')->will($this->returnValue('cache_key'));
  91. $dataProvider->expects($this->any())->method('getCacheLifetime')->will($this->returnValue(100));
  92. $dataProvider->expects($this->any())->method('getRssData')->will($this->returnValue($this->feedData));
  93. $this->rss->setDataProvider($dataProvider);
  94. $this->cacheMock->expects($this->once())
  95. ->method('load')
  96. ->with('cache_key')
  97. ->will($this->returnValue(false));
  98. $this->cacheMock->expects($this->once())
  99. ->method('save')
  100. ->with('serializedData')
  101. ->will($this->returnValue(true));
  102. $this->serializerMock->expects($this->once())
  103. ->method('serialize')
  104. ->with($this->feedData)
  105. ->willReturn('serializedData');
  106. $this->assertEquals($this->feedData, $this->rss->getFeeds());
  107. }
  108. public function testGetFeedsWithCache()
  109. {
  110. $dataProvider = $this->createMock(\Magento\Framework\App\Rss\DataProviderInterface::class);
  111. $dataProvider->expects($this->any())->method('getCacheKey')->will($this->returnValue('cache_key'));
  112. $dataProvider->expects($this->any())->method('getCacheLifetime')->will($this->returnValue(100));
  113. $dataProvider->expects($this->never())->method('getRssData');
  114. $this->rss->setDataProvider($dataProvider);
  115. $this->cacheMock->expects($this->once())
  116. ->method('load')
  117. ->with('cache_key')
  118. ->will($this->returnValue('serializedData'));
  119. $this->serializerMock->expects($this->once())
  120. ->method('unserialize')
  121. ->with('serializedData')
  122. ->willReturn($this->feedData);
  123. $this->cacheMock->expects($this->never())->method('save');
  124. $this->assertEquals($this->feedData, $this->rss->getFeeds());
  125. }
  126. public function testCreateRssXml()
  127. {
  128. $dataProvider = $this->createMock(\Magento\Framework\App\Rss\DataProviderInterface::class);
  129. $dataProvider->expects($this->any())->method('getCacheKey')->will($this->returnValue('cache_key'));
  130. $dataProvider->expects($this->any())->method('getCacheLifetime')->will($this->returnValue(100));
  131. $dataProvider->expects($this->any())->method('getRssData')->will($this->returnValue($this->feedData));
  132. $this->feedMock->expects($this->once())
  133. ->method('getFormattedContent')
  134. ->willReturn($this->feedXml);
  135. $this->feedFactoryMock->expects($this->once())
  136. ->method('create')
  137. ->with($this->feedData, \Magento\Framework\App\FeedFactoryInterface::FORMAT_RSS)
  138. ->will($this->returnValue($this->feedMock));
  139. $this->rss->setDataProvider($dataProvider);
  140. $this->assertNotNull($this->rss->createRssXml());
  141. }
  142. }