installEntitySchema('user'); $this->serializer = \Drupal::service('serializer'); // Create a generic, external, and internal link fields for validation. FieldStorageConfig::create([ 'entity_type' => 'entity_test', 'field_name' => 'field_test', 'type' => 'link', ])->save(); FieldConfig::create([ 'entity_type' => 'entity_test', 'field_name' => 'field_test', 'bundle' => 'entity_test', 'settings' => ['link_type' => LinkItemInterface::LINK_GENERIC], ])->save(); } /** * Tests the serialization. */ public function testLinkSerialization() { // Create entity. $entity = EntityTest::create(); $url = 'https://www.drupal.org?test_param=test_value'; $parsed_url = UrlHelper::parse($url); $title = $this->randomMachineName(); $class = $this->randomMachineName(); $entity->field_test->uri = $parsed_url['path']; $entity->field_test->title = $title; $entity->field_test->first() ->get('options') ->set('query', $parsed_url['query']); $entity->field_test->first() ->get('options') ->set('attributes', ['class' => $class]); $entity->save(); $serialized = $this->serializer->serialize($entity, 'json'); $deserialized = $this->serializer->deserialize($serialized, EntityTest::class, 'json'); $options_expected = [ 'query' => $parsed_url['query'], 'attributes' => ['class' => $class], ]; $this->assertSame($options_expected, $deserialized->field_test->options); } }