Upgraded imagemagick and manually altered pdf to image module to handle changes....
[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   use EntityReferenceRevisionsCoreVersionUiTestTrait;
18
19   /**
20    * Modules to enable.
21    *
22    * @var array
23    */
24   public static $modules = array(
25     'node',
26     'field',
27     'entity_reference_revisions',
28     'field_ui',
29     'block',
30   );
31
32   /**
33    * {@inheritdoc}
34    */
35   protected function setUp() {
36     parent::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',
44       'administer nodes',
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',
51     ));
52     $this->drupalLogin($admin_user);
53   }
54
55   /**
56    * Tests the entity reference revisions configuration.
57    */
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',
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->drupalPostNodeForm('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->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');
112
113     // Create 2nd revision of the article.
114     $edit = array(
115       'body[0][value]' => 'Revision 2',
116       'revision' => TRUE,
117     );
118     $this->drupalPostNodeForm('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   /**
152    * Tests target bundle settings for an entity reference revisions field.
153    */
154   public function testMultipleTargetBundles() {
155     // Create a couple of content types for the ERR field to point to.
156     $target_types = [];
157     for ($i = 0; $i < 2; $i++) {
158       $target_types[$i] = $this->drupalCreateContentType([
159         'type' => strtolower($this->randomMachineName()),
160         'name' => 'Test type ' . $i
161       ]);
162     }
163
164     // Create a new field that can point to either target content type.
165     $node_type_path = 'admin/structure/types/manage/entity_revisions';
166
167     // Generate a random field name, must be only lowercase characters.
168     $field_name = strtolower($this->randomMachineName());
169
170     $field_edit = [];
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;
174
175     $this->fieldUIAddNewField($node_type_path, $field_name, 'Entity reference revisions', 'entity_reference_revisions', $storage_edit, $field_edit);
176
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
179     // be deleted.
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]');
182   }
183
184 }