public function FeedsRSStoDataTest::test in Feeds 6
Test node creation, refreshing/deleting feeds and feed items.
File
- tests/
feeds_processor_data.test, line 29 - Tests for plugins/FeedsDataProcessor.inc.
Class
- FeedsRSStoDataTest
- Test aggregating a feed as data records.
Code
public function test() {
// Create an importer.
$this
->createImporterConfiguration('Data feed', 'rss');
// Go to edit page and select the data processor.
$edit = array(
'plugin_key' => 'FeedsDataProcessor',
);
$this
->drupalPost('admin/build/feeds/edit/rss/processor', $edit, 'Save');
$this
->assertPlugins('rss', 'FeedsHTTPFetcher', 'FeedsSyndicationParser', 'FeedsDataProcessor');
// Go to mapping page and create a couple of mappings.
$mappings = array(
array(
'source' => 'guid',
'target' => 'new:text',
'unique' => TRUE,
),
array(
'source' => 'url',
'target' => 'new:text',
'unique' => TRUE,
),
array(
'source' => 'timestamp',
'target' => 'timestamp',
// timestamp is an existing target.
'unique' => FALSE,
),
array(
'source' => 'title',
'target' => 'new:varchar',
'unique' => FALSE,
),
array(
'source' => 'description',
'target' => 'new:text',
'unique' => FALSE,
),
);
$this
->addMappings('rss', $mappings);
// Verify the mapping configuration.
$config = unserialize(db_result(db_query("SELECT config FROM {feeds_importer} WHERE id = 'rss'")));
$stored_mappings = $config['processor']['config']['mappings'];
foreach ($mappings as $i => $mapping) {
$this
->assertEqual($mapping['source'], $stored_mappings[$i]['source']);
// This is intentional: the target of the stored mapping should have the
// same key as the source, this has to do with the fact that feeds data
// creates storage as the mapping is created.
$this
->assertEqual($mapping['source'], $stored_mappings[$i]['target']);
$this
->assertEqual($mapping['unique'], $stored_mappings[$i]['unique']);
}
// Create standard feed node.
$nid = $this
->createFeedNode('rss');
// Assert 10 items aggregated after creation of the node.
$this
->assertText('Created 10 items.');
// Login with a user with administer data permissions and review aggregated
// content.
$this
->drupalLogin($this
->drupalCreateUser(array(
'administer data tables',
'administer feeds',
'administer nodes',
)));
// Assert accuracy of aggregated information.
$this
->drupalGet('admin/content/data/view/feeds_data_rss');
$this
->assertText('Open Atrium Translation Workflow: Two Way Translation Updates');
$this
->assertText('A new translation process for Open Atrium & integration with Localize Drupal');
$this
->assertText('Week in DC Tech: October 5th Edition');
$this
->assertText('There are some great technology events happening this week');
$this
->assertText('Mapping Innovation at the World Bank with Open Atrium');
$this
->assertText('is being used as a base platform for collaboration at the World Bank because of its feature flexibility');
$this
->assertText('September GeoDC Meetup Tonight');
$this
->assertText('Today is the last Wednesday of the month');
$this
->assertText('Week in DC Tech: September 28th Edition');
$this
->assertText('Looking to geek out this week? There are a bunch of');
$this
->assertText('Open Data for Microfinance: The New MIXMarket.org');
$this
->assertText('There are profiles for every country that the MIX Market is hosting.');
$this
->assertText('Integrating the Siteminder Access System in an Open Atrium-based Intranet');
$this
->assertText('In addition to authentication, the Siteminder system');
$this
->assertText('Week in DC Tech: September 21 Edition');
$this
->assertText('an interesting variety of technology events happening in Washington, DC ');
$this
->assertText('s Software Freedom Day: Impressions & Photos');
$this
->assertText('Presenting on Features in Drupal and Open Atrium');
$this
->assertText('Scaling the Open Atrium UI');
$this
->assertText('The first major change is switching');
// Assert DB status.
$count = db_result(db_query("SELECT COUNT(*) FROM {feeds_data_rss}"));
$this
->assertEqual($count, 10, 'Accurate number of items in database.');
// Import again.
$this
->drupalPost('node/' . $nid . '/import', array(), 'Import');
$this
->assertText('There are no new items.');
// Assert DB status, there still shouldn't be more than 10 items.
$count = db_result(db_query("SELECT COUNT(*) FROM {feeds_data_rss}"));
$this
->assertEqual($count, 10, 'Accurate number of items in database.');
// Now delete all items.
$this
->drupalPost('node/' . $nid . '/delete-items', array(), 'Delete');
$this
->assertText('All items have been deleted.');
// Assert DB status, now there should be no items.
$count = db_result(db_query("SELECT COUNT(*) FROM {feeds_data_rss}"));
$this
->assertEqual($count, 0, 'Accurate number of items in database.');
// Import again, we should find new content.
$this
->drupalPost('node/' . $nid . '/import', array(), 'Import');
$this
->assertText('Created 10 items.');
// Assert DB status, there should be 10 again.
$count = db_result(db_query("SELECT COUNT(*) FROM {feeds_data_rss}"));
$this
->assertEqual($count, 10, 'Accurate number of items in database.');
// Test 'Delete items with source' setting.
$this
->setSettings('rss', 'FeedsDataProcessor', array(
'delete_with_source' => 1,
));
$this
->drupalPost('node/' . $nid . '/delete', array(), 'Delete');
$this
->assertText('Page Development Seed - Technological Solutions for Progressive Organizations has been deleted.');
// Assert DB status.
$count = db_result(db_query("SELECT COUNT(*) FROM {feeds_data_rss}"));
$this
->assertEqual($count, 0, 'Accurate number of items in database.');
// @todo Standalone import form testing.
// @todo Create a second feed and test.
}