function it_returns_null_if_metadata_is_not_found(RepositoryInterface $metadataContainerRepository, MetadataCompilerInterface $metadataCompiler, MetadataHierarchyProviderInterface $metadataHierarchyProvider, MetadataSubjectInterface $metadataSubject) { $metadataHierarchyProvider->getHierarchyByMetadataSubject($metadataSubject)->shouldBeCalled()->willReturn(['MetadataSubject-42', 'MetadataSubject']); $metadataContainerRepository->findOneBy(['id' => 'MetadataSubject-42'])->shouldBeCalled()->willReturn(null); $metadataContainerRepository->findOneBy(['id' => 'MetadataSubject'])->shouldBeCalled()->willReturn(null); $metadataCompiler->compile(Argument::cetera())->shouldNotBeCalled(); $this->findMetadataBySubject($metadataSubject)->shouldReturn(null); }
function it_returns_default_hirearchy_if_can_not_find_supporting_hierarchy_provider(MetadataHierarchyProviderInterface $hierarchyProvider, MetadataSubjectInterface $metadataSubject) { $this->beConstructedWith([$hierarchyProvider]); $hierarchyProvider->supports($metadataSubject)->shouldBeCalled()->willReturn(false); $hierarchyProvider->getHierarchyByMetadataSubject($metadataSubject)->shouldNotBeCalled(); $metadataSubject->getMetadataIdentifier()->shouldBeCalled()->willReturn('Metadata-42'); $metadataSubject->getMetadataClassIdentifier()->shouldBeCalled()->willReturn('Metadata'); $this->getHierarchyByMetadataSubject($metadataSubject)->shouldReturn(['Metadata-42', 'Metadata']); }
/** * {@inheritdoc} */ public function findMetadataBySubject(MetadataSubjectInterface $metadataSubject) { $metadata = $this->metadataProvider->findMetadataBySubject($metadataSubject); if (null !== $metadata) { return $metadata; } $hierarchy = $this->metadataHierarchyProvider->getHierarchyByMetadataSubject($metadataSubject); if ('DefaultPage' === end($hierarchy)) { return new PageMetadata(); } return null; }
/** * {@inheritdoc} */ public function findMetadataBySubject(MetadataSubjectInterface $metadataSubject) { $identifiers = $this->metadataHierarchyProvider->getHierarchyByMetadataSubject($metadataSubject); $parents = []; $baseMetadata = null; foreach ($identifiers as $identifier) { /** @var MetadataContainerInterface $metadataContainer */ // TODO: Use find($identifier) after Resource refactoring (PR #2255) $metadataContainer = $this->metadataContainerRepository->findOneBy(['id' => $identifier]); if (null === $metadataContainer) { continue; } if (null === $baseMetadata) { $baseMetadata = $metadataContainer->getMetadata(); continue; } $parents[] = $metadataContainer->getMetadata(); } if (null === $baseMetadata) { return null; } return $this->metadataCompiler->compile($baseMetadata, $parents); }