- <?php
- * @file
- * Contains EntityReferenceFormTestCase.
- */
-
- * Test for Entity Reference form.
- */
- class EntityReferenceFormTestCase extends BackdropWebTestCase {
- public $admin_user;
-
-
- * {@inheritdoc}
- */
- public function setUp() {
-
-
- parent::setUp(array('entity', 'views'));
- module_enable(array('entityreference', 'entityreference_views_test'));
-
-
- $this->admin_user = $this->backdropCreateUser(array('bypass node access'));
- $this->backdropLogin($this->admin_user);
- }
-
-
- * Test that the Generic autocomplete widget validates the value properly.
- */
- public function testAutocompleteValidationWithGenericSelectionHandler() {
- $type_referenced = $this->backdropCreateContentType();
- $type_referencing = $this->backdropCreateContentType();
-
- $field_name = 'field_' . $type_referenced->type;
- $field = array(
- 'field_name' => $field_name,
- 'settings' => array(
- 'handler' => 'base',
- 'target_type' => 'node',
- 'handler_settings' => array(
- 'target_bundles' => array($type_referenced->type),
- ),
- ),
- );
- $field_instance = array(
- 'field_name' => $field_name,
- 'bundle' => $type_referencing->type,
- );
- $this->createEntityReferenceFieldForNode($field, $field_instance);
-
- $node = $this->backdropCreateNode(array('type' => $type_referenced->type));
- $title_valid = $node->title;
- $this->postNodeFormWithEntityReference($type_referencing, $field_name, $title_valid);
- $this->assertNoText('There are no entities matching "' . $title_valid . '"',
- 'No validation error occurs for a valid title.');
-
- $title_invalid = $this->randomName();
- $this->postNodeFormWithEntityReference($type_referencing, $field_name, $title_invalid);
- $this->assertText('There are no entities matching "' . $title_invalid . '"',
- 'A validation error occurs for an invalid title.');
-
- $title_many_nodes_has = $this->randomName();
- for ($i = 0; $i < 6; $i++) {
- $node = $this->backdropCreateNode(array(
- 'type' => $type_referenced->type,
- 'title' => $title_many_nodes_has,
- ));
- }
- $this->postNodeFormWithEntityReference($type_referencing, $field_name, $title_many_nodes_has);
- $this->assertText('Many entities are called ' . $title_many_nodes_has . '.',
- 'A validation error occurs for a title shared by too many nodes.');
-
- $title_several_nodes_has = $this->randomName();
- for ($i = 0; $i < 2; $i++) {
- $node = $this->backdropCreateNode(array(
- 'type' => $type_referenced->type,
- 'title' => $title_several_nodes_has,
- ));
- }
- $this->postNodeFormWithEntityReference($type_referencing, $field_name, $title_several_nodes_has);
- $this->assertText('Multiple entities match this reference; ',
- 'A validation error occurs for a title shared by several nodes.');
- }
-
-
- * Test that the Views autocomplete widget validates the value properly.
- */
- public function testAutocompleteValidationWithViewsSelectionHandler() {
- $type_referenced = $this->backdropCreateContentType();
- $type_referencing = $this->backdropCreateContentType();
-
- $field_name = 'field_' . $type_referenced->type;
- $field = array(
- 'field_name' => $field_name,
- 'settings' => array(
- "handler" => "views",
- "target_type" => "node",
- "handler_settings" => array(
- "view" => array(
- "view_name" => "test_entityreference_select_node",
- "display_name" => "entityreference_1",
- "args" => array(),
- ),
- "behaviors" => array(
- "views-select-list" => array(
- "status" => 0,
- ),
- ),
- ),
- ),
- );
- $field_instance = array(
- 'field_name' => $field_name,
- 'bundle' => $type_referencing->type,
- );
- $this->createEntityReferenceFieldForNode($field, $field_instance);
-
- $node = $this->backdropCreateNode(array('type' => $type_referenced->type));
- $title_valid = $node->title;
- $this->postNodeFormWithEntityReference($type_referencing, $field_name, $title_valid);
- $this->assertNoText('No items found for ' . $field_name,
- 'No validation error occurs for a valid title.');
-
- $title_invalid = $this->randomName();
- $this->postNodeFormWithEntityReference($type_referencing, $field_name, $title_invalid);
- $this->assertText('No items found for ' . $field_name,
- 'A validation error occurs for an invalid title.');
-
- $title_many_nodes_has = $this->randomName();
- for ($i = 0; $i < 6; $i++) {
- $node = $this->backdropCreateNode(array(
- 'type' => $type_referenced->type,
- 'title' => $title_many_nodes_has,
- ));
- }
- $this->postNodeFormWithEntityReference($type_referencing, $field_name, $title_many_nodes_has);
- $this->assertText('Too many items found for ' . $field_name . '.',
- 'A validation error occurs for a title shared by too many nodes.');
-
- $title_several_nodes_has = $this->randomName();
- for ($i = 0; $i < 2; $i++) {
- $node = $this->backdropCreateNode(array(
- 'type' => $type_referenced->type,
- 'title' => $title_several_nodes_has,
- ));
- }
- $this->postNodeFormWithEntityReference($type_referencing, $field_name, $title_several_nodes_has);
- $this->assertText('Multiple items found for ' . $field_name . ':',
- 'A validation error occurs for a title shared by several nodes.');
- }
-
-
- * Helper method to create a base field and field instance.
- *
- * @param array $field
- * The field to be created.
- * @param array $field_instance
- * The field instance to be created.
- */
- protected function createEntityReferenceFieldForNode(array $field, array $field_instance) {
-
-
- $field += array(
- 'type' => 'entityreference',
- 'translatable' => FALSE,
- 'entity_types' => array('node'),
- );
- $field_instance += array(
- 'entity_type' => 'node',
- 'widget' => array(
- 'type' => 'entityreference_autocomplete',
- 'module' => 'entityreference',
- ),
- );
-
- $field = field_create_field($field);
- field_create_instance($field_instance);
- }
-
-
- * Helper method to submit node creation form.
- *
- * @param object $type
- * Node type object.
- * @param string $field_name
- * Name of the Entity Reference field.
- * @param string $title
- * The node title to enter into the Entity Reference field.
- */
- protected function postNodeFormWithEntityReference($type, $field_name, $title) {
- $type_path = 'node/add/' . str_replace('_', '-', $type->type);
- $edit = array(
- $field_name . '[und][0][target_id]' => $title,
- );
-
- $this->backdropPost($type_path, $edit, t('Save'));
- }
-
- }