Mercurial > hg > rr-repo
diff sites/all/modules/references/node_reference/node_reference.test @ 4:ce11bbd8f642
added modules
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Thu, 19 Sep 2013 10:38:44 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sites/all/modules/references/node_reference/node_reference.test Thu Sep 19 10:38:44 2013 +0100 @@ -0,0 +1,155 @@ +<?php + +/** + * @file + * Initial node_reference tests + */ + +/** + * Unit tests for referenceability of node types in entity forms. + */ +class NodeReferenceFormTest extends FieldTestCase { + public static function getInfo() { + return array( + 'name' => 'Node reference', + 'description' => 'Make sure nodes are referenceable in entity forms.', + 'group' => 'References', + ); + } + + function setUp() { + parent::setUp(array('node_reference', 'field_test')); + + $this->langcode = LANGUAGE_NONE; + $this->field_name = 'test_node_reference'; + $this->field = array( + 'field_name' => $this->field_name, + 'type' => 'node_reference', + 'cardinality' => 1, + 'settings' => array( + 'referenceable_types' => array_keys(node_type_get_names()), + ), + ); + $this->field = field_create_field($this->field); + $this->instance = array( + 'field_name' => $this->field_name, + 'entity_type' => 'test_entity', + 'bundle' => 'test_bundle', + 'widget' => array( + 'type' => 'options_buttons', + ), + ); + + $this->instance = field_create_instance($this->instance); + + $this->nodes = array(); + foreach (node_type_get_names() as $type_name => $type_title) { + $this->nodes[$type_name] = $this->drupalCreateNode(array( + 'type' => $type_name, + 'title' => $this->randomName(8), + )); + $this->pass(t('Created %type node %nid: %title', array( + '%type' => $type_name, + '%nid' => $this->nodes[$type_name]->nid, + '%title' => $this->nodes[$type_name]->title, + )), 'destination creation'); + } + } + + function runReferenceableNodeTest($allowed, $group) { + field_update_field(array( + 'field_name' => $this->field_name, + 'settings' => array('referenceable_types' => array_keys($allowed)), + )); + $entity = field_test_create_stub_entity(); + $form = drupal_get_form('field_test_entity_form', $entity); + $options = $form[$this->field_name][$this->langcode]['#options']; + $this->assertTrue(isset($options['_none']), t('Empty choice offered for reference'), $group); + unset($options['_none']); + foreach ($this->nodes as $node) { + if (isset($allowed[$node->type])) { + $this->assertTrue(isset($options[$node->nid]), + t('Node of type @type is referenceable', array('@type' => $node->type)), + $group); + } + else { + $this->assertFalse(isset($options[$node->nid]), + t('Node of type @type is not referenceable', array('@type' => $node->type)), + $group); + } + unset($options[$node->nid]); + } + $this->assertTrue(empty($options), t('No extra choice is referenceable'), $group); + } + + /** + * Test unlimited referencing + */ + function testReferenceableNodeTypesAll() { + $allowed = node_type_get_names(); + $this->runReferenceableNodeTest($allowed, t('Unimited referencing')); + } + + /** + * Test referencing a limited list of node types + */ + function testReferenceableNodeTypesOne() { + $allowed = array_slice(node_type_get_names(), 0, 1, TRUE); + $this->runReferenceableNodeTest($allowed, t('Limited referencing')); + } + + + /** + * Test autocomplete widget. + */ + function testLongNodeReferenceWidget() { + // Create regular test user. + $web_user = $this->drupalCreateUser(array('create article content', 'access content')); + $this->drupalLogin($web_user); + + // Create test field instance on article node type. + $instance = array( + 'field_name' => $this->field_name, + 'entity_type' => 'node', + 'bundle' => 'article', + 'widget' => array( + 'type' => 'node_reference_autocomplete', + ), + ); + $instance = field_create_instance($instance); + + // Create a node with a short title and a node with a title longer than + // 128 characters. + $node_short_title = $this->drupalCreateNode(array( + 'type' => 'page', + 'title' => $this->randomName(8), + )); + $node_long_title = $this->drupalCreateNode(array( + 'type' => 'page', + 'title' => $this->randomName(200), + )); + + // Display node creation form. + $langcode = LANGUAGE_NONE; + $this->drupalGet('node/add/article'); + $this->assertFieldByName("{$this->field_name}[$langcode][0][nid]", '', t('Widget is displayed')); + + // Submit node form with autocomplete value for short title. + $edit = array( + 'title' => $this->randomName(8), + "{$this->field_name}[$langcode][0][nid]" => $node_short_title->title . ' [nid:' . $node_short_title->nid . ']', + ); + $this->drupalPost('node/add/article', $edit, t('Save')); + $this->assertRaw(t('!post %title has been created.', array('!post' => 'Article', '%title' => $edit["title"])), t('Article created.')); + $this->assertText($node_short_title->title, t('Referenced node title is displayed.')); + + // Submit node form with autocomplete value for long title. + $edit = array( + 'title' => $this->randomName(8), + "{$this->field_name}[$langcode][0][nid]" => $node_long_title->title . ' [nid:' . $node_long_title->nid . ']', + ); + $this->drupalPost('node/add/article', $edit, t('Save')); + $this->assertRaw(t('!post %title has been created.', array('!post' => 'Article', '%title' => $edit["title"])), t('Article created.')); + $this->assertText($node_long_title->title, t('Referenced node title is displayed.')); + } +}