3 namespace Drupal\entity_reference_revisions\Tests;
5 use Drupal\field_ui\Tests\FieldUiTestTrait;
6 use Drupal\node\Entity\Node;
7 use Drupal\simpletest\WebTestBase;
10 * Tests the entity_reference_revisions configuration.
12 * @group entity_reference_revisions
14 class EntityReferenceRevisionsAdminTest extends WebTestBase {
17 use EntityReferenceRevisionsCoreVersionUiTestTrait;
24 public static $modules = array(
27 'entity_reference_revisions',
35 protected function setUp() {
37 // Create paragraphs and article content types.
38 $this->drupalCreateContentType(array('type' => 'entity_revisions', 'name' => 'Entity revisions'));
39 $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article'));
40 // Place the breadcrumb, tested in fieldUIAddNewField().
41 $this->drupalPlaceBlock('system_breadcrumb_block');
42 $admin_user = $this->drupalCreateUser(array(
43 'administer site configuration',
45 'create article content',
46 'administer content types',
47 'administer node fields',
48 'administer node display',
49 'administer node form display',
50 'edit any article content',
52 $this->drupalLogin($admin_user);
56 * Tests the entity reference revisions configuration.
58 public function testEntityReferenceRevisions() {
59 // Create a test target node used as entity reference by another test node.
60 $node_target = Node::create([
61 'title' => 'Target node',
63 'body' => 'Target body text',
64 'uuid' => '2d04c2b4-9c3d-4fa6-869e-ecb6fa5c9410',
68 // Add an entity reference revisions field to entity_revisions content type
69 // with $node_target as default value.
70 $storage_edit = ['settings[target_type]' => 'node', 'cardinality' => '-1'];
72 'settings[handler_settings][target_bundles][article]' => TRUE,
73 'default_value_input[field_entity_reference_revisions][0][target_id]' => $node_target->label() . ' (' . $node_target->id() . ')',
75 static::fieldUIAddNewField('admin/structure/types/manage/entity_revisions', 'entity_reference_revisions', 'Entity reference revisions', 'entity_reference_revisions', $storage_edit, $field_edit);
76 \Drupal::service('entity_field.manager')->clearCachedFieldDefinitions();
77 $this->assertText('Saved Entity reference revisions configuration.');
79 // Resave the target node, so that the default revision is not the one we
81 $revision_id = $node_target->getRevisionId();
82 $node_target_after = Node::load($node_target->id());
83 $node_target_after->setNewRevision();
84 $node_target_after->save();
85 $this->assertTrue($node_target_after->getRevisionId() != $revision_id);
88 $title = $this->randomMachineName();
90 'title[0][value]' => $title,
91 'body[0][value]' => 'Revision 1',
93 $this->drupalPostNodeForm('node/add/article', $edit, t('Save and publish'));
94 $this->assertText($title);
95 $this->assertText('Revision 1');
96 $node = $this->drupalGetNodeByTitle($title);
98 // Check if when creating an entity revisions content the default entity
99 // reference is set, add also the above article as a new reference.
100 $this->drupalGet('node/add/entity_revisions');
101 $this->assertFieldByName('field_entity_reference_revisions[0][target_id]', $node_target->label() . ' (' . $node_target->id() . ')');
103 'title[0][value]' => 'Entity reference revision content',
104 'field_entity_reference_revisions[1][target_id]' => $node->label() . ' (' . $node->id() . ')',
106 $this->drupalPostNodeForm(NULL, $edit, t('Save and publish'));
107 $this->assertLinkByHref('node/' . $node_target->id());
108 $this->assertText('Entity revisions Entity reference revision content has been created.');
109 $this->assertText('Entity reference revision content');
110 $this->assertText($title);
111 $this->assertText('Revision 1');
113 // Create 2nd revision of the article.
115 'body[0][value]' => 'Revision 2',
118 $this->drupalPostNodeForm('node/' . $node->id() . '/edit', $edit, t('Save and keep published'));
119 $this->assertText($title);
120 $this->assertText('Revision 2');
122 // View the Entity reference content and make sure it still has revision 1.
123 $node = $this->drupalGetNodeByTitle('Entity reference revision content');
124 $this->drupalGet('node/' . $node->id());
125 $this->assertText($title);
126 $this->assertText('Revision 1');
127 $this->assertNoText('Revision 2');
129 // Make sure the non-revisionable entities are not selectable as referenced
132 'new_storage_type' => 'entity_reference_revisions',
133 'label' => 'Entity reference revisions field',
134 'field_name' => 'entity_ref_revisions_field',
136 $this->drupalPostForm('admin/structure/types/manage/entity_revisions/fields/add-field', $edit, t('Save and continue'));
137 $this->assertNoOption('edit-settings-target-type', 'user');
138 $this->assertOption('edit-settings-target-type', 'node');
140 // Check ERR default value and property definitions label are set properly.
141 $field_definition = $node->getFieldDefinition('field_entity_reference_revisions');
142 $default_value = $field_definition->toArray()['default_value'];
143 $this->assertEqual($default_value[0]['target_uuid'], $node_target->uuid());
144 $this->assertEqual($default_value[0]['target_revision_id'], $revision_id);
145 $properties = $field_definition->getFieldStorageDefinition()->getPropertyDefinitions();
146 $this->assertEqual((string) $properties['target_revision_id']->getLabel(), 'Content revision ID');
147 $this->assertEqual((string) $properties['target_id']->getLabel(), 'Content ID');
148 $this->assertEqual((string) $properties['entity']->getLabel(), 'Content');
152 * Tests target bundle settings for an entity reference revisions field.
154 public function testMultipleTargetBundles() {
155 // Create a couple of content types for the ERR field to point to.
157 for ($i = 0; $i < 2; $i++) {
158 $target_types[$i] = $this->drupalCreateContentType([
159 'type' => strtolower($this->randomMachineName()),
160 'name' => 'Test type ' . $i
164 // Create a new field that can point to either target content type.
165 $node_type_path = 'admin/structure/types/manage/entity_revisions';
167 // Generate a random field name, must be only lowercase characters.
168 $field_name = strtolower($this->randomMachineName());
171 $storage_edit = ['settings[target_type]' => 'node', 'cardinality' => '-1'];
172 $field_edit['settings[handler_settings][target_bundles][' . $target_types[0]->id() . ']'] = TRUE;
173 $field_edit['settings[handler_settings][target_bundles][' . $target_types[1]->id() . ']'] = TRUE;
175 $this->fieldUIAddNewField($node_type_path, $field_name, 'Entity reference revisions', 'entity_reference_revisions', $storage_edit, $field_edit);
177 // Deleting one of these content bundles at this point should only delete
178 // that bundle's body field. Test that there is no second field that will
180 $this->drupalGet('/admin/structure/types/manage/' . $target_types[0]->id() . '/delete');
181 $this->assertNoFieldByXPath('(//details[@id="edit-entity-deletes"]//ul[@data-drupal-selector="edit-field-config"]/li)[2]');