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