trait NodeCreationTrait

Same name and namespace in other branches
  1. 9 core/modules/node/tests/src/Traits/NodeCreationTrait.php \Drupal\Tests\node\Traits\NodeCreationTrait
  2. 8.9.x core/modules/simpletest/src/NodeCreationTrait.php \Drupal\simpletest\NodeCreationTrait
  3. 8.9.x core/modules/node/tests/src/Traits/NodeCreationTrait.php \Drupal\Tests\node\Traits\NodeCreationTrait
  4. 10 core/modules/node/tests/src/Traits/NodeCreationTrait.php \Drupal\Tests\node\Traits\NodeCreationTrait

Provides methods to create node based on default settings.

This trait is meant to be used only by test classes.

Hierarchy

37 files declare their use of NodeCreationTrait
BlockExposedFilterAJAXTest.php in core/modules/views/tests/src/FunctionalJavascript/BlockExposedFilterAJAXTest.php
BrowserTestBase.php in core/tests/Drupal/Tests/BrowserTestBase.php
BulkFormTest.php in core/modules/views/tests/src/Functional/BulkFormTest.php
ClaroViewsBulkOperationsTest.php in core/tests/Drupal/FunctionalJavascriptTests/Theme/ClaroViewsBulkOperationsTest.php
ClickSortingAJAXTest.php in core/modules/views/tests/src/FunctionalJavascript/ClickSortingAJAXTest.php

... See full list

File

core/modules/node/tests/src/Traits/NodeCreationTrait.php, line 15

Namespace

Drupal\Tests\node\Traits
View source
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|false
     *   A node entity matching $title, FALSE when node with $title is not found.
     */
    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 $values
     *   (optional) An associative array of values for the node, as used in
     *   creation of entity. Override the defaults by specifying the key and value
     *   in the array, for example:
     *
     *   @code
     *     $this->drupalCreateNode([
     *       'title' => t('Hello, world!'),
     *       'type' => 'article',
     *     ]);
     *   @endcode
     *   The following defaults are provided, if the node has the field in
     *   question:
     *   - body: Random string using the default filter format:
     *     @code
     *       $values['body'][0] = [
     *         '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 $values = []) {
        // Populate defaults array.
        $values += [
            'title' => $this->randomMachineName(8),
            'type' => 'page',
        ];
        // Create node object.
        $node = Node::create($values);
        // If the node has a field named 'body', we assume it's a body field and
        // that the filter module is present.
        if (!array_key_exists('body', $values) && $node->hasField('body')) {
            $body = [
                'value' => $this->randomMachineName(32),
                'format' => filter_default_format(),
            ];
            $node->set('body', $body);
        }
        if (!array_key_exists('uid', $values)) {
            $user = User::load(\Drupal::currentUser()->id());
            if ($user) {
                $uid = $user->id();
            }
            elseif (method_exists($this, 'setUpCurrentUser')) {
                
                /** @var \Drupal\user\UserInterface $user */
                $user = $this->setUpCurrentUser();
                $uid = $user->id();
            }
            else {
                $uid = 0;
            }
            $node->set('uid', $uid);
        }
        $node->save();
        return $node;
    }

}

Members

Title Sort descending Modifiers Object type Summary
NodeCreationTrait::createNode protected function Creates a node based on default settings.
NodeCreationTrait::getNodeByTitle public function Get a node from the database based on its title.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.