Completed
Push — master ( 90ccc1...22512f )
by Kamil
35:43
created

it_implements_Metadata_Parent_Resolver_interface()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
dl 0
loc 4
rs 10
c 1
b 0
f 1
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
/*
4
 * This file is part of the Sylius package.
5
 *
6
 * (c) Paweł Jędrzejewski
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace spec\Sylius\Component\Metadata\HierarchyProvider;
13
14
use PhpSpec\ObjectBehavior;
15
use Sylius\Component\Metadata\Model\MetadataSubjectInterface;
16
use Sylius\Component\Metadata\HierarchyProvider\MetadataHierarchyProviderInterface;
17
18
/**
19
 * @mixin \Sylius\Component\Metadata\HierarchyProvider\CompositeMetadataHierarchyProvider
20
 *
21
 * @author Kamil Kokot <[email protected]>
22
 */
23
class CompositeMetadataHierarchyProviderSpec extends ObjectBehavior
24
{
25
    function let(MetadataHierarchyProviderInterface $firstHierarchyProvider, MetadataHierarchyProviderInterface $secondHierarchyProvider)
26
    {
27
        $this->beConstructedWith([$firstHierarchyProvider, $secondHierarchyProvider]);
28
    }
29
30
    function it_is_initializable()
31
    {
32
        $this->shouldHaveType('Sylius\Component\Metadata\HierarchyProvider\CompositeMetadataHierarchyProvider');
33
    }
34
35
    function it_implements_Metadata_Parent_Resolver_interface()
36
    {
37
        $this->shouldImplement('Sylius\Component\Metadata\HierarchyProvider\MetadataHierarchyProviderInterface');
38
    }
39
40
    function it_supports_every_metadata_subject(MetadataSubjectInterface $metadataSubject)
41
    {
42
        $this->supports($metadataSubject)->shouldReturn(true);
43
    }
44
45
    function it_delegates_resolving_to_correct_resolver(
46
        MetadataHierarchyProviderInterface $firstHierarchyProvider,
47
        MetadataHierarchyProviderInterface $secondHierarchyProvider,
48
        MetadataSubjectInterface $metadataSubject
49
    ) {
50
        $firstHierarchyProvider->supports($metadataSubject)->shouldBeCalled()->willReturn(false);
51
        $secondHierarchyProvider->supports($metadataSubject)->shouldBeCalled()->willReturn(true);
52
53
        $firstHierarchyProvider->getHierarchyByMetadataSubject($metadataSubject)->shouldNotBeCalled();
54
        $secondHierarchyProvider->getHierarchyByMetadataSubject($metadataSubject)->shouldBeCalled()->willReturn(['Child-42', 'Child', 'Parent-42']);
55
56
        $this->getHierarchyByMetadataSubject($metadataSubject)->shouldReturn(['Child-42', 'Child', 'Parent-42']);
57
    }
58
59
    function it_returns_default_hirearchy_if_can_not_find_supporting_hierarchy_provider(
60
        MetadataHierarchyProviderInterface $hierarchyProvider,
61
        MetadataSubjectInterface $metadataSubject
62
    ) {
63
        $this->beConstructedWith([$hierarchyProvider]);
64
65
        $hierarchyProvider->supports($metadataSubject)->shouldBeCalled()->willReturn(false);
66
        $hierarchyProvider->getHierarchyByMetadataSubject($metadataSubject)->shouldNotBeCalled();
67
68
        $metadataSubject->getMetadataIdentifier()->shouldBeCalled()->willReturn('Metadata-42');
69
        $metadataSubject->getMetadataClassIdentifier()->shouldBeCalled()->willReturn('Metadata');
70
71
        $this->getHierarchyByMetadataSubject($metadataSubject)->shouldReturn(['Metadata-42', 'Metadata']);
72
    }
73
}
74