popsu-d7/sites/all/modules/feeds/tests/feeds_mapper_taxonomy.test
Bachir Soussi Chiadmi 1bc61b12ad first import
2015-04-08 11:40:19 +02:00

272 lines
8.4 KiB
Plaintext

<?php
/**
* @file
* Test case for taxonomy mapper mappers/taxonomy.inc.
*/
/**
* Class for testing Feeds <em>content</em> mapper.
*/
class FeedsMapperTaxonomyTestCase extends FeedsMapperTestCase {
public static function getInfo() {
return array(
'name' => 'Mapper: Taxonomy',
'description' => 'Test Feeds Mapper support for Taxonomy.',
'group' => 'Feeds',
);
}
function setUp() {
parent::setUp();
// Add Tags vocabulary
$edit = array(
'name' => 'Tags',
'machine_name' => 'tags',
);
$this->drupalPost('admin/structure/taxonomy/add', $edit, 'Save');
$edit = array(
'name' => 'term1',
);
$this->drupalPost('admin/structure/taxonomy/tags/add', $edit, t('Save'));
$this->assertText('Created new term term1.');
// Create term reference field.
$field = array(
'field_name' => 'field_tags',
'type' => 'taxonomy_term_reference',
'cardinality' => FIELD_CARDINALITY_UNLIMITED,
'settings' => array(
'allowed_values' => array(
array(
'vocabulary' => 'tags',
'parent' => 0,
),
),
),
);
field_create_field($field);
// Add term reference field to feed item bundle.
$this->instance = array(
'field_name' => 'field_tags',
'bundle' => 'article',
'entity_type' => 'node',
'widget' => array(
'type' => 'options_select',
),
'display' => array(
'default' => array(
'type' => 'taxonomy_term_reference_link',
),
),
);
field_create_instance($this->instance);
// Add term reference field to feed node bundle.
$this->instance = array(
'field_name' => 'field_tags',
'bundle' => 'page',
'entity_type' => 'node',
'widget' => array(
'type' => 'options_select',
),
'display' => array(
'default' => array(
'type' => 'taxonomy_term_reference_link',
),
),
);
field_create_instance($this->instance);
// Create an importer configuration with basic mapping.
$this->createImporterConfiguration('Syndication', 'syndication');
$this->addMappings('syndication',
array(
0 => array(
'source' => 'title',
'target' => 'title',
),
1 => array(
'source' => 'description',
'target' => 'body',
),
2 => array(
'source' => 'timestamp',
'target' => 'created',
),
3 => array(
'source' => 'url',
'target' => 'url',
'unique' => TRUE,
),
4 => array(
'source' => 'guid',
'target' => 'guid',
'unique' => TRUE,
),
)
);
}
/**
* Test inheriting taxonomy from the feed node.
*/
function testInheritTaxonomy() {
// Adjust importer settings
$this->setSettings('syndication', NULL, array('import_period' => FEEDS_SCHEDULE_NEVER));
$this->setSettings('syndication', NULL, array('import_on_create' => FALSE));
$this->assertText('Do not import on submission');
// Map feed node's taxonomy to feed item node's taxonomy.
$mappings = array(
5 => array(
'source' => 'parent:taxonomy:tags',
'target' => 'field_tags',
),
);
$this->addMappings('syndication', $mappings);
// Create feed node and add term term1.
$langcode = LANGUAGE_NONE;
$nid = $this->createFeedNode('syndication', NULL, 'Syndication');
$term = taxonomy_get_term_by_name('term1');
$term = reset($term);
$edit = array(
'field_tags' . '[' . $langcode . '][]' => $term->tid,
);
$this->drupalPost("node/$nid/edit", $edit, t('Save'));
$this->assertTaxonomyTerm($term->name);
// Import nodes.
$this->drupalPost("node/$nid/import", array(), 'Import');
$this->assertText('Created 10 nodes.');
$count = db_query("SELECT COUNT(*) FROM {taxonomy_index}")->fetchField();
// There should be one term for each node imported plus the term on the feed node.
$this->assertEqual(11, $count, 'Found correct number of tags for all feed nodes and feed items.');
}
/**
* Test aggregating RSS categories to taxonomy.
*/
/*
function testRSSCategoriesToTaxonomy() {
// Add mapping to tags vocabulary.
$this->addMappings('syndication',
array(
array(
'source' => 'tags',
'target' => 'taxonomy:1',
),
)
);
// Aggregate feed node with "Tag" vocabulary.
$nid = $this->createFeedNode();
// Assert 10 items aggregated after creation of the node.
$this->assertText('Created 10 nodes');
// There should be 30 terms and 44 term-node relations.
$this->assertEqual(30, db_query("SELECT count(*) FROM {term_data}")->fetchField(), "Found correct number of terms.");
$this->assertEqual(44, db_query("SELECT count(*) FROM {term_node}")->fetchField(), "Found correct number of term-node relations.");
// Take a look at the actual terms on frontpage.
$this->drupalGet('node');
$terms = array(
'authentication',
'custom mapping',
'data visualization',
'Drupal',
'Drupal planet',
'faceted search',
'GeoDC',
'graphs',
'interface',
'intranet',
'localization',
'localization client',
'localization server',
'map-basec browser',
'mapbox',
'microfinance',
'MIX Market',
'open atrium',
'open data',
'open source',
'Peru',
'salesforce',
'siteminder',
'siteminder module',
'software freedom day',
'translation',
'translation server',
'usability',
'Washington DC',
'World Bank',
);
foreach ($terms as $term) {
$this->assertTaxonomyTerm($term);
}
// Delete all items, all associations are gone.
$this->drupalPost("node/$nid/delete-items", array(), 'Delete');
$this->assertText('Deleted 10 nodes');
$this->assertEqual(30, db_query("SELECT count(*) FROM {term_data}")->fetchField(), "Found correct number of terms.");
$this->assertEqual(0, db_query("SELECT count(*) FROM {term_node}")->fetchField(), "Found correct number of term-node relations.");
// Remove "Tag" setting, import again.
$edit = array(
'tags' => FALSE,
);
$this->drupalPost('admin/content/taxonomy/edit/vocabulary/1', $edit, 'Save');
$this->drupalPost("node/$nid/import", array(), 'Import');
$this->assertText('Created 10 nodes');
// We should only get one term-node association per node.
$this->assertEqual(30, db_query("SELECT count(*) FROM {term_data}")->fetchField(), "Found correct number of terms.");
$this->assertEqual(10, db_query("SELECT count(*) FROM {term_node}")->fetchField(), "Found correct number of term-node relations.");
// Delete all items.
$this->drupalPost("node/$nid/delete-items", array(), 'Delete');
// Set vocabulary to multiple terms, import again.
$edit = array(
'multiple' => TRUE,
);
$this->drupalPost('admin/content/taxonomy/edit/vocabulary/1', $edit, 'Save');
$this->drupalPost("node/$nid/import", array(), 'Import');
$this->assertText('Created 10 nodes');
// We should get all term-node associations again.
$this->assertEqual(30, db_query("SELECT count(*) FROM {term_data}")->fetchField(), "Found correct number of terms.");
$this->assertEqual(44, db_query("SELECT count(*) FROM {term_node}")->fetchField(), "Found correct number of term-node relations.");
// Delete all items.
$this->drupalPost("node/$nid/delete-items", array(), 'Delete');
// Remove a term, import again.
$this->drupalPost('admin/content/taxonomy/edit/term/1', array(), 'Delete');
$this->drupalPost(NULL, array(), 'Delete');
$this->assertText('Deleted term');
$this->drupalPost("node/$nid/import", array(), 'Import');
$this->assertText('Created 10 nodes');
// This term should now be missing from term-node associations.
$this->assertEqual(29, db_query("SELECT count(*) FROM {term_data}")->fetchField(), "Found correct number of terms.");
$this->assertEqual(39, db_query("SELECT count(*) FROM {term_node}")->fetchField(), "Found correct number of term-node relations.");
}
*/
/**
* Helper, finds node style taxonomy term markup in DOM.
*/
public function assertTaxonomyTerm($term) {
$term = check_plain($term);
$this->assertPattern('/<a href="\/.*taxonomy\/term\/[0-9]+">' . $term . '<\/a>/', 'Found ' . $term);
}
}