public function create(string $resourceClass) : ResourceMetadata
{
$parentResourceMetadata = null;
if ($this->decorated) {
try {
$parentResourceMetadata = $this->decorated->create($resourceClass);
} catch (ResourceClassNotFoundException $resourceNotFoundException) {
// Ignore not found exception from decorated factories
}
}
try {
$reflectionClass = new \ReflectionClass($resourceClass);
} catch (\ReflectionException $reflectionException) {
return $this->handleNotFound($parentResourceMetadata, $resourceClass);
}
$resourceAnnotation = $this->reader->getClassAnnotation($reflectionClass, ApiResource::class);
if (null === $resourceAnnotation) {
return $this->handleNotFound($parentResourceMetadata, $resourceClass);
}
return $this->createMetadata($resourceAnnotation, $parentResourceMetadata);
}
/** * @dataProvider getCreateDependencies */ public function testCreate(ProphecyInterface $reader, ProphecyInterface $decorated = null, $expectedShortName, $expectedDescription) { $factory = new AnnotationResourceMetadataFactory($reader->reveal(), $decorated ? $decorated->reveal() : null); $metadata = $factory->create(Dummy::class); $this->assertEquals($expectedShortName, $metadata->getShortName()); $this->assertEquals($expectedDescription, $metadata->getDescription()); $this->assertEquals('http://example.com', $metadata->getIri()); $this->assertEquals(['foo' => ['bar' => true]], $metadata->getItemOperations()); $this->assertEquals(['baz' => ['tab' => false]], $metadata->getCollectionOperations()); $this->assertEquals(['a' => 1], $metadata->getAttributes()); }