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."); } }