AtomTest.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <?php
  2. require_once 'PHPUnit/Framework/TestCase.php';
  3. require_once 'Zend/Feed/Writer/Renderer/Feed/Atom.php';
  4. require_once 'Zend/Feed/Reader.php';
  5. require_once 'Zend/Version.php';
  6. class Zend_Feed_Writer_Renderer_Entry_AtomTest extends PHPUnit_Framework_TestCase
  7. {
  8. protected $_validWriter = null;
  9. protected $_validEntry = null;
  10. public function setUp()
  11. {
  12. $this->_validWriter = new Zend_Feed_Writer_Feed;
  13. $this->_validWriter->setType('atom');
  14. $this->_validWriter->setTitle('This is a test feed.');
  15. $this->_validWriter->setDescription('This is a test description.');
  16. $this->_validWriter->setDateModified(1234567890);
  17. $this->_validWriter->setLink('http://www.example.com');
  18. $this->_validWriter->setFeedLink('http://www.example.com/atom', 'atom');
  19. $this->_validWriter->addAuthor('Joe', 'joe@example.com', 'http://www.example.com/joe');
  20. $this->_validEntry = $this->_validWriter->createEntry();
  21. $this->_validEntry->setTitle('This is a test entry.');
  22. $this->_validEntry->setDescription('This is a test entry description.');
  23. $this->_validEntry->setDateModified(1234567890);
  24. $this->_validEntry->setDateCreated(1234567000);
  25. $this->_validEntry->setLink('http://www.example.com/1');
  26. $this->_validEntry->addAuthor('Jane', 'jane@example.com', 'http://www.example.com/jane');
  27. $this->_validEntry->setContent('This is test entry content.');
  28. $this->_validWriter->addEntry($this->_validEntry);
  29. }
  30. public function tearDown()
  31. {
  32. $this->_validWriter = null;
  33. $this->_validEntry = null;
  34. }
  35. public function testRenderMethodRunsMinimalWriterContainerProperlyBeforeICheckAtomCompliance()
  36. {
  37. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  38. try {
  39. $renderer->render();
  40. } catch (Zend_Feed_Exception $e) {
  41. $this->fail('Valid Writer object caused an exception when building which should never happen');
  42. }
  43. }
  44. public function testEntryEncodingHasBeenSet()
  45. {
  46. $this->_validWriter->setEncoding('iso-8859-1');
  47. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  48. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  49. $entry = $feed->current();
  50. $this->assertEquals('iso-8859-1', $entry->getEncoding());
  51. }
  52. public function testEntryEncodingDefaultIsUsedIfEncodingNotSetByHand()
  53. {
  54. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  55. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  56. $entry = $feed->current();
  57. $this->assertEquals('UTF-8', $entry->getEncoding());
  58. }
  59. public function testEntryTitleHasBeenSet()
  60. {
  61. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  62. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  63. $entry = $feed->current();
  64. $this->assertEquals('This is a test entry.', $entry->getTitle());
  65. }
  66. /**
  67. * @expectedException Zend_Feed_Exception
  68. */
  69. public function testFeedTitleIfMissingThrowsException()
  70. {
  71. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  72. $this->_validEntry->remove('title');
  73. $atomFeed->render();
  74. }
  75. public function testEntrySummaryDescriptionHasBeenSet()
  76. {
  77. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  78. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  79. $entry = $feed->current();
  80. $this->assertEquals('This is a test entry description.', $entry->getDescription());
  81. }
  82. public function testEntryContentHasBeenSet()
  83. {
  84. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  85. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  86. $entry = $feed->current();
  87. $this->assertEquals('This is test entry content.', $entry->getContent());
  88. }
  89. /**
  90. * @expectedException Zend_Feed_Exception
  91. */
  92. public function testFeedContentIfMissingThrowsExceptionIfThereIsNoLink()
  93. {
  94. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  95. $this->_validEntry->remove('content');
  96. $this->_validEntry->remove('link');
  97. $atomFeed->render();
  98. }
  99. public function testEntryUpdatedDateHasBeenSet()
  100. {
  101. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  102. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  103. $entry = $feed->current();
  104. $this->assertEquals(1234567890, $entry->getDateModified()->get(Zend_Date::TIMESTAMP));
  105. }
  106. /**
  107. * @expectedException Zend_Feed_Exception
  108. */
  109. public function testFeedUpdatedDateIfMissingThrowsException()
  110. {
  111. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  112. $this->_validEntry->remove('dateModified');
  113. $atomFeed->render();
  114. }
  115. public function testEntryPublishedDateHasBeenSet()
  116. {
  117. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  118. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  119. $entry = $feed->current();
  120. $this->assertEquals(1234567000, $entry->getDateCreated()->get(Zend_Date::TIMESTAMP));
  121. }
  122. public function testEntryIncludesLinkToHtmlVersionOfFeed()
  123. {
  124. $renderer= new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  125. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  126. $entry = $feed->current();
  127. $this->assertEquals('http://www.example.com/1', $entry->getLink());
  128. }
  129. public function testEntryHoldsAnyAuthorAdded()
  130. {
  131. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  132. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  133. $entry = $feed->current();
  134. $author = $entry->getAuthor();
  135. $this->assertEquals('jane@example.com (Jane)', $entry->getAuthor());
  136. }
  137. public function testEntryHoldsAnyEnclosureAdded()
  138. {
  139. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  140. $this->_validEntry->setEnclosure(array(
  141. 'type' => 'audio/mpeg',
  142. 'length' => '1337',
  143. 'uri' => 'http://example.com/audio.mp3'
  144. ));
  145. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  146. $entry = $feed->current();
  147. $enc = $entry->getEnclosure();
  148. $this->assertEquals('audio/mpeg', $enc->type);
  149. $this->assertEquals('1337', $enc->length);
  150. $this->assertEquals('http://example.com/audio.mp3', $enc->url);
  151. }
  152. public function testEntryIdHasBeenSet()
  153. {
  154. $this->_validEntry->setId('urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6');
  155. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  156. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  157. $entry = $feed->current();
  158. $this->assertEquals('urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6', $entry->getId());
  159. }
  160. public function testFeedIdDefaultIsUsedIfNotSetByHand()
  161. {
  162. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  163. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  164. $entry = $feed->current();
  165. $this->assertEquals($entry->getLink(), $entry->getId());
  166. }
  167. /**
  168. * @expectedException Zend_Feed_Exception
  169. */
  170. public function testFeedIdIfMissingThrowsException()
  171. {
  172. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  173. $this->_validEntry->remove('id');
  174. $this->_validEntry->remove('link');
  175. $atomFeed->render();
  176. }
  177. /**
  178. * @expectedException Zend_Feed_Exception
  179. */
  180. public function testFeedIdThrowsExceptionIfNotUri()
  181. {
  182. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  183. $this->_validEntry->remove('id');
  184. $this->_validEntry->remove('link');
  185. $this->_validEntry->setId('not-a-uri');
  186. $atomFeed->render();
  187. }
  188. public function testCommentLinkRendered()
  189. {
  190. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  191. $this->_validEntry->setCommentLink('http://www.example.com/id/1');
  192. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  193. $entry = $feed->current();
  194. $this->assertEquals('http://www.example.com/id/1', $entry->getCommentLink());
  195. }
  196. public function testCommentCountRendered()
  197. {
  198. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  199. $this->_validEntry->setCommentCount(22);
  200. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  201. $entry = $feed->current();
  202. $this->assertEquals(22, $entry->getCommentCount());
  203. }
  204. public function testCommentFeedLinksRendered()
  205. {
  206. $renderer = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  207. $this->_validEntry->setCommentFeedLinks(array(
  208. array('uri'=>'http://www.example.com/atom/id/1','type'=>'atom'),
  209. array('uri'=>'http://www.example.com/rss/id/1','type'=>'rss'),
  210. ));
  211. $feed = Zend_Feed_Reader::importString($renderer->render()->saveXml());
  212. $entry = $feed->current();
  213. // Skipped over due to ZFR bug (detects Atom in error when RSS requested)
  214. //$this->assertEquals('http://www.example.com/rss/id/1', $entry->getCommentFeedLink('rss'));
  215. $this->assertEquals('http://www.example.com/atom/id/1', $entry->getCommentFeedLink('atom'));
  216. }
  217. }