X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=web%2Fcore%2Fmodules%2Fhal%2Ftests%2Fsrc%2FKernel%2FDenormalizeTest.php;fp=web%2Fcore%2Fmodules%2Fhal%2Ftests%2Fsrc%2FKernel%2FDenormalizeTest.php;h=d3662cb597a2d7c8646739dd445c22de235babb2;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/core/modules/hal/tests/src/Kernel/DenormalizeTest.php b/web/core/modules/hal/tests/src/Kernel/DenormalizeTest.php new file mode 100644 index 000000000..d3662cb59 --- /dev/null +++ b/web/core/modules/hal/tests/src/Kernel/DenormalizeTest.php @@ -0,0 +1,143 @@ + [ + 'type' => [ + 'href' => Url::fromUri('base:rest/type/entity_test/entity_test', ['absolute' => TRUE])->toString(), + ], + ], + ]; + $denormalized = $this->serializer->denormalize($data_with_valid_type, $this->entityClass, $this->format); + $this->assertEqual(get_class($denormalized), $this->entityClass, 'Request with valid type results in creation of correct bundle.'); + + // Multiple types. + $data_with_multiple_types = [ + '_links' => [ + 'type' => [ + [ + 'href' => Url::fromUri('base:rest/types/foo', ['absolute' => TRUE])->toString(), + ], + [ + 'href' => Url::fromUri('base:rest/type/entity_test/entity_test', ['absolute' => TRUE])->toString(), + ], + ], + ], + ]; + $denormalized = $this->serializer->denormalize($data_with_multiple_types, $this->entityClass, $this->format); + $this->assertEqual(get_class($denormalized), $this->entityClass, 'Request with multiple types results in creation of correct bundle.'); + + // Invalid type. + $data_with_invalid_type = [ + '_links' => [ + 'type' => [ + 'href' => Url::fromUri('base:rest/types/foo', ['absolute' => TRUE])->toString(), + ], + ], + ]; + try { + $this->serializer->denormalize($data_with_invalid_type, $this->entityClass, $this->format); + $this->fail('Exception should be thrown when type is invalid.'); + } + catch (UnexpectedValueException $e) { + $this->pass('Exception thrown when type is invalid.'); + } + + // No type. + $data_with_no_type = [ + '_links' => [ + ], + ]; + try { + $this->serializer->denormalize($data_with_no_type, $this->entityClass, $this->format); + $this->fail('Exception should be thrown when no type is provided.'); + } + catch (UnexpectedValueException $e) { + $this->pass('Exception thrown when no type is provided.'); + } + } + + /** + * Tests link relation handling with an invalid type. + */ + public function testTypeHandlingWithInvalidType() { + $data_with_invalid_type = [ + '_links' => [ + 'type' => [ + 'href' => Url::fromUri('base:rest/type/entity_test/entity_test_invalid', ['absolute' => TRUE])->toString(), + ], + ], + ]; + + $this->setExpectedException(UnexpectedValueException::class); + $this->serializer->denormalize($data_with_invalid_type, $this->entityClass, $this->format); + } + + /** + * Tests link relation handling with no types. + */ + public function testTypeHandlingWithNoTypes() { + $data_with_no_types = [ + '_links' => [ + 'type' => [], + ], + ]; + + $this->setExpectedException(UnexpectedValueException::class); + $this->serializer->denormalize($data_with_no_types, $this->entityClass, $this->format); + } + + /** + * Test that a field set to an empty array is different than an absent field. + */ + public function testMarkFieldForDeletion() { + // Add a default value for a field. + $field = FieldConfig::loadByName('entity_test', 'entity_test', 'field_test_text'); + $field->setDefaultValue([['value' => 'Llama']]); + $field->save(); + + // Denormalize data that contains no entry for the field, and check that + // the default value is present in the resulting entity. + $data = [ + '_links' => [ + 'type' => [ + 'href' => Url::fromUri('base:rest/type/entity_test/entity_test', ['absolute' => TRUE])->toString(), + ], + ], + ]; + $entity = $this->serializer->denormalize($data, $this->entityClass, $this->format); + $this->assertEqual($entity->field_test_text->count(), 1); + $this->assertEqual($entity->field_test_text->value, 'Llama'); + + // Denormalize data that contains an empty entry for the field, and check + // that the field is empty in the resulting entity. + $data = [ + '_links' => [ + 'type' => [ + 'href' => Url::fromUri('base:rest/type/entity_test/entity_test', ['absolute' => TRUE])->toString(), + ], + ], + 'field_test_text' => [], + ]; + $entity = $this->serializer->denormalize($data, get_class($entity), $this->format, [ 'target_instance' => $entity ]); + $this->assertEqual($entity->field_test_text->count(), 0); + } + +}