Chris@0: 'entity_test_mulrev', Chris@0: 'field_name' => 'field_test_text_default', Chris@0: 'type' => 'text', Chris@0: 'cardinality' => 1, Chris@0: 'translatable' => FALSE, Chris@0: ])->save(); Chris@0: FieldConfig::create([ Chris@0: 'entity_type' => 'entity_test_mulrev', Chris@0: 'field_name' => 'field_test_text_default', Chris@0: 'bundle' => 'entity_test_mulrev', Chris@0: 'label' => 'Test text-field with default', Chris@0: 'default_value' => [ Chris@0: [ Chris@0: 'value' => 'This is the default', Chris@0: 'format' => 'full_html', Chris@0: ], Chris@0: ], Chris@0: 'widget' => [ Chris@0: 'type' => 'text_textfield', Chris@0: 'weight' => 0, Chris@0: ], Chris@0: ])->save(); Chris@0: Chris@0: // Create a test entity to serialize. Chris@0: $this->values = [ Chris@0: 'name' => $this->randomMachineName(), Chris@0: 'field_test_text' => [ Chris@0: 'value' => $this->randomMachineName(), Chris@0: 'format' => 'full_html', Chris@0: ], Chris@0: ]; Chris@0: $this->entity = EntityTestMulRev::create($this->values); Chris@0: $this->entity->save(); Chris@0: Chris@0: $this->serializer = $this->container->get('serializer'); Chris@0: Chris@0: $this->installConfig(['field']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests normalizing and denormalizing an entity with field item normalizer. Chris@0: */ Chris@0: public function testFieldNormalizeDenormalize() { Chris@0: $normalized = $this->serializer->normalize($this->entity, 'json'); Chris@0: Chris@0: $expected_field_value = $this->entity->field_test_text[0]->getValue()['value'] . '::silly_suffix'; Chris@0: $this->assertEquals($expected_field_value, $normalized['field_test_text'][0]['value'], 'Text field item normalized'); Chris@0: $denormalized = $this->serializer->denormalize($normalized, $this->entityClass, 'json'); Chris@0: Chris@0: $this->assertEquals($denormalized->field_test_text[0]->getValue(), $this->entity->field_test_text[0]->getValue(), 'Text field item denormalized.'); Chris@0: $this->assertEquals($denormalized->field_test_text_default[0]->getValue(), $this->entity->field_test_text_default[0]->getValue(), 'Text field item with default denormalized.'); Chris@0: Chris@0: // Unset the values for text field that has a default value. Chris@0: unset($normalized['field_test_text_default']); Chris@0: $denormalized_without_all_fields = $this->serializer->denormalize($normalized, $this->entityClass, 'json'); Chris@0: // Check that denormalized entity is still the same even if not all fields Chris@0: // are not provided. Chris@0: $this->assertEquals($denormalized_without_all_fields->field_test_text[0]->getValue(), $this->entity->field_test_text[0]->getValue(), 'Text field item denormalized.'); Chris@0: // Even though field_test_text_default value was unset before Chris@0: // denormalization it should still have the default values for the field. Chris@0: $this->assertEquals($denormalized_without_all_fields->field_test_text_default[0]->getValue(), $this->entity->field_test_text_default[0]->getValue(), 'Text field item with default denormalized.'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests denormalizing using a scalar field value. Chris@0: */ Chris@0: public function testFieldDenormalizeWithScalarValue() { Chris@0: $this->setExpectedException(UnexpectedValueException::class, 'Field values for "uuid" must use an array structure'); Chris@0: Chris@0: $normalized = $this->serializer->normalize($this->entity, 'json'); Chris@0: Chris@0: // Change the UUID value to use the UUID directly. No array structure. Chris@0: $normalized['uuid'] = $normalized['uuid'][0]['value']; Chris@0: Chris@0: $this->serializer->denormalize($normalized, $this->entityClass, 'json'); Chris@0: } Chris@0: Chris@0: }