<?php /** * @package sapphire * @subpackage tests */ class RSSFeedTest extends SapphireTest { function testRSSFeed() { $list = new DataObjectSet(); $list->push(new RSSFeedTest_ItemA()); $list->push(new RSSFeedTest_ItemB()); $list->push(new RSSFeedTest_ItemC()); $origServer = $_SERVER; $_SERVER['HTTP_HOST'] = 'www.example.org'; Director::setBaseURL('/'); $rssFeed = new RSSFeed($list, "http://www.example.com", "Test RSS Feed", "Test RSS Feed Description"); $content = $rssFeed->feedContent(); //Debug::message($content); $this->assertContains('<link>http://www.example.org/item-a/</link>', $content); $this->assertContains('<link>http://www.example.com/item-b.html</link>', $content); $this->assertContains('<link>http://www.example.com/item-c.html</link>', $content); $this->assertContains('<title>ItemA</title>', $content); $this->assertContains('<title>ItemB</title>', $content); $this->assertContains('<title>ItemC</title>', $content); $this->assertContains('<description>ItemA Content</description>', $content); $this->assertContains('<description>ItemB Content</description>', $content); $this->assertContains('<description>ItemC Content</description>', $content); // Feed #2 - put Content() into <title> and AltContent() into <description> $rssFeed = new RSSFeed($list, "http://www.example.com", "Test RSS Feed", "Test RSS Feed Description", "Content", "AltContent"); $content = $rssFeed->feedContent(); $this->assertContains('<title>ItemA Content</title>', $content); $this->assertContains('<title>ItemB Content</title>', $content); $this->assertContains('<title>ItemC Content</title>', $content); $this->assertContains('<description>ItemA AltContent</description>', $content); $this->assertContains('<description>ItemB AltContent</description>', $content); $this->assertContains('<description>ItemC AltContent</description>', $content); Director::setBaseURL(null); $_SERVER = $origServer; } } class RSSFeedTest_ItemA extends ViewableData { // RSS-feed items must have $casting/$db information. static $casting = array( 'Title' => 'Varchar', 'Content' => 'Text', 'AltContent' => 'Text', ); function getTitle() { return "ItemA"; } function getContent() { return "ItemA Content"; } function getAltContent() { return "ItemA AltContent"; } function Link($action = null) { return Controller::join_links("item-a/", $action); } } class RSSFeedTest_ItemB extends ViewableData { // ItemB tests without $casting function Title() { return "ItemB"; } function AbsoluteLink() { return "http://www.example.com/item-b.html"; } function Content() { return "ItemB Content"; } function AltContent() { return "ItemB AltContent"; } } class RSSFeedTest_ItemC extends ViewableData { // ItemC tests fields - Title has casting, Content doesn't. static $casting = array( 'Title' => 'Varchar', 'AltContent' => 'Text', ); public $Title = "ItemC"; public $Content = "ItemC Content"; public $AltContent = "ItemC AltContent"; function Link() { return "item-c.html"; } function AbsoluteLink() { return "http://www.example.com/item-c.html"; } }