e0a4c592740a2ce3871045364112aedc8b072deb
[yaffs-website] / web / modules / contrib / entity_reference_revisions / src / Tests / EntityReferenceRevisionsAdminTest.php
1 <?php
2
3 namespace Drupal\entity_reference_revisions\Tests;
4
5 use Drupal\field_ui\Tests\FieldUiTestTrait;
6 use Drupal\node\Entity\Node;
7 use Drupal\simpletest\WebTestBase;
8
9 /**
10  * Tests the entity_reference_revisions configuration.
11  *
12  * @group entity_reference_revisions
13  */
14 class EntityReferenceRevisionsAdminTest extends WebTestBase {
15
16   use FieldUiTestTrait;
17
18   /**
19    * Modules to enable.
20    *
21    * @var array
22    */
23   public static $modules = array(
24     'node',
25     'field',
26     'entity_reference_revisions',
27     'field_ui',
28     'block',
29   );
30
31   /**
32    * {@inheritdoc}
33    */
34   protected function setUp() {
35     parent::setUp();
36     // Create paragraphs and article content types.
37     $this->drupalCreateContentType(array('type' => 'entity_revisions', 'name' => 'Entity revisions'));
38     $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article'));
39     // Place the breadcrumb, tested in fieldUIAddNewField().
40     $this->drupalPlaceBlock('system_breadcrumb_block');
41   }
42
43   /**
44    * Tests the entity reference revisions configuration.
45    */
46   public function testEntityReferenceRevisions() {
47     $admin_user = $this->drupalCreateUser(array(
48       'administer site configuration',
49       'administer nodes',
50       'create article content',
51       'administer content types',
52       'administer node fields',
53       'administer node display',
54       'administer node form display',
55       'edit any article content',
56     ));
57     $this->drupalLogin($admin_user);
58
59     // Create a test target node used as entity reference by another test node.
60     $node_target = Node::create([
61       'title' => 'Target node',
62       'type' => 'article',
63       'body' => 'Target body text',
64       'uuid' => '2d04c2b4-9c3d-4fa6-869e-ecb6fa5c9410',
65     ]);
66     $node_target->save();
67
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'];
71     $field_edit = [
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() . ')',
74     ];
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.');
78
79     // Resave the target node, so that the default revision is not the one we
80     // want to use.
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);
86
87     // Create an article.
88     $title = $this->randomMachineName();
89     $edit = array(
90       'title[0][value]' => $title,
91       'body[0][value]' => 'Revision 1',
92     );
93     $this->drupalPostForm('node/add/article', $edit, t('Save and publish'));
94     $this->assertText($title);
95     $this->assertText('Revision 1');
96     $node = $this->drupalGetNodeByTitle($title);
97
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() . ')');
102     $edit = [
103       'title[0][value]' => 'Entity reference revision content',
104       'field_entity_reference_revisions[1][target_id]' => $node->label() . ' (' . $node->id() . ')',
105     ];
106     $this->drupalPostForm(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');
112
113     // Create 2nd revision of the article.
114     $edit = array(
115       'body[0][value]' => 'Revision 2',
116       'revision' => TRUE,
117     );
118     $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save and keep published'));
119     $this->assertText($title);
120     $this->assertText('Revision 2');
121
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');
128
129     // Make sure the non-revisionable entities are not selectable as referenced
130     // entities.
131     $edit = array(
132       'new_storage_type' => 'entity_reference_revisions',
133       'label' => 'Entity reference revisions field',
134       'field_name' => 'entity_ref_revisions_field',
135     );
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');
139
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');
149   }
150
151 }