public function RulesIntegrationTestCase::testTaxonomyIntegration in Rules 7.2
Same name and namespace in other branches
- 8.3 d7-tests/rules_integration_test_case.test \RulesIntegrationTestCase::testTaxonomyIntegration()
Tests integration for the taxonomy module.
File
- tests/
rules.test, line 1712 - Rules tests.
Class
- RulesIntegrationTestCase
- Tests provided module integration.
Code
public function testTaxonomyIntegration() {
$term = entity_property_values_create_entity('taxonomy_term', array(
'name' => $this
->randomName(),
'vocabulary' => 1,
))
->value();
$term2 = clone $term;
taxonomy_term_save($term);
taxonomy_term_save($term2);
$tags[LANGUAGE_NONE][0]['tid'] = $term->tid;
$node = $this
->drupalCreateNode(array(
'title' => 'foo',
'type' => 'article',
'field_tags' => $tags,
));
// Test assigning and remove a term from an article.
$rule = rule(array(
'node' => array(
'type' => 'node',
'bundle' => 'article',
),
));
$term_wrapped = rules_wrap_data($term->tid, array(
'type' => 'taxonomy_term',
));
$term_wrapped2 = rules_wrap_data($term2->tid, array(
'type' => 'taxonomy_term',
));
$rule
->action('list_add', array(
'list:select' => 'node:field-tags',
'item' => $term_wrapped2,
));
$rule
->action('list_remove', array(
'list:select' => 'node:field-tags',
'item' => $term_wrapped,
));
$rule
->execute($node);
RulesLog::logger()
->checkLog();
$this
->assertEqual(array_values($node->field_tags[LANGUAGE_NONE]), array(
0 => array(
'tid' => $term2->tid,
),
), 'Term removed and added from a node.');
// Test using the taxonomy term reference field on a term object.
$field_name = drupal_strtolower($this
->randomName() . '_field_name');
$field = field_create_field(array(
'field_name' => $field_name,
'type' => 'taxonomy_term_reference',
// Set cardinality to unlimited for tagging.
'cardinality' => FIELD_CARDINALITY_UNLIMITED,
'settings' => array(
'allowed_values' => array(
array(
'vocabulary' => 'tags',
'parent' => 0,
),
),
),
));
$instance = array(
'field_name' => $field_name,
'entity_type' => 'taxonomy_term',
'bundle' => 'tags',
// Machine name of vocabulary.
'label' => $this
->randomName() . '_label',
'description' => $this
->randomName() . '_description',
'weight' => mt_rand(0, 127),
'widget' => array(
'type' => 'taxonomy_autocomplete',
'weight' => -4,
),
'display' => array(
'default' => array(
'type' => 'taxonomy_term_reference_link',
'weight' => 10,
),
),
);
field_create_instance($instance);
$term1 = entity_property_values_create_entity('taxonomy_term', array(
'name' => $this
->randomName(),
'vocabulary' => 1,
))
->save();
$term2 = entity_property_values_create_entity('taxonomy_term', array(
'name' => $this
->randomName(),
'vocabulary' => 1,
))
->save();
// Test asserting the term reference field and using it afterwards.
$rule = rule(array(
'taxonomy_term' => array(
'type' => 'taxonomy_term',
),
));
$rule
->condition('entity_has_field', array(
'entity:select' => 'taxonomy-term',
'field' => $field_name,
));
// Add $term2 to $term1 using the term reference field.
$selector = str_replace('_', '-', 'taxonomy_term:' . $field_name);
$rule
->action('list_add', array(
'list:select' => $selector,
'item' => $term2,
));
$rule
->integrityCheck();
$rule
->execute($term1);
RulesLog::logger()
->checkLog();
$this
->assertEqual($term1->{$field_name}[0]
->getIdentifier(), $term2
->getIdentifier(), 'Rule appended a term to the term reference field on a term.');
// Test an action set for merging term parents, which is provided as default
// config.
$term = entity_property_values_create_entity('taxonomy_term', array(
'name' => $this
->randomName(),
'vocabulary' => 1,
'parent' => array(
$term1
->value(),
),
))
->save();
$action = rules_action('component_rules_retrieve_term_parents');
list($parents) = $action
->execute(array(
$term
->getIdentifier(),
));
$this
->assertTrue($parents[0]->tid == $term1
->getIdentifier(), 'Invoked component to retrieve term parents.');
RulesLog::logger()
->checkLog();
}