ImporterTest.php

Namespace

Drupal\KernelTests\Core\DefaultContent

File

core/tests/Drupal/KernelTests/Core/DefaultContent/ImporterTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\KernelTests\Core\DefaultContent;

use Drupal\Core\DefaultContent\Finder;
use Drupal\Core\DefaultContent\Importer;
use Drupal\Core\DefaultContent\PreEntityImportEvent;
use Drupal\Core\Entity\EntityRepositoryInterface;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\user\Traits\UserCreationTrait;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;

/**
 * Tests the Default Content Importer.
 */
class ImporterTest extends KernelTestBase implements EventSubscriberInterface {
  use UserCreationTrait;
  
  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'system',
    'user',
    'entity_test',
  ];
  
  /**
   * {@inheritdoc}
   */
  protected function setUp() : void {
    parent::setUp();
    $this->installEntitySchema('entity_test');
    $this->container
      ->get(EventDispatcherInterface::class)
      ->addSubscriber($this);
  }
  
  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() : array {
    return [
      PreEntityImportEvent::class => 'onPreEntityImport',
    ];
  }
  
  /**
   * Modify entity data before it is imported.
   *
   * @param \Drupal\Core\DefaultContent\PreEntityImportEvent $event
   *   The event being handled.
   */
  public function onPreEntityImport(PreEntityImportEvent $event) : void {
    self::assertSame('entity_test', $event->metadata['entity_type']);
    if ($event->metadata['uuid'] === '01234567-89ab-cdef-0123-456789abcdef') {
      $event->data['default']['name'] = [
        [
          'value' => 'Changed name',
        ],
      ];
    }
    // Anything we put in `_meta` should be discarded.
    $event->data['_meta']['entity_type'] = 'This will be ignored.';
  }
  
  /**
   * Tests changing entity data upon import.
   */
  public function testChangeDataOnImport() : void {
    $this->setUpCurrentUser(admin: TRUE);
    $finder = new Finder($this->getDrupalRoot() . '/core/tests/fixtures/pre_entity_import_default_content');
    $this->container
      ->get(Importer::class)
      ->importContent($finder);
    $entity = $this->container
      ->get(EntityRepositoryInterface::class)
      ->loadEntityByUuid('entity_test', '01234567-89ab-cdef-0123-456789abcdef');
    self::assertSame('Changed name', $entity?->label());
  }

}

Classes

Title Deprecated Summary
ImporterTest Tests the Default Content Importer.

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