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@18: /** Chris@18: * Tests the deserialization. Chris@18: */ Chris@18: public function testLinkDeserialization() { Chris@18: // Create entity. Chris@18: $entity = EntityTest::create(); Chris@18: $url = 'https://www.drupal.org?test_param=test_value'; Chris@18: $parsed_url = UrlHelper::parse($url); Chris@18: $title = $this->randomMachineName(); Chris@18: $entity->field_test->uri = $parsed_url['path']; Chris@18: $entity->field_test->title = $title; Chris@18: $entity->field_test->first() Chris@18: ->get('options') Chris@18: ->set('query', $parsed_url['query']); Chris@18: $json = json_decode($this->serializer->serialize($entity, 'json'), TRUE); Chris@18: $json['field_test'][0]['options'] = 'string data'; Chris@18: $serialized = json_encode($json, TRUE); Chris@18: $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@18: $this->serializer->deserialize($serialized, EntityTest::class, 'json'); Chris@18: } Chris@18: Chris@17: }