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