156 lines
5.3 KiB
Plaintext
156 lines
5.3 KiB
Plaintext
<?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.'));
|
|
}
|
|
}
|