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 }
|