public function ContentEntityMetatagTest::testMetatagsField

Tests the metatag integration.

File

sources/content/tests/src/Kernel/ContentEntityMetatagTest.php, line 50

Class

ContentEntityMetatagTest
Content entity Source unit tests.

Namespace

Drupal\Tests\tmgmt_content\Kernel

Code

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.
  $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',
  ]));
}