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

tests/src/Kernel/MetatagTest.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 metatags.
 *
 * @requires module metatag
 *
 * @group contentserialize
 */
class MetatagTest extends KernelTestBase {

  use NodeKernelTestTrait;

  /**
   * {@inheritdoc}
   */
  protected static $modules = ['metatag', 'token'];

  /**
   * The metatag manager service.
   *
   * @var \Drupal\metatag\MetatagManagerInterface
   */
  protected $metatagManager;

  /**
   * The content serialize importer service.
   *
   * @var \Drupal\contentserialize\ImporterInterface
   */
  protected $importer;

  /**
   * The content serialize exporter service.
   *
   * @var \Drupal\contentserialize\ExporterInterface
   */
  protected $exporter;

  /**
   * The entity repository service.
   *
   * @var \Drupal\Core\Entity\EntityRepositoryInterface
   */
  protected $entityRepository;

  /**
   * {@inheritdoc}
   */
  protected function setUp() {
    parent::setUp();
    $this->setUpNode();
    $this->installConfig(['metatag', 'system']);
    $this->createContentType(['type' => 'article']);

    $field_storage = FieldStorageConfig::create([
      'field_name' => 'field_metatags',
      'entity_type' => 'node',
      'type' => 'metatag',
    ]);
    $field_storage->save();
    FieldConfig::create([
      'field_storage' => $field_storage,
      'bundle' => 'article',
    ])->save();

    $this->metatagManager = $this->container->get('metatag.manager');
    $this->importer = $this->container->get('contentserialize.importer');
    $this->exporter = $this->container->get('contentserialize.exporter');
    $this->entityRepository = $this->container->get('entity.repository');
  }

  /**
   * Test exporting and importing a node with metatags.
   */
  public function testExportImport() {
    $metatag_value = serialize(['title' => 'Custom Page Title']);
    $article = Node::create([
      'type' => 'article',
      'title' => 'Test Content',
      'body' => ['value' => 'Test Content Body', 'format' => 'basic_html'],
      'field_metatags' => ['value' => $metatag_value],
      'uid' => 1,
    ]);
    $article->save();

    // Export it.
    $destination = new FileDestination($this->getContentDirectory());
    $serialized = $this->exporter->exportMultiple([$article], 'json', ['json_encode_options' => JSON_PRETTY_PRINT]);
    $destination->saveMultiple($serialized);

    // Delete it.
    $uuid = $article->uuid();
    $article->delete();

    // Reimport it.
    $result = $this->importer->import(new FileSource($this->getContentDirectory()));

    /** @var \Drupal\Core\Entity\ContentEntityInterface $article */
    $article = $this->entityRepository->loadEntityByUuid('node', $uuid);

    // Check it.
    $this->assertEmpty($result->getFailures(), "There aren't any import errors.");
    $this->assertEquals($uuid, $article->uuid());
    $this->assertEquals($metatag_value, $article->field_metatags->value);
    $this->assertEquals('Test Content', $article->label());
    $this->assertEquals('Test Content Body', $article->body->value);
    $this->assertEquals(1, $article->uid->target_id);
  }

  /**
   * Test exporting and importing a node with defaults set.
   *
   * Test that exporting entities doesn't export the inherited metatags from
   * global and entity defaults.
   */
  public function testExportImportGlobalMetatags() {
    // Set the global title metatag.
    $this->container->get('config.factory')
      ->getEditable('metatag.metatag_defaults.global')
      ->set('tags.title', 'Welcome to the Test website')
      ->save();
    // Set the description metatag default for all nodes, and clear the title so
    // the global can override it.
    $this->container->get('config.factory')
      ->getEditable('metatag.metatag_defaults.node')
      ->set('tags.description', 'Website set up to perform various tests on.')
      ->clear('tags.title')
      ->save();
    // Create an article without any metatags.
    $article = Node::create([
      'type' => 'article',
      'title' => 'Test Content',
      'body' => ['value' => 'Test Content Body', 'format' => 'basic_html'],
      'uid' => 1,
    ]);
    $article->save();

    // Export the article.
    $destination = new FileDestination($this->getContentDirectory());
    $serialized = $this->exporter->exportMultiple([$article], 'json', ['json_encode_options' => JSON_PRETTY_PRINT]);
    $destination->saveMultiple($serialized);

    // Delete it.
    $uuid = $article->uuid();
    $article->delete();

    // Reimport it.
    $result = $this->importer->import(new FileSource($this->getContentDirectory()));
    $this->assertEmpty($result->getFailures(), "There aren't any import errors.");

    // Load it and ensure the metatags are empty.
    /** @var \Drupal\Core\Entity\ContentEntityInterface $article */
    $article = $this->entityRepository->loadEntityByUuid('node', $uuid);
    $this->assertEmpty($this->metatagManager->tagsFromEntity($article), "Imported article metatags are empty.");
  }

}

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

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