You are here

public function FeedsSyndicationParserTestCase::testRSSSourceElement in Feeds 7.2

Tests if the "<source>" element of a RSS feed is parsed correctly.

This element is optional according to the RSS 2.0 specification.

File

tests/feeds_parser_syndication.test, line 77
Tests for plugins/FeedsSyndicationParser.inc.

Class

FeedsSyndicationParserTestCase
Test single feeds.

Code

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'],
    )));
  }
}