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