Completed
Push — master ( 59db0f...abafe8 )
by Kamil
18:55
created

TaxonRuleCheckerSpec   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 88
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 6

Importance

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

6 Methods

Rating   Name   Duplication   Size   Complexity  
A it_is_initializable() 0 4 1
A it_should_be_sylius_rule_checker() 0 4 1
A it_should_recognize_subject_as_eligible_if_product_taxon_is_matched() 0 18 1
A it_should_recognize_subject_as_not_eligible_if_product_taxon_is_not_matched() 0 18 1
A it_should_recognize_subject_as_eligible_if_product_taxon_is_not_matched_and_exclude_is_set() 0 18 1
A it_should_recognize_subject_as_not_eligible_if_product_taxon_is_matched_and_exclude_is_set() 0 18 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\Core\Promotion\Checker;
13
14
use Doctrine\Common\Collections\ArrayCollection;
15
use PhpSpec\ObjectBehavior;
16
use Sylius\Component\Core\Model\OrderInterface;
17
use Sylius\Component\Core\Model\OrderItemInterface;
18
use Sylius\Component\Core\Model\Product;
19
use Sylius\Component\Core\Model\Taxon;
20
use Sylius\Component\Promotion\Checker\RuleCheckerInterface;
21
22
/**
23
 * @author Joseph Bielawski <[email protected]>
24
 */
25
class TaxonRuleCheckerSpec extends ObjectBehavior
26
{
27
    function it_is_initializable()
28
    {
29
        $this->shouldHaveType('Sylius\Component\Core\Promotion\Checker\TaxonRuleChecker');
30
    }
31
32
    function it_should_be_sylius_rule_checker()
33
    {
34
        $this->shouldImplement(RuleCheckerInterface::class);
35
    }
36
37
    function it_should_recognize_subject_as_eligible_if_product_taxon_is_matched(
38
        OrderInterface $subject,
39
        OrderItemInterface $item,
40
        Taxon $taxon,
41
        Product $product,
42
        ArrayCollection $collection
43
    ) {
44
        $configuration = ['taxons' => $collection, 'exclude' => false];
45
46
        $collection->contains(1)->willReturn(true);
47
48
        $taxon->getId()->willReturn(1);
49
        $product->getTaxons()->willReturn([$taxon]);
50
        $item->getProduct()->willReturn($product);
51
        $subject->getItems()->willReturn([$item]);
52
53
        $this->isEligible($subject, $configuration)->shouldReturn(true);
54
    }
55
56
    function it_should_recognize_subject_as_not_eligible_if_product_taxon_is_not_matched(
57
        OrderInterface $subject,
58
        OrderItemInterface $item,
59
        Taxon $taxon,
60
        Product $product,
61
        ArrayCollection $collection
62
    ) {
63
        $configuration = ['taxons' => $collection, 'exclude' => false];
64
65
        $collection->contains(1)->willReturn(false);
66
67
        $taxon->getId()->willReturn(1);
68
        $product->getTaxons()->willReturn([$taxon]);
69
        $item->getProduct()->willReturn($product);
70
        $subject->getItems()->willReturn([$item]);
71
72
        $this->isEligible($subject, $configuration)->shouldReturn(false);
73
    }
74
75
    function it_should_recognize_subject_as_eligible_if_product_taxon_is_not_matched_and_exclude_is_set(
76
        OrderInterface $subject,
77
        OrderItemInterface $item,
78
        Taxon $taxon,
79
        Product $product,
80
        ArrayCollection $collection
81
    ) {
82
        $configuration = ['taxons' => $collection, 'exclude' => true];
83
84
        $collection->contains(1)->willReturn(false);
85
86
        $taxon->getId()->willReturn(1);
87
        $product->getTaxons()->willReturn([$taxon]);
88
        $item->getProduct()->willReturn($product);
89
        $subject->getItems()->willReturn([$item]);
90
91
        $this->isEligible($subject, $configuration)->shouldReturn(true);
92
    }
93
94
    function it_should_recognize_subject_as_not_eligible_if_product_taxon_is_matched_and_exclude_is_set(
95
        OrderInterface $subject,
96
        OrderItemInterface $item,
97
        Taxon $taxon,
98
        Product $product,
99
        ArrayCollection $collection
100
    ) {
101
        $configuration = ['taxons' => $collection, 'exclude' => true];
102
103
        $collection->contains(2)->willReturn(true);
104
105
        $taxon->getId()->willReturn(2);
106
        $product->getTaxons()->willReturn([$taxon]);
107
        $item->getProduct()->willReturn($product);
108
        $subject->getItems()->willReturn([$item]);
109
110
        $this->isEligible($subject, $configuration)->shouldReturn(false);
111
    }
112
}
113