Completed
Push — 1.0 ( 2fbcac...32464f )
by Kamil
116:20 queued 93:29
created

let()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 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
declare(strict_types=1);
13
14
namespace spec\Sylius\Bundle\AttributeBundle\Validator\Constraints;
15
16
use PhpSpec\ObjectBehavior;
17
use Prophecy\Argument;
18
use Sylius\Bundle\AttributeBundle\Validator\Constraints\ValidSelectAttributeConfiguration;
19
use Sylius\Bundle\AttributeBundle\Validator\Constraints\ValidTextAttributeConfiguration;
20
use Sylius\Component\Attribute\AttributeType\SelectAttributeType;
21
use Sylius\Component\Attribute\AttributeType\TextAttributeType;
22
use Sylius\Component\Attribute\Model\AttributeInterface;
23
use Symfony\Component\Validator\ConstraintValidator;
24
use Symfony\Component\Validator\Context\ExecutionContextInterface;
25
26
final class ValidSelectAttributeConfigurationValidatorSpec extends ObjectBehavior
27
{
28
    function let(ExecutionContextInterface $context): void
29
    {
30
        $this->initialize($context);
31
    }
32
33
    function it_is_a_constraint_validator(): void
34
    {
35
        $this->shouldHaveType(ConstraintValidator::class);
36
    }
37
38
    function it_adds_a_violation_if_max_entries_value_is_lower_than_min_entries_value(
39
        ExecutionContextInterface $context,
40
        AttributeInterface $attribute
41
    ): void {
42
        $constraint = new ValidSelectAttributeConfiguration;
43
44
        $attribute->getType()->willReturn(SelectAttributeType::TYPE);
45
        $attribute->getConfiguration()->willReturn(['multiple' => true, 'min' => 6, 'max' => 4]);
46
47
        $context->addViolation(Argument::any())->shouldBeCalled();
48
49
        $this->validate($attribute, $constraint);
50
    }
51
52
    function it_adds_a_violation_if_min_entries_value_is_greater_than_the_number_of_added_choices(
53
        ExecutionContextInterface $context,
54
        AttributeInterface $attribute
55
    ): void {
56
        $constraint = new ValidSelectAttributeConfiguration;
57
58
        $attribute->getType()->willReturn(SelectAttributeType::TYPE);
59
        $attribute->getConfiguration()->willReturn([
60
            'multiple' => true,
61
            'min' => 4,
62
            'max' => 6,
63
            'choices' => [
64
                'ec134e10-6a80-4eaf-8346-e9bb0f7406a4' => 'Banana',
65
                '63148775-be39-47eb-8afd-a4818981e3c0' => 'Watermelon',
66
            ],
67
        ]);
68
69
        $context->addViolation(Argument::any())->shouldBeCalled();
70
71
        $this->validate($attribute, $constraint);
72
    }
73
74
    function it_adds_a_violation_if_multiple_is_not_true_when_min_or_max_entries_values_are_specified(
75
        ExecutionContextInterface $context,
76
        AttributeInterface $attribute
77
    ): void {
78
        $constraint = new ValidSelectAttributeConfiguration;
79
80
        $attribute->getType()->willReturn(SelectAttributeType::TYPE);
81
        $attribute->getConfiguration()->willReturn(['multiple' => false, 'min' => 4, 'max' => 6]);
82
83
        $context->addViolation(Argument::any())->shouldBeCalled();
84
85
        $this->validate($attribute, $constraint);
86
    }
87
88
    function it_does_nothing_if_an_attribute_is_not_a_select_type(
89
        ExecutionContextInterface $context,
90
        AttributeInterface $attribute
91
    ): void {
92
        $constraint = new ValidSelectAttributeConfiguration;
93
94
        $attribute->getType()->willReturn(TextAttributeType::TYPE);
95
96
        $context->addViolation(Argument::any())->shouldNotBeCalled();
97
98
        $this->validate($attribute, $constraint);
99
    }
100
101
    function it_throws_an_exception_if_validated_value_is_not_an_attribute(): void
102
    {
103
        $constraint = new ValidSelectAttributeConfiguration;
104
105
        $this
106
            ->shouldThrow(\InvalidArgumentException::class)
107
            ->during('validate', ['badObject', $constraint])
108
        ;
109
    }
110
111
    function it_throws_an_exception_if_constraint_is_not_a_valid_select_attribute_configuration_constraint(
112
        AttributeInterface $attribute
113
    ): void {
114
        $constraint = new ValidTextAttributeConfiguration;
115
116
        $this
117
            ->shouldThrow(\InvalidArgumentException::class)
118
            ->during('validate', [$attribute, $constraint])
119
        ;
120
    }
121
}
122