annotate 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
rev   line source
danielebarchiesi@4 1 <?php
danielebarchiesi@4 2
danielebarchiesi@4 3 /**
danielebarchiesi@4 4 * @file
danielebarchiesi@4 5 * Initial node_reference tests
danielebarchiesi@4 6 */
danielebarchiesi@4 7
danielebarchiesi@4 8 /**
danielebarchiesi@4 9 * Unit tests for referenceability of node types in entity forms.
danielebarchiesi@4 10 */
danielebarchiesi@4 11 class NodeReferenceFormTest extends FieldTestCase {
danielebarchiesi@4 12 public static function getInfo() {
danielebarchiesi@4 13 return array(
danielebarchiesi@4 14 'name' => 'Node reference',
danielebarchiesi@4 15 'description' => 'Make sure nodes are referenceable in entity forms.',
danielebarchiesi@4 16 'group' => 'References',
danielebarchiesi@4 17 );
danielebarchiesi@4 18 }
danielebarchiesi@4 19
danielebarchiesi@4 20 function setUp() {
danielebarchiesi@4 21 parent::setUp(array('node_reference', 'field_test'));
danielebarchiesi@4 22
danielebarchiesi@4 23 $this->langcode = LANGUAGE_NONE;
danielebarchiesi@4 24 $this->field_name = 'test_node_reference';
danielebarchiesi@4 25 $this->field = array(
danielebarchiesi@4 26 'field_name' => $this->field_name,
danielebarchiesi@4 27 'type' => 'node_reference',
danielebarchiesi@4 28 'cardinality' => 1,
danielebarchiesi@4 29 'settings' => array(
danielebarchiesi@4 30 'referenceable_types' => array_keys(node_type_get_names()),
danielebarchiesi@4 31 ),
danielebarchiesi@4 32 );
danielebarchiesi@4 33 $this->field = field_create_field($this->field);
danielebarchiesi@4 34 $this->instance = array(
danielebarchiesi@4 35 'field_name' => $this->field_name,
danielebarchiesi@4 36 'entity_type' => 'test_entity',
danielebarchiesi@4 37 'bundle' => 'test_bundle',
danielebarchiesi@4 38 'widget' => array(
danielebarchiesi@4 39 'type' => 'options_buttons',
danielebarchiesi@4 40 ),
danielebarchiesi@4 41 );
danielebarchiesi@4 42
danielebarchiesi@4 43 $this->instance = field_create_instance($this->instance);
danielebarchiesi@4 44
danielebarchiesi@4 45 $this->nodes = array();
danielebarchiesi@4 46 foreach (node_type_get_names() as $type_name => $type_title) {
danielebarchiesi@4 47 $this->nodes[$type_name] = $this->drupalCreateNode(array(
danielebarchiesi@4 48 'type' => $type_name,
danielebarchiesi@4 49 'title' => $this->randomName(8),
danielebarchiesi@4 50 ));
danielebarchiesi@4 51 $this->pass(t('Created %type node %nid: %title', array(
danielebarchiesi@4 52 '%type' => $type_name,
danielebarchiesi@4 53 '%nid' => $this->nodes[$type_name]->nid,
danielebarchiesi@4 54 '%title' => $this->nodes[$type_name]->title,
danielebarchiesi@4 55 )), 'destination creation');
danielebarchiesi@4 56 }
danielebarchiesi@4 57 }
danielebarchiesi@4 58
danielebarchiesi@4 59 function runReferenceableNodeTest($allowed, $group) {
danielebarchiesi@4 60 field_update_field(array(
danielebarchiesi@4 61 'field_name' => $this->field_name,
danielebarchiesi@4 62 'settings' => array('referenceable_types' => array_keys($allowed)),
danielebarchiesi@4 63 ));
danielebarchiesi@4 64 $entity = field_test_create_stub_entity();
danielebarchiesi@4 65 $form = drupal_get_form('field_test_entity_form', $entity);
danielebarchiesi@4 66 $options = $form[$this->field_name][$this->langcode]['#options'];
danielebarchiesi@4 67 $this->assertTrue(isset($options['_none']), t('Empty choice offered for reference'), $group);
danielebarchiesi@4 68 unset($options['_none']);
danielebarchiesi@4 69 foreach ($this->nodes as $node) {
danielebarchiesi@4 70 if (isset($allowed[$node->type])) {
danielebarchiesi@4 71 $this->assertTrue(isset($options[$node->nid]),
danielebarchiesi@4 72 t('Node of type @type is referenceable', array('@type' => $node->type)),
danielebarchiesi@4 73 $group);
danielebarchiesi@4 74 }
danielebarchiesi@4 75 else {
danielebarchiesi@4 76 $this->assertFalse(isset($options[$node->nid]),
danielebarchiesi@4 77 t('Node of type @type is not referenceable', array('@type' => $node->type)),
danielebarchiesi@4 78 $group);
danielebarchiesi@4 79 }
danielebarchiesi@4 80 unset($options[$node->nid]);
danielebarchiesi@4 81 }
danielebarchiesi@4 82 $this->assertTrue(empty($options), t('No extra choice is referenceable'), $group);
danielebarchiesi@4 83 }
danielebarchiesi@4 84
danielebarchiesi@4 85 /**
danielebarchiesi@4 86 * Test unlimited referencing
danielebarchiesi@4 87 */
danielebarchiesi@4 88 function testReferenceableNodeTypesAll() {
danielebarchiesi@4 89 $allowed = node_type_get_names();
danielebarchiesi@4 90 $this->runReferenceableNodeTest($allowed, t('Unimited referencing'));
danielebarchiesi@4 91 }
danielebarchiesi@4 92
danielebarchiesi@4 93 /**
danielebarchiesi@4 94 * Test referencing a limited list of node types
danielebarchiesi@4 95 */
danielebarchiesi@4 96 function testReferenceableNodeTypesOne() {
danielebarchiesi@4 97 $allowed = array_slice(node_type_get_names(), 0, 1, TRUE);
danielebarchiesi@4 98 $this->runReferenceableNodeTest($allowed, t('Limited referencing'));
danielebarchiesi@4 99 }
danielebarchiesi@4 100
danielebarchiesi@4 101
danielebarchiesi@4 102 /**
danielebarchiesi@4 103 * Test autocomplete widget.
danielebarchiesi@4 104 */
danielebarchiesi@4 105 function testLongNodeReferenceWidget() {
danielebarchiesi@4 106 // Create regular test user.
danielebarchiesi@4 107 $web_user = $this->drupalCreateUser(array('create article content', 'access content'));
danielebarchiesi@4 108 $this->drupalLogin($web_user);
danielebarchiesi@4 109
danielebarchiesi@4 110 // Create test field instance on article node type.
danielebarchiesi@4 111 $instance = array(
danielebarchiesi@4 112 'field_name' => $this->field_name,
danielebarchiesi@4 113 'entity_type' => 'node',
danielebarchiesi@4 114 'bundle' => 'article',
danielebarchiesi@4 115 'widget' => array(
danielebarchiesi@4 116 'type' => 'node_reference_autocomplete',
danielebarchiesi@4 117 ),
danielebarchiesi@4 118 );
danielebarchiesi@4 119 $instance = field_create_instance($instance);
danielebarchiesi@4 120
danielebarchiesi@4 121 // Create a node with a short title and a node with a title longer than
danielebarchiesi@4 122 // 128 characters.
danielebarchiesi@4 123 $node_short_title = $this->drupalCreateNode(array(
danielebarchiesi@4 124 'type' => 'page',
danielebarchiesi@4 125 'title' => $this->randomName(8),
danielebarchiesi@4 126 ));
danielebarchiesi@4 127 $node_long_title = $this->drupalCreateNode(array(
danielebarchiesi@4 128 'type' => 'page',
danielebarchiesi@4 129 'title' => $this->randomName(200),
danielebarchiesi@4 130 ));
danielebarchiesi@4 131
danielebarchiesi@4 132 // Display node creation form.
danielebarchiesi@4 133 $langcode = LANGUAGE_NONE;
danielebarchiesi@4 134 $this->drupalGet('node/add/article');
danielebarchiesi@4 135 $this->assertFieldByName("{$this->field_name}[$langcode][0][nid]", '', t('Widget is displayed'));
danielebarchiesi@4 136
danielebarchiesi@4 137 // Submit node form with autocomplete value for short title.
danielebarchiesi@4 138 $edit = array(
danielebarchiesi@4 139 'title' => $this->randomName(8),
danielebarchiesi@4 140 "{$this->field_name}[$langcode][0][nid]" => $node_short_title->title . ' [nid:' . $node_short_title->nid . ']',
danielebarchiesi@4 141 );
danielebarchiesi@4 142 $this->drupalPost('node/add/article', $edit, t('Save'));
danielebarchiesi@4 143 $this->assertRaw(t('!post %title has been created.', array('!post' => 'Article', '%title' => $edit["title"])), t('Article created.'));
danielebarchiesi@4 144 $this->assertText($node_short_title->title, t('Referenced node title is displayed.'));
danielebarchiesi@4 145
danielebarchiesi@4 146 // Submit node form with autocomplete value for long title.
danielebarchiesi@4 147 $edit = array(
danielebarchiesi@4 148 'title' => $this->randomName(8),
danielebarchiesi@4 149 "{$this->field_name}[$langcode][0][nid]" => $node_long_title->title . ' [nid:' . $node_long_title->nid . ']',
danielebarchiesi@4 150 );
danielebarchiesi@4 151 $this->drupalPost('node/add/article', $edit, t('Save'));
danielebarchiesi@4 152 $this->assertRaw(t('!post %title has been created.', array('!post' => 'Article', '%title' => $edit["title"])), t('Article created.'));
danielebarchiesi@4 153 $this->assertText($node_long_title->title, t('Referenced node title is displayed.'));
danielebarchiesi@4 154 }
danielebarchiesi@4 155 }