3 namespace Drupal\Tests\link\Kernel;
5 use Drupal\field\Entity\FieldStorageConfig;
6 use Drupal\field\Entity\FieldConfig;
7 use Drupal\link\LinkItemInterface;
8 use Drupal\entity_test\Entity\EntityTest;
9 use Drupal\Component\Utility\UrlHelper;
10 use Drupal\Tests\field\Kernel\FieldKernelTestBase;
13 * Tests link field serialization.
17 class LinkItemSerializationTest extends FieldKernelTestBase {
22 public static $modules = ['link', 'serialization'];
25 * The serializer service.
27 * @var \Symfony\Component\Serializer\SerializerInterface
29 protected $serializer;
34 protected function setUp() {
37 $this->installEntitySchema('user');
38 $this->serializer = \Drupal::service('serializer');
40 // Create a generic, external, and internal link fields for validation.
41 FieldStorageConfig::create([
42 'entity_type' => 'entity_test',
43 'field_name' => 'field_test',
48 'entity_type' => 'entity_test',
49 'field_name' => 'field_test',
50 'bundle' => 'entity_test',
51 'settings' => ['link_type' => LinkItemInterface::LINK_GENERIC],
56 * Tests the serialization.
58 public function testLinkSerialization() {
60 $entity = EntityTest::create();
61 $url = 'https://www.drupal.org?test_param=test_value';
62 $parsed_url = UrlHelper::parse($url);
63 $title = $this->randomMachineName();
64 $class = $this->randomMachineName();
65 $entity->field_test->uri = $parsed_url['path'];
66 $entity->field_test->title = $title;
67 $entity->field_test->first()
69 ->set('query', $parsed_url['query']);
70 $entity->field_test->first()
72 ->set('attributes', ['class' => $class]);
74 $serialized = $this->serializer->serialize($entity, 'json');
75 $deserialized = $this->serializer->deserialize($serialized, EntityTest::class, 'json');
77 'query' => $parsed_url['query'],
78 'attributes' => ['class' => $class],
80 $this->assertSame($options_expected, $deserialized->field_test->options);