Completed
Push — master ( 55daec...2d65d3 )
by Kamil
18:26
created

it_is_initializable()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
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\Core\Provider;
13
14
use PhpSpec\ObjectBehavior;
15
use Sylius\Component\Channel\Model\ChannelInterface;
16
use Sylius\Component\Core\Model\OrderInterface;
17
use Sylius\Component\Core\Model\PromotionInterface;
18
use Sylius\Component\Core\Repository\PromotionRepositoryInterface;
19
use Sylius\Component\Promotion\Model\PromotionSubjectInterface;
20
use Sylius\Component\Promotion\Provider\PreQualifiedPromotionsProviderInterface;
21
use Sylius\Component\Resource\Exception\UnexpectedTypeException;
22
23
/**
24
 * @author Mateusz Zalewski <[email protected]>
25
 */
26
class ActivePromotionsByChannelProviderSpec extends ObjectBehavior
27
{
28
    function let(PromotionRepositoryInterface $promotionRepository)
29
    {
30
        $this->beConstructedWith($promotionRepository);
31
    }
32
33
    function it_is_initializable()
34
    {
35
        $this->shouldHaveType('Sylius\Component\Core\Provider\ActivePromotionsByChannelProvider');
36
    }
37
38
    function it_implements_active_promotions_provider_interface()
39
    {
40
        $this->shouldImplement(PreQualifiedPromotionsProviderInterface::class);
41
    }
42
43
    function it_provides_active_promotions_for_given_subject_channel(
44
        $promotionRepository,
45
        ChannelInterface $channel,
46
        PromotionInterface $promotion1,
47
        PromotionInterface $promotion2,
48
        OrderInterface $subject
49
    ) {
50
        $subject->getChannel()->willReturn($channel);
51
        $promotionRepository->findActiveByChannel($channel)->willReturn([$promotion1, $promotion2]);
52
53
        $this->getPromotions($subject)->shouldReturn([$promotion1, $promotion2]);
54
    }
55
56
    function it_throws_exception_if_passed_subject_is_not_order(PromotionSubjectInterface $subject)
57
    {
58
        $this->shouldThrow(UnexpectedTypeException::class)->during('getPromotions', [$subject]);
59
    }
60
}
61