contentserialize-8.x-1.x-dev/tests/src/Kernel/EntityReferenceRevisionsTest.php

tests/src/Kernel/EntityReferenceRevisionsTest.php
<?php

namespace Drupal\Tests\contentserialize\Kernel;

use Drupal\contentserialize\Destination\FileDestination;
use Drupal\contentserialize\Source\FileSource;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\node\Entity\Node;
use Drupal\Tests\contentserialize\Traits\NodeKernelTestTrait;

/**
 * Provides tests for serializing entity reference revision fields.
 *
 * @requires module entity_reference_revisions
 *
 * @group contentserialize
 */
class EntityReferenceRevisionsTest extends KernelTestBase {

  use NodeKernelTestTrait;

  protected static $modules = ['entity_reference', 'entity_reference_revisions'];

  /**
   * {@inheritdoc}
   */
  public function setUp() {
    parent::setUp();
    $this->setUpNode();
  }

  /**
   * Test a simple export and import with an entity reference revision field.
   */
  function testExportImport() {
    $this->createContentType(['type' => 'article']);

    // Add the entity_reference_revisions field to article.
    // @todo It's not very realistic to have a node target type, but I dont see
    //   why that should be a problem. block_content might be a better choice.
    $field_storage = FieldStorageConfig::create([
      'field_name' => 'field_embedded',
      'entity_type' => 'node',
      'type' => 'entity_reference_revisions',
      'settings' => ['target_type' => 'node'],
    ]);
    $field_storage->save();
    FieldConfig::create(array(
      'field_storage' => $field_storage,
      'bundle' => 'article',
    ))->save();

    // Create a target node that's referenced by a host node.
    $target = Node::create([
      'type' => 'article',
      'title' => 'Target',
      'body' => ['value' => 'Target Body', 'format' => 'basic_html'],
      'uid' => 1,
    ]);
    $target->save();

    $host = Node::create([
      'type' => 'article',
      'title' => 'Host',
      'body' => ['value' => 'Host Body', 'format' => 'basic_html'],
      'uid' => 1,
    ]);
    $host->field_embedded = $target;
    $host->save();

    // Export them.
    $destination = new FileDestination($this->getContentDirectory());
    /** @var \Drupal\contentserialize\ExporterInterface $exporter */
    $exporter = \Drupal::service('contentserialize.exporter');
    $serialized = $exporter->exportMultiple([$host, $target], 'json', ['json_encode_options' => JSON_PRETTY_PRINT]);
    $destination->saveMultiple($serialized);

    // Delete them.
    $uuids = ['host' => $host->uuid(), 'target' => $target->uuid()];
    $host->delete();
    $target->delete();

    // Reimport them.
    /** @var \Drupal\contentserialize\ImporterInterface $importer */
    $importer = \Drupal::service('contentserialize.importer');
    $result = $importer->import(new FileSource($this->getContentDirectory()));
    $nodes = \Drupal::entityTypeManager()->getStorage('node')
      ->loadByProperties(['uuid' => array_values($uuids)]);
    foreach ($nodes as $node) {
      $nodes[$node->uuid()] = $node;
    }
    $host = $nodes[$uuids['host']];
    $target = $nodes[$uuids['target']];

    // Check them.
    $this->assertEmpty($result->getFailures(), "There aren't any import errors.");

    $this->assertEquals($uuids['host'], $host->uuid());
    $this->assertEquals($uuids['target'], $target->uuid());

    $this->assertEquals('Host', $host->label());
    $this->assertEquals('Target', $target->label());

    $this->assertEquals('Host Body', $host->body->value);
    $this->assertEquals('Target Body', $target->body->value);

    $this->assertEquals($target->id(), $host->field_embedded->target_id);

    $this->assertEquals(1, $host->uid->target_id);
    $this->assertEquals(1, $target->uid->target_id);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc