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

CompositeMetadataHierarchyProviderSpec   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Importance

Changes 2
Bugs 0 Features 1
Metric Value
wmc 6
lcom 0
cbo 3
dl 0
loc 51
rs 10
c 2
b 0
f 1

6 Methods

Rating   Name   Duplication   Size   Complexity  
A let() 0 4 1
A it_is_initializable() 0 4 1
A it_implements_Metadata_Parent_Resolver_interface() 0 4 1
A it_supports_every_metadata_subject() 0 4 1
A it_delegates_resolving_to_correct_resolver() 0 13 1
A it_returns_default_hirearchy_if_can_not_find_supporting_hierarchy_provider() 0 14 1
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