annotate core/modules/link/tests/src/Kernel/LinkItemSerializationTest.php @ 19:fa3358dc1485 tip

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