mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
Added tests for RSSFeed
Don't require information on objects passed to RSSFeed git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@51523 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
3d83f43eff
commit
7eea3c091f
@ -189,11 +189,18 @@ class RSSFeed extends ViewableData {
|
||||
HTTP::register_etag($this->etag);
|
||||
}
|
||||
|
||||
$body = str_replace(' ', ' ', $this->renderWith('RSSFeed'));
|
||||
$body = $this->feedContent();
|
||||
HTTP::add_cache_headers($body);
|
||||
header("Content-type: text/xml");
|
||||
echo $body;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the content of the RSS feed
|
||||
*/
|
||||
function feedContent() {
|
||||
return str_replace(' ', ' ', $this->renderWith('RSSFeed'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -251,8 +258,7 @@ class RSSFeed_Entry extends ViewableData {
|
||||
* @return string Returns the description of the entry.
|
||||
*/
|
||||
function Title() {
|
||||
if($this->titleField)
|
||||
return $this->failover->obj($this->titleField);
|
||||
return $this->rssField($this->titleField, 'Varchar');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -261,8 +267,7 @@ class RSSFeed_Entry extends ViewableData {
|
||||
* @return string Returns the description of the entry.
|
||||
*/
|
||||
function Description() {
|
||||
if($this->descriptionField)
|
||||
return $this->failover->obj($this->descriptionField);
|
||||
return $this->rssField($this->descriptionField, 'Text');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -275,6 +280,22 @@ class RSSFeed_Entry extends ViewableData {
|
||||
return $this->failover->obj($this->authorField);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the named field as an obj() call from $this->failover.
|
||||
* Default to the given class if there's no casting information.
|
||||
*/
|
||||
function rssField($fieldName, $defaultClass = 'Varchar') {
|
||||
if($fieldName) {
|
||||
if($this->failover->castingHelperPair($fieldName)) {
|
||||
return $this->failover->obj($fieldName);
|
||||
} else {
|
||||
$obj = new $defaultClass($fieldName);
|
||||
$obj->setValue($this->failover->XML_val($fieldName));
|
||||
return $obj;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a link to this entry
|
||||
*
|
||||
@ -282,7 +303,7 @@ class RSSFeed_Entry extends ViewableData {
|
||||
*/
|
||||
function AbsoluteLink() {
|
||||
if($this->failover->hasMethod('AbsoluteLink')) return $this->failover->AbsoluteLink();
|
||||
else if($this->failover->hasMethod('Link')) return Director::absoluteURL($this->link);
|
||||
else if($this->failover->hasMethod('Link')) return Director::absoluteURL($this->failover->Link());
|
||||
else user_error($this->failover->class . " object has either an AbsoluteLink nor a Link method. Can't put a link in the RSS feed", E_USER_WARNING);
|
||||
}
|
||||
}
|
||||
|
101
tests/api/RSSFeedTest.php
Normal file
101
tests/api/RSSFeedTest.php
Normal file
@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
class RSSFeedTest extends SapphireTest {
|
||||
|
||||
function testRSSFeed() {
|
||||
$list = new DataObjectSet();
|
||||
$list->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->feedContent();
|
||||
|
||||
// Debug::message($content);
|
||||
|
||||
$this->assertContains('<link>' . Director::absoluteBaseURL() . '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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
class RSSFeedTest_ItemA extends ViewableData {
|
||||
// RSS-feed items must have $casting/$db information.
|
||||
static $casting = array(
|
||||
'Title' => 'Varchar',
|
||||
'Content' => 'Text',
|
||||
'AltContent' => 'Text',
|
||||
);
|
||||
|
||||
function Title() {
|
||||
return "ItemA";
|
||||
}
|
||||
function Content() {
|
||||
return "ItemA Content";
|
||||
}
|
||||
function AltContent() {
|
||||
return "ItemA AltContent";
|
||||
}
|
||||
|
||||
function Link() {
|
||||
return "item-a/";
|
||||
}
|
||||
}
|
||||
|
||||
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";
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user