Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / node / tests / src / Traits / NodeCreationTrait.php
diff --git a/web/core/modules/node/tests/src/Traits/NodeCreationTrait.php b/web/core/modules/node/tests/src/Traits/NodeCreationTrait.php
new file mode 100644 (file)
index 0000000..6e0cf6a
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+
+namespace Drupal\Tests\node\Traits;
+
+use Drupal\node\Entity\Node;
+
+/**
+ * Provides methods to create node based on default settings.
+ *
+ * This trait is meant to be used only by test classes.
+ */
+trait NodeCreationTrait {
+
+  /**
+   * Get a node from the database based on its title.
+   *
+   * @param string|\Drupal\Component\Render\MarkupInterface $title
+   *   A node title, usually generated by $this->randomMachineName().
+   * @param $reset
+   *   (optional) Whether to reset the entity cache.
+   *
+   * @return \Drupal\node\NodeInterface
+   *   A node entity matching $title.
+   */
+  public function getNodeByTitle($title, $reset = FALSE) {
+    if ($reset) {
+      \Drupal::entityTypeManager()->getStorage('node')->resetCache();
+    }
+    // Cast MarkupInterface objects to string.
+    $title = (string) $title;
+    $nodes = \Drupal::entityTypeManager()
+      ->getStorage('node')
+      ->loadByProperties(['title' => $title]);
+    // Load the first node returned from the database.
+    $returned_node = reset($nodes);
+    return $returned_node;
+  }
+
+  /**
+   * Creates a node based on default settings.
+   *
+   * @param array $settings
+   *   (optional) An associative array of settings for the node, as used in
+   *   entity_create(). Override the defaults by specifying the key and value
+   *   in the array, for example:
+   *   @code
+   *     $this->drupalCreateNode(array(
+   *       'title' => t('Hello, world!'),
+   *       'type' => 'article',
+   *     ));
+   *   @endcode
+   *   The following defaults are provided:
+   *   - body: Random string using the default filter format:
+   *     @code
+   *       $settings['body'][0] = array(
+   *         'value' => $this->randomMachineName(32),
+   *         'format' => filter_default_format(),
+   *       );
+   *     @endcode
+   *   - title: Random string.
+   *   - type: 'page'.
+   *   - uid: The currently logged in user, or anonymous.
+   *
+   * @return \Drupal\node\NodeInterface
+   *   The created node entity.
+   */
+  protected function createNode(array $settings = []) {
+    // Populate defaults array.
+    $settings += [
+      'body'      => [
+        [
+          'value' => $this->randomMachineName(32),
+          'format' => filter_default_format(),
+        ],
+      ],
+      'title'     => $this->randomMachineName(8),
+      'type'      => 'page',
+      'uid'       => \Drupal::currentUser()->id(),
+    ];
+    $node = Node::create($settings);
+    $node->save();
+
+    return $node;
+  }
+
+}