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