tmgmt-8.x-1.x-dev/sources/content/tests/src/Kernel/ContentEntityMetatagTest.php

sources/content/tests/src/Kernel/ContentEntityMetatagTest.php
<?php

namespace Drupal\Tests\tmgmt_content\Kernel;

use Drupal\entity_test\Entity\EntityTestMul;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;

/**
 * Content entity Source unit tests.
 *
 * @group tmgmt
 */
class ContentEntityMetatagTest extends ContentEntityTestBase {

  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = ['token', 'metatag', 'metatag_favicons'];

  /**
   * {@inheritdoc}
   */
  public function setUp(): void {
    parent::setUp();

    $field_storage = FieldStorageConfig::create(array(
      'field_name' => 'field_meta_tags',
      'entity_type' => $this->entityTypeId,
      'type' => 'metatag',
      'cardinality' => 1,
      'translatable' => TRUE,
    ));
    $field_storage->save();
    FieldConfig::create(array(
      'entity_type' => $this->entityTypeId,
      'field_storage' => $field_storage,
      'bundle' => $this->entityTypeId,
      'label' => 'Meta tags',
    ))->save();

    $this->installConfig(['metatag']);
  }

  /**
   * Tests the metatag integration.
   */
  public function testMetatagsField() {
    // Create an english test entity.
    $values = [
      'langcode' => 'en',
      'user_id' => 1,
      'name' => 'Test entity',
      'field_meta_tags' => [
        'value' => [
          'description' => 'The description',
          'robots' => 'noindex,nofollow',
          'referrer' => 'origin',
          'title' => 'The title',
          'mask_icon' => [
            'href' => 'https://example.org/mask.svg',
            'color' => '',
          ]
        ],
      ],
    ];
    $entity_test = EntityTestMul::create($values);
    $entity_test->save();

    $job = tmgmt_job_create('en', 'de');
    $job->translator = 'test_translator';
    $job->save();
    $job_item = tmgmt_job_item_create('content', $this->entityTypeId, $entity_test->id(), array('tjid' => $job->id()));
    $job_item->save();

    $source_plugin = $this->container->get('plugin.manager.tmgmt.source')->createInstance('content');
    $data = $source_plugin->getData($job_item);

    // Test the expected structure of the metatags field.
    $this->assertArrayNotHasKey('metatag', $data);
    $expected_field_data = [
      'basic' => [
        '#label' => 'Basic tags',
        'description' => [
          '#translate' => TRUE,
          '#text' => 'The description',
          '#label' => 'Description',
        ],
        'title' => [
          '#translate' => TRUE,
          '#text' => 'The title',
          '#label' => 'Page title',
        ],
      ],
      'advanced' => [
        '#label' => 'Advanced',
        'robots' => [
          '#translate' => FALSE,
          '#text' => 'noindex,nofollow',
          '#label' => 'Robots',
        ],
        'referrer' => [
          '#translate' => FALSE,
          '#text' => 'origin',
          '#label' => 'Referrer policy',
        ],
      ],
      'favicons' => [
        '#label' => 'Favicons & touch icons',
        'mask_icon' => [
          '#translate' => FALSE,
          '#text' => [
            'href' => 'https://example.org/mask.svg',
            'color' => '',
          ],
          '#label' => 'Mask icon (SVG)',
        ],
      ],
      '#label' => 'Meta tags',
    ];
    $this->assertEquals($expected_field_data, $data['field_meta_tags']);

    // Now request a translation and save it back.
    $job->requestTranslation();
    $items = $job->getItems();
    $item = reset($items);
    $item->acceptTranslation();
    $data = $item->getData();

    // Check that the translations were saved correctly.
    $entity_test = EntityTestMul::load($entity_test->id());
    $translation = $entity_test->getTranslation('de');
    $this->assertEquals($translation->name->value, $data['name'][0]['value']['#translation']['#text']);

    if (function_exists('metatag_data_decode')) {
      $translated_meta_tags = metatag_data_decode($translation->get('field_meta_tags')->value);
    }
    else {
      $translated_meta_tags = unserialize($translation->get('field_meta_tags')->value);
    }
    $expected_meta_tags = [
      'description' => 'de(de-ch): The description',
      'mask_icon' => [
        'href' => 'https://example.org/mask.svg',
        'color' => '',
      ],
      'referrer' => 'origin',
      'robots' => 'noindex,nofollow',
      'title' => 'de(de-ch): The title',
    ];
    $this->assertSame($expected_meta_tags, $translated_meta_tags);

    // Test an entity without metatag data.
    // Create an english test entity.
    $values = [
      'langcode' => 'en',
      'user_id' => 1,
      'name' => 'Test entity empty',
    ];
    $entity_test2 = EntityTestMul::create($values);
    $entity_test2->save();

    $job = tmgmt_job_create('en', 'de');
    $job->translator = 'test_translator';
    $job->save();
    $job_item = tmgmt_job_item_create('content', $this->entityTypeId, $entity_test2->id(), array('tjid' => $job->id()));
    $job_item->save();

    $this->assertEquals([], $job_item->getData(['field_meta_tags']));
  }

}

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

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