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