'Syndication parsers',
'description' => 'Regression tests for syndication parsers Common syndication and SimplePie. Tests parsers against a set of feeds in the context of Feeds module. Requires SimplePie parser to be configured correctly.',
'group' => 'Feeds',
);
}
/**
* Run tests.
*/
public function test() {
// Only download simplepie if the plugin doesn't already exist somewhere.
// People running tests locally might have it.
if (!feeds_simplepie_exists()) {
$this->downloadExtractSimplePie('1.3');
$this->assertTrue(feeds_simplepie_exists());
// Reset all the caches!
$this->resetAll();
}
$this->createImporterConfiguration('Syndication', 'syndication');
foreach (array('FeedsSyndicationParser', 'FeedsSimplePieParser') as $parser) {
$this->setPlugin('syndication', $parser);
foreach ($this->feedUrls() as $url => $assertions) {
$this->createFeedNode('syndication', $url);
$this->assertText('Created ' . $assertions['item_count'] . ' nodes');
}
}
feeds_include_simplepie();
variable_set('feeds_never_use_curl', TRUE);
$link = $GLOBALS['base_url'] . '/testing/feeds/flickr.xml';
$enclosure = new FeedsSimplePieEnclosure(new SimplePie_Enclosure($link));
$enclosure->setAllowedExtensions('xml');
$this->assertEqual(1, $enclosure->getFile('public://')->fid);
}
/**
* Return an array of test feeds.
*/
protected function feedUrls() {
$path = $GLOBALS['base_url'] . '/' . drupal_get_path('module', 'feeds') . '/tests/feeds/';
return array(
"{$path}developmentseed.rss2" => array(
'item_count' => 10,
),
"{$path}feed_without_guid.rss2" => array(
'item_count' => 10,
),
);
}
/**
* Tests if the "" element of a RSS feed is parsed correctly.
*
* This element is optional according to the RSS 2.0 specification.
*/
public function testRSSSourceElement() {
// Do not use curl as that will result into HTTP requests returning a 404.
variable_set('feeds_never_use_curl', TRUE);
// Create content type with two text fields.
$typename = $this->createContentType(array(), array(
'source_title' => 'text',
'source_url' => 'text',
));
// Create importer and map sources from source element to text fields.
$this->createImporterConfiguration('Syndication', 'syndication');
$this->setSettings('syndication', 'FeedsNodeProcessor', array('bundle' => $typename));
$this->addMappings('syndication',
array(
0 => array(
'source' => 'title',
'target' => 'title',
'unique' => FALSE,
),
1 => array(
'source' => 'source:title',
'target' => 'field_source_title',
),
2 => array(
'source' => 'source:url',
'target' => 'field_source_url',
),
)
);
// Import url.
$url = $GLOBALS['base_url'] . '/' . drupal_get_path('module', 'feeds') . '/tests/feeds/developmentseed.rss2';
$this->createFeedNode('syndication', $url);
// Assert that the contents for the source element were imported for the
// first imported node.
$node = node_load(2);
$fields = array(
'field_source_title' => array(
'expected' => 'Technological Solutions for Progressive Organizations',
'actual' => $node->field_source_title[LANGUAGE_NONE][0]['value'],
),
'field_source_url' => array(
'expected' => 'http://developmentseed.org/node/974',
'actual' => $node->field_source_url[LANGUAGE_NONE][0]['value'],
),
);
foreach ($fields as $field_name => $value) {
$this->assertEqual($value['expected'], $value['actual'], format_string('The field %field has the expected value (actual: @actual).', array('%field' => $field_name, '@actual' => $value['actual'])));
}
// Assert that for the second imported node, no values were imported,
// because the second item does not contain a source element.
$node = node_load(3);
foreach ($fields as $field_name => $value) {
$this->assertTrue(!isset($node->{$field_name}[LANGUAGE_NONE][0]['value']), format_string('The field %field does not contain a value (actual: @actual).', array('%field' => $field_name, '@actual' => $value['actual'])));
}
}
}