annotate core/modules/link/tests/src/Kernel/LinkItemSerializationTest.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents a9cd425dd02b
children
rev   line source
Chris@4 1 <?php
Chris@4 2
Chris@4 3 namespace Drupal\Tests\link\Kernel;
Chris@4 4
Chris@4 5 use Drupal\field\Entity\FieldStorageConfig;
Chris@4 6 use Drupal\field\Entity\FieldConfig;
Chris@4 7 use Drupal\link\LinkItemInterface;
Chris@4 8 use Drupal\entity_test\Entity\EntityTest;
Chris@4 9 use Drupal\Component\Utility\UrlHelper;
Chris@4 10 use Drupal\Tests\field\Kernel\FieldKernelTestBase;
Chris@4 11
Chris@4 12 /**
Chris@4 13 * Tests link field serialization.
Chris@4 14 *
Chris@4 15 * @group link
Chris@4 16 */
Chris@4 17 class LinkItemSerializationTest extends FieldKernelTestBase {
Chris@4 18
Chris@4 19 /**
Chris@4 20 * {@inheritdoc}
Chris@4 21 */
Chris@4 22 public static $modules = ['link', 'serialization'];
Chris@4 23
Chris@4 24 /**
Chris@4 25 * The serializer service.
Chris@4 26 *
Chris@4 27 * @var \Symfony\Component\Serializer\SerializerInterface
Chris@4 28 */
Chris@4 29 protected $serializer;
Chris@4 30
Chris@4 31 /**
Chris@4 32 * {@inheritdoc}
Chris@4 33 */
Chris@4 34 protected function setUp() {
Chris@4 35 parent::setUp();
Chris@4 36
Chris@4 37 $this->installEntitySchema('user');
Chris@4 38 $this->serializer = \Drupal::service('serializer');
Chris@4 39
Chris@4 40 // Create a generic, external, and internal link fields for validation.
Chris@4 41 FieldStorageConfig::create([
Chris@4 42 'entity_type' => 'entity_test',
Chris@4 43 'field_name' => 'field_test',
Chris@4 44 'type' => 'link',
Chris@4 45 ])->save();
Chris@4 46
Chris@4 47 FieldConfig::create([
Chris@4 48 'entity_type' => 'entity_test',
Chris@4 49 'field_name' => 'field_test',
Chris@4 50 'bundle' => 'entity_test',
Chris@4 51 'settings' => ['link_type' => LinkItemInterface::LINK_GENERIC],
Chris@4 52 ])->save();
Chris@4 53 }
Chris@4 54
Chris@4 55 /**
Chris@4 56 * Tests the serialization.
Chris@4 57 */
Chris@4 58 public function testLinkSerialization() {
Chris@4 59 // Create entity.
Chris@4 60 $entity = EntityTest::create();
Chris@4 61 $url = 'https://www.drupal.org?test_param=test_value';
Chris@4 62 $parsed_url = UrlHelper::parse($url);
Chris@4 63 $title = $this->randomMachineName();
Chris@4 64 $class = $this->randomMachineName();
Chris@4 65 $entity->field_test->uri = $parsed_url['path'];
Chris@4 66 $entity->field_test->title = $title;
Chris@4 67 $entity->field_test->first()
Chris@4 68 ->get('options')
Chris@4 69 ->set('query', $parsed_url['query']);
Chris@4 70 $entity->field_test->first()
Chris@4 71 ->get('options')
Chris@4 72 ->set('attributes', ['class' => $class]);
Chris@4 73 $entity->save();
Chris@4 74 $serialized = $this->serializer->serialize($entity, 'json');
Chris@4 75 $deserialized = $this->serializer->deserialize($serialized, EntityTest::class, 'json');
Chris@4 76 $options_expected = [
Chris@4 77 'query' => $parsed_url['query'],
Chris@4 78 'attributes' => ['class' => $class],
Chris@4 79 ];
Chris@4 80 $this->assertSame($options_expected, $deserialized->field_test->options);
Chris@4 81 }
Chris@4 82
Chris@5 83 /**
Chris@5 84 * Tests the deserialization.
Chris@5 85 */
Chris@5 86 public function testLinkDeserialization() {
Chris@5 87 // Create entity.
Chris@5 88 $entity = EntityTest::create();
Chris@5 89 $url = 'https://www.drupal.org?test_param=test_value';
Chris@5 90 $parsed_url = UrlHelper::parse($url);
Chris@5 91 $title = $this->randomMachineName();
Chris@5 92 $entity->field_test->uri = $parsed_url['path'];
Chris@5 93 $entity->field_test->title = $title;
Chris@5 94 $entity->field_test->first()
Chris@5 95 ->get('options')
Chris@5 96 ->set('query', $parsed_url['query']);
Chris@5 97 $json = json_decode($this->serializer->serialize($entity, 'json'), TRUE);
Chris@5 98 $json['field_test'][0]['options'] = 'string data';
Chris@5 99 $serialized = json_encode($json, TRUE);
Chris@5 100 $this->setExpectedException(\LogicException::class, 'The generic FieldItemNormalizer cannot denormalize string values for "options" properties of the "field_test" field (field item class: Drupal\link\Plugin\Field\FieldType\LinkItem).');
Chris@5 101 $this->serializer->deserialize($serialized, EntityTest::class, 'json');
Chris@5 102 }
Chris@5 103
Chris@4 104 }