replication-8.x-1.x-dev/tests/src/Kernel/Normalizer/EntityReferenceItemNormalizerTest.php

tests/src/Kernel/Normalizer/EntityReferenceItemNormalizerTest.php
<?php

namespace Drupal\Tests\replication\Kernel\Normalizer;

use Drupal\Component\Render\FormattableMarkup;
use Drupal\entity_test\Entity\EntityTestMulRev;
use Drupal\user\Entity\User;

/**
 * Tests the entity reference serialization format.
 *
 * @group replication
 */
class EntityReferenceItemNormalizerTest extends NormalizerTestBase {

  protected $entityClass = 'Drupal\entity_test\Entity\EntityTest';

  /**
   * Tests normalization of entity reference fields that reference users.
   *
   * @todo Write a test of user ID mapping using normalization.
   *
   * @todo Write a test of entity references to other entity types, since
   * EntityReferenceItemNormalizer does special handling for users.
   */
  public function testUserReferenceFieldNormalization() {
    $author = User::create([
      'name' => $this->randomMachineName(),
      'mail' => $this->randomMachineName() . '@localhost',
    ]);
    $author->save();

    // Create a test entity to serialize.
    $entity = EntityTestMulRev::create([
      'name' => $this->randomMachineName(),
      'user_id' => $author->id(),
    ]);
    $entity->save();

    list($i, $hash) = explode('-', $entity->_rev->value);
    $expected = [
      '@context' => [
        '_id' => '@id',
        '@language' => 'en'
      ],
      '@type' => 'entity_test_mulrev',
      'en' => [
        '@context' => [
          '@language' => 'en',
        ],
        'langcode' => [
          ['value' => 'en'],
        ],
        'name' => [
          [
            'value' => $entity->getName(),
          ],
        ],
        'type' => [
          ['value' => 'entity_test_mulrev'],
        ],
        'created' => [
          $this->formatExpectedTimestampItemValues($entity->created->value),
        ],
        'default_langcode' => [
          ['value' => TRUE],
        ],
        'user_id' => [
          [
            'entity_type_id' => $author->getEntityTypeId(),
            'target_uuid' => $author->uuid(),
            'username' => $author->label(),
          ],
        ],
        '_rev' => [
          ['value' => $entity->_rev->value],
        ],
        'non_rev_field' => [],
        'field_test_text' => [],
      ],
      '_id' => $entity->uuid(),
      '_rev' => $entity->_rev->value,
      '_revisions' => [
        'start' => 1,
        'ids' => [$hash],
      ],
    ];

    // Get the minor version only from the \Drupal::VERSION string.
    $minor_version = substr(\Drupal::VERSION, 0, 3);

    if (version_compare($minor_version, '8.4', '>=')) {
      $expected['en']['revision_translation_affected'] = [['value' => TRUE]];
    }

    if (version_compare($minor_version, '8.5', '>=')) {
      $expected['en']['non_mul_field'] = [];
      $expected['en']['revision_default'] = [['value' => TRUE]];
    }

    // Test normalize.
    $normalized = $this->serializer->normalize($entity);
    foreach (array_keys($expected) as $key) {
      $this->assertEquals($expected[$key], $normalized[$key], "Field $key is normalized correctly.");
    }
    $this->assertEquals(array_diff_key($normalized, $expected), [], 'No unexpected data is added to the normalized array.');

    // Test denormalize.
    $denormalized = $this->serializer->denormalize($normalized, $this->entityClass, 'json');
    $this->assertTrue($denormalized instanceof $this->entityClass, new FormattableMarkup('Denormalized entity is an instance of @class', ['@class' => $this->entityClass]));
    $this->assertSame($denormalized->getEntityTypeId(), $entity->getEntityTypeId(), 'Expected entity type found.');
    $this->assertSame($denormalized->bundle(), $entity->bundle(), 'Expected entity bundle found.');
    $this->assertSame($denormalized->uuid(), $entity->uuid(), 'Expected entity UUID found.');
  }

}

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

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