push(new RSSFeedTest_ItemA()); $list->push(new RSSFeedTest_ItemB()); $list->push(new RSSFeedTest_ItemC()); $rssFeed = new RSSFeed($list, "http://www.example.com", "Test RSS Feed", "Test RSS Feed Description"); $content = $rssFeed->outputToBrowser(); $this->assertContains('http://www.example.org/item-a/', $content); $this->assertContains('http://www.example.com/item-b.html', $content); $this->assertContains('http://www.example.com/item-c.html', $content); $this->assertContains('ItemA', $content); $this->assertContains('ItemB', $content); $this->assertContains('ItemC', $content); $this->assertContains('ItemA Content', $content); $this->assertContains('ItemB Content', $content); $this->assertContains('ItemC Content', $content); // Feed #2 - put Content() into and AltContent() into <description> $rssFeed = new RSSFeed($list, "http://www.example.com", "Test RSS Feed", "Test RSS Feed Description", "Content", "AltContent"); $content = $rssFeed->outputToBrowser(); $this->assertContains('<title>ItemA Content', $content); $this->assertContains('ItemB Content', $content); $this->assertContains('ItemC Content', $content); $this->assertContains('ItemA AltContent', $content); $this->assertContains('ItemB AltContent', $content); $this->assertContains('ItemC AltContent', $content); } public function testLinkEncoding() { $list = new ArrayList(); $rssFeed = new RSSFeed($list, "http://www.example.com/?param1=true¶m2=true", "Test RSS Feed"); $content = $rssFeed->outputToBrowser(); $this->assertContains('http://www.example.com/?param1=true&param2=true', $content); } public function testRSSFeedWithShortcode() { $list = new ArrayList(); $list->push(new RSSFeedTest_ItemD()); $rssFeed = new RSSFeed($list, "http://www.example.com", "Test RSS Feed", "Test RSS Feed Description"); $content = $rssFeed->outputToBrowser(); $this->assertContains('http://www.example.org/item-d.html', $content); $this->assertContains('ItemD', $content); $this->assertContains( 'ItemD Content test shortcode output

]]>
', $content ); } public function testRenderWithTemplate() { $rssFeed = new RSSFeed(new ArrayList(), "", "", ""); $rssFeed->setTemplate('RSSFeedTest'); $content = $rssFeed->outputToBrowser(); $this->assertContains('Test Custom Template', $content); $rssFeed->setTemplate(null); $content = $rssFeed->outputToBrowser(); $this->assertNotContains('Test Custom Template', $content); } public function setUp() { parent::setUp(); Config::inst()->update('SilverStripe\\Control\\Director', 'alternate_base_url', '/'); if(!self::$original_host) self::$original_host = $_SERVER['HTTP_HOST']; $_SERVER['HTTP_HOST'] = 'www.example.org'; ShortcodeParser::get('default')->register('test_shortcode', function() { return 'test shortcode output'; }); } public function tearDown() { parent::tearDown(); Config::inst()->update('SilverStripe\\Control\\Director', 'alternate_base_url', null); $_SERVER['HTTP_HOST'] = self::$original_host; } } class RSSFeedTest_ItemA extends ViewableData { // RSS-feed items must have $casting/$db information. private static $casting = array( 'Title' => 'Varchar', 'Content' => 'Text', 'AltContent' => 'Text', ); public function getTitle() { return "ItemA"; } public function getContent() { return "ItemA Content"; } public function getAltContent() { return "ItemA AltContent"; } public function Link($action = null) { return Controller::join_links("item-a/", $action); } } class RSSFeedTest_ItemB extends ViewableData { // ItemB tests without $casting public function Title() { return "ItemB"; } public function AbsoluteLink() { return "http://www.example.com/item-b.html"; } public function Content() { return "ItemB Content"; } public function AltContent() { return "ItemB AltContent"; } } class RSSFeedTest_ItemC extends ViewableData { // ItemC tests fields - Title has casting, Content doesn't. private static $casting = array( 'Title' => 'Varchar', 'AltContent' => 'Text', ); public $Title = "ItemC"; public $Content = "ItemC Content"; public $AltContent = "ItemC AltContent"; public function Link() { return "item-c.html"; } public function AbsoluteLink() { return "http://www.example.com/item-c.html"; } } class RSSFeedTest_ItemD extends ViewableData { // ItemD test fields - all fields use casting but Content & AltContent cast as HTMLText private static $casting = array( 'Title' => 'Varchar', 'Content' => 'HTMLText', // Supports shortcodes ); public $Title = 'ItemD'; public $Content = '

ItemD Content [test_shortcode]

'; public function Link() { return 'item-d.html'; } public function AbsoluteLink() { return 'http://www.example.org/item-d.html'; } }