Added Entity and Entity Reference Revisions which got dropped somewhere along the...
[yaffs-website] / web / modules / contrib / entity_reference_revisions / src / Tests / EntityReferenceRevisionsAdminTest.php
diff --git a/web/modules/contrib/entity_reference_revisions/src/Tests/EntityReferenceRevisionsAdminTest.php b/web/modules/contrib/entity_reference_revisions/src/Tests/EntityReferenceRevisionsAdminTest.php
new file mode 100644 (file)
index 0000000..cc7caed
--- /dev/null
@@ -0,0 +1,184 @@
+<?php
+
+namespace Drupal\entity_reference_revisions\Tests;
+
+use Drupal\field_ui\Tests\FieldUiTestTrait;
+use Drupal\node\Entity\Node;
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Tests the entity_reference_revisions configuration.
+ *
+ * @group entity_reference_revisions
+ */
+class EntityReferenceRevisionsAdminTest extends WebTestBase {
+
+  use FieldUiTestTrait;
+  use EntityReferenceRevisionsCoreVersionUiTestTrait;
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array(
+    'node',
+    'field',
+    'entity_reference_revisions',
+    'field_ui',
+    'block',
+  );
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    // Create paragraphs and article content types.
+    $this->drupalCreateContentType(array('type' => 'entity_revisions', 'name' => 'Entity revisions'));
+    $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article'));
+    // Place the breadcrumb, tested in fieldUIAddNewField().
+    $this->drupalPlaceBlock('system_breadcrumb_block');
+    $admin_user = $this->drupalCreateUser(array(
+      'administer site configuration',
+      'administer nodes',
+      'create article content',
+      'administer content types',
+      'administer node fields',
+      'administer node display',
+      'administer node form display',
+      'edit any article content',
+    ));
+    $this->drupalLogin($admin_user);
+  }
+
+  /**
+   * Tests the entity reference revisions configuration.
+   */
+  public function testEntityReferenceRevisions() {
+    // Create a test target node used as entity reference by another test node.
+    $node_target = Node::create([
+      'title' => 'Target node',
+      'type' => 'article',
+      'body' => 'Target body text',
+      'uuid' => '2d04c2b4-9c3d-4fa6-869e-ecb6fa5c9410',
+    ]);
+    $node_target->save();
+
+    // Add an entity reference revisions field to entity_revisions content type
+    // with $node_target as default value.
+    $storage_edit = ['settings[target_type]' => 'node', 'cardinality' => '-1'];
+    $field_edit = [
+      'settings[handler_settings][target_bundles][article]' => TRUE,
+      'default_value_input[field_entity_reference_revisions][0][target_id]' => $node_target->label() . ' (' . $node_target->id() . ')',
+    ];
+    static::fieldUIAddNewField('admin/structure/types/manage/entity_revisions', 'entity_reference_revisions', 'Entity reference revisions', 'entity_reference_revisions', $storage_edit, $field_edit);
+    \Drupal::service('entity_field.manager')->clearCachedFieldDefinitions();
+    $this->assertText('Saved Entity reference revisions configuration.');
+
+    // Resave the target node, so that the default revision is not the one we
+    // want to use.
+    $revision_id = $node_target->getRevisionId();
+    $node_target_after = Node::load($node_target->id());
+    $node_target_after->setNewRevision();
+    $node_target_after->save();
+    $this->assertTrue($node_target_after->getRevisionId() != $revision_id);
+
+    // Create an article.
+    $title = $this->randomMachineName();
+    $edit = array(
+      'title[0][value]' => $title,
+      'body[0][value]' => 'Revision 1',
+    );
+    $this->drupalPostNodeForm('node/add/article', $edit, t('Save and publish'));
+    $this->assertText($title);
+    $this->assertText('Revision 1');
+    $node = $this->drupalGetNodeByTitle($title);
+
+    // Check if when creating an entity revisions content the default entity
+    // reference is set, add also the above article as a new reference.
+    $this->drupalGet('node/add/entity_revisions');
+    $this->assertFieldByName('field_entity_reference_revisions[0][target_id]', $node_target->label() . ' (' . $node_target->id() . ')');
+    $edit = [
+      'title[0][value]' => 'Entity reference revision content',
+      'field_entity_reference_revisions[1][target_id]' => $node->label() . ' (' . $node->id() . ')',
+    ];
+    $this->drupalPostNodeForm(NULL, $edit, t('Save and publish'));
+    $this->assertLinkByHref('node/' . $node_target->id());
+    $this->assertText('Entity revisions Entity reference revision content has been created.');
+    $this->assertText('Entity reference revision content');
+    $this->assertText($title);
+    $this->assertText('Revision 1');
+
+    // Create 2nd revision of the article.
+    $edit = array(
+      'body[0][value]' => 'Revision 2',
+      'revision' => TRUE,
+    );
+    $this->drupalPostNodeForm('node/' . $node->id() . '/edit', $edit, t('Save and keep published'));
+    $this->assertText($title);
+    $this->assertText('Revision 2');
+
+    // View the Entity reference content and make sure it still has revision 1.
+    $node = $this->drupalGetNodeByTitle('Entity reference revision content');
+    $this->drupalGet('node/' . $node->id());
+    $this->assertText($title);
+    $this->assertText('Revision 1');
+    $this->assertNoText('Revision 2');
+
+    // Make sure the non-revisionable entities are not selectable as referenced
+    // entities.
+    $edit = array(
+      'new_storage_type' => 'entity_reference_revisions',
+      'label' => 'Entity reference revisions field',
+      'field_name' => 'entity_ref_revisions_field',
+    );
+    $this->drupalPostForm('admin/structure/types/manage/entity_revisions/fields/add-field', $edit, t('Save and continue'));
+    $this->assertNoOption('edit-settings-target-type', 'user');
+    $this->assertOption('edit-settings-target-type', 'node');
+
+    // Check ERR default value and property definitions label are set properly.
+    $field_definition = $node->getFieldDefinition('field_entity_reference_revisions');
+    $default_value = $field_definition->toArray()['default_value'];
+    $this->assertEqual($default_value[0]['target_uuid'], $node_target->uuid());
+    $this->assertEqual($default_value[0]['target_revision_id'], $revision_id);
+    $properties = $field_definition->getFieldStorageDefinition()->getPropertyDefinitions();
+    $this->assertEqual((string) $properties['target_revision_id']->getLabel(), 'Content revision ID');
+    $this->assertEqual((string) $properties['target_id']->getLabel(), 'Content ID');
+    $this->assertEqual((string) $properties['entity']->getLabel(), 'Content');
+  }
+
+  /**
+   * Tests target bundle settings for an entity reference revisions field.
+   */
+  public function testMultipleTargetBundles() {
+    // Create a couple of content types for the ERR field to point to.
+    $target_types = [];
+    for ($i = 0; $i < 2; $i++) {
+      $target_types[$i] = $this->drupalCreateContentType([
+        'type' => strtolower($this->randomMachineName()),
+        'name' => 'Test type ' . $i
+      ]);
+    }
+
+    // Create a new field that can point to either target content type.
+    $node_type_path = 'admin/structure/types/manage/entity_revisions';
+
+    // Generate a random field name, must be only lowercase characters.
+    $field_name = strtolower($this->randomMachineName());
+
+    $field_edit = [];
+    $storage_edit = ['settings[target_type]' => 'node', 'cardinality' => '-1'];
+    $field_edit['settings[handler_settings][target_bundles][' . $target_types[0]->id() . ']'] = TRUE;
+    $field_edit['settings[handler_settings][target_bundles][' . $target_types[1]->id() . ']'] = TRUE;
+
+    $this->fieldUIAddNewField($node_type_path, $field_name, 'Entity reference revisions', 'entity_reference_revisions', $storage_edit, $field_edit);
+
+    // Deleting one of these content bundles at this point should only delete
+    // that bundle's body field. Test that there is no second field that will
+    // be deleted.
+    $this->drupalGet('/admin/structure/types/manage/' . $target_types[0]->id() . '/delete');
+    $this->assertNoFieldByXPath('(//details[@id="edit-entity-deletes"]//ul[@data-drupal-selector="edit-field-config"]/li)[2]');
+  }
+
+}