RssTest.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_Feed
  17. * @subpackage UnitTests
  18. * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
  19. * @license http://framework.zend.com/license/new-bsd New BSD License
  20. * @version $Id$
  21. */
  22. require_once dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))) . DIRECTORY_SEPARATOR . 'TestHelper.php';
  23. require_once 'Zend/Feed/Writer/Renderer/Feed/Rss.php';
  24. require_once 'Zend/Feed/Reader.php';
  25. require_once 'Zend/Version.php';
  26. /**
  27. * @category Zend
  28. * @package Zend_Feed
  29. * @subpackage UnitTests
  30. * @group Zend_Feed
  31. * @group Zend_Feed_Writer
  32. * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
  33. * @license http://framework.zend.com/license/new-bsd New BSD License
  34. */
  35. class Zend_Feed_Writer_Renderer_Feed_RssTest extends PHPUnit_Framework_TestCase
  36. {
  37. protected $_validWriter = null;
  38. public function setUp()
  39. {
  40. $this->_validWriter = new Zend_Feed_Writer_Feed;
  41. $this->_validWriter->setTitle('This is a test feed.');
  42. $this->_validWriter->setDescription('This is a test description.');
  43. $this->_validWriter->setLink('http://www.example.com');
  44. $this->_validWriter->setType('rss');
  45. }
  46. public function tearDown()
  47. {
  48. $this->_validWriter = null;
  49. }
  50. public function testSetsWriterInConstructor()
  51. {
  52. $writer = new Zend_Feed_Writer_Feed;
  53. $feed = new Zend_Feed_Writer_Renderer_Feed_Rss($writer);
  54. $this->assertTrue($feed->getDataContainer() instanceof Zend_Feed_Writer_Feed);
  55. }
  56. public function testBuildMethodRunsMinimalWriterContainerProperlyBeforeICheckRssCompliance()
  57. {
  58. $feed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  59. try {
  60. $feed->render();
  61. } catch (Zend_Feed_Exception $e) {
  62. $this->fail('Valid Writer object caused an exception when building which should never happen');
  63. }
  64. }
  65. public function testFeedEncodingHasBeenSet()
  66. {
  67. $this->_validWriter->setEncoding('iso-8859-1');
  68. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  69. $rssFeed->render();
  70. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  71. $this->assertEquals('iso-8859-1', $feed->getEncoding());
  72. }
  73. public function testFeedEncodingDefaultIsUsedIfEncodingNotSetByHand()
  74. {
  75. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  76. $rssFeed->render();
  77. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  78. $this->assertEquals('UTF-8', $feed->getEncoding());
  79. }
  80. public function testFeedTitleHasBeenSet()
  81. {
  82. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  83. $rssFeed->render();
  84. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  85. $this->assertEquals('This is a test feed.', $feed->getTitle());
  86. }
  87. /**
  88. * @expectedException Zend_Feed_Exception
  89. */
  90. public function testFeedTitleIfMissingThrowsException()
  91. {
  92. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  93. $this->_validWriter->remove('title');
  94. $rssFeed->render();
  95. }
  96. public function testFeedDescriptionHasBeenSet()
  97. {
  98. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  99. $rssFeed->render();
  100. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  101. $this->assertEquals('This is a test description.', $feed->getDescription());
  102. }
  103. /**
  104. * @expectedException Zend_Feed_Exception
  105. */
  106. public function testFeedDescriptionThrowsExceptionIfMissing()
  107. {
  108. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  109. $this->_validWriter->remove('description');
  110. $rssFeed->render();
  111. }
  112. public function testFeedUpdatedDateHasBeenSet()
  113. {
  114. $this->_validWriter->setDateModified(1234567890);
  115. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  116. $rssFeed->render();
  117. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  118. $this->assertEquals(1234567890, $feed->getDateModified()->get(Zend_Date::TIMESTAMP));
  119. }
  120. public function testFeedUpdatedDateIfMissingThrowsNoException()
  121. {
  122. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  123. $this->_validWriter->remove('dateModified');
  124. $rssFeed->render();
  125. }
  126. public function testFeedGeneratorHasBeenSet()
  127. {
  128. $this->_validWriter->setGenerator('FooFeedBuilder', '1.00', 'http://www.example.com');
  129. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  130. $rssFeed->render();
  131. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  132. $this->assertEquals('FooFeedBuilder 1.00 (http://www.example.com)', $feed->getGenerator());
  133. }
  134. public function testFeedGeneratorIfMissingThrowsNoException()
  135. {
  136. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  137. $this->_validWriter->remove('generator');
  138. $rssFeed->render();
  139. }
  140. public function testFeedGeneratorDefaultIsUsedIfGeneratorNotSetByHand()
  141. {
  142. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  143. $rssFeed->render();
  144. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  145. $this->assertEquals('Zend_Feed_Writer ' . Zend_Version::VERSION . ' (http://framework.zend.com)', $feed->getGenerator());
  146. }
  147. public function testFeedLanguageHasBeenSet()
  148. {
  149. $this->_validWriter->setLanguage('fr');
  150. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  151. $rssFeed->render();
  152. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  153. $this->assertEquals('fr', $feed->getLanguage());
  154. }
  155. public function testFeedLanguageIfMissingThrowsNoException()
  156. {
  157. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  158. $this->_validWriter->remove('language');
  159. $rssFeed->render();
  160. }
  161. public function testFeedLanguageDefaultIsUsedIfGeneratorNotSetByHand()
  162. {
  163. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  164. $rssFeed->render();
  165. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  166. $this->assertEquals(null, $feed->getLanguage());
  167. }
  168. public function testFeedIncludesLinkToHtmlVersionOfFeed()
  169. {
  170. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  171. $rssFeed->render();
  172. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  173. $this->assertEquals('http://www.example.com', $feed->getLink());
  174. }
  175. /**
  176. * @expectedException Zend_Feed_Exception
  177. */
  178. public function testFeedLinkToHtmlVersionOfFeedIfMissingThrowsException()
  179. {
  180. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  181. $this->_validWriter->remove('link');
  182. $rssFeed->render();
  183. }
  184. public function testFeedIncludesLinkToXmlRssWhereTheFeedWillBeAvailable()
  185. {
  186. $this->_validWriter->setFeedLink('http://www.example.com/rss', 'rss');
  187. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  188. $rssFeed->render();
  189. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  190. $this->assertEquals('http://www.example.com/rss', $feed->getFeedLink());
  191. }
  192. public function testFeedLinkToXmlRssWhereTheFeedWillBeAvailableIfMissingThrowsNoException()
  193. {
  194. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  195. $this->_validWriter->remove('feedLinks');
  196. $rssFeed->render();
  197. }
  198. public function testBaseUrlCanBeSet()
  199. {
  200. $this->_validWriter->setBaseUrl('http://www.example.com/base');
  201. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  202. $rssFeed->render();
  203. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  204. $this->assertEquals('http://www.example.com/base', $feed->getBaseUrl());
  205. }
  206. /**
  207. * @group ZFW003
  208. */
  209. public function testFeedHoldsAnyAuthorAdded()
  210. {
  211. $this->_validWriter->addAuthor('Joe', 'joe@example.com', 'http://www.example.com/joe');
  212. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  213. $atomFeed->render();
  214. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  215. $author = $feed->getAuthor();
  216. $this->assertEquals(array('name'=>'Joe'), $feed->getAuthor());
  217. }
  218. public function testCopyrightCanBeSet()
  219. {
  220. $this->_validWriter->setCopyright('Copyright © 2009 Paddy');
  221. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  222. $rssFeed->render();
  223. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  224. $this->assertEquals('Copyright © 2009 Paddy', $feed->getCopyright());
  225. }
  226. public function testCategoriesCanBeSet()
  227. {
  228. $this->_validWriter->addCategories(array(
  229. array('term'=>'cat_dog', 'label' => 'Cats & Dogs', 'scheme' => 'http://example.com/schema1'),
  230. array('term'=>'cat_dog2')
  231. ));
  232. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  233. $rssFeed->render();
  234. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  235. $expected = array(
  236. array('term'=>'cat_dog', 'label' => 'cat_dog', 'scheme' => 'http://example.com/schema1'),
  237. array('term'=>'cat_dog2', 'label' => 'cat_dog2', 'scheme' => null)
  238. );
  239. $this->assertEquals($expected, (array) $feed->getCategories());
  240. }
  241. public function testHubsCanBeSet()
  242. {
  243. $this->_validWriter->addHubs(
  244. array('http://www.example.com/hub', 'http://www.example.com/hub2')
  245. );
  246. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  247. $rssFeed->render();
  248. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  249. $expected = array(
  250. 'http://www.example.com/hub', 'http://www.example.com/hub2'
  251. );
  252. $this->assertEquals($expected, (array) $feed->getHubs());
  253. }
  254. }