Completed
Push — master ( 8fac40...c170a7 )
by Kamil
42:58
created

AddUserFormSubscriberSpec   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 120
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 6

Importance

Changes 0
Metric Value
wmc 10
lcom 0
cbo 6
dl 0
loc 120
rs 10
c 0
b 0
f 0

10 Methods

Rating   Name   Duplication   Size   Complexity  
A let() 0 4 1
A it_is_initializable() 0 4 1
A it_is_event_subscriber_instance() 0 4 1
A it_adds_user_form_type_and_create_user_check() 0 10 1
A it_removes_user_form_type_by_default() 0 16 1
A it_does_not_remove_user_form_type_if_users_data_is_submitted_and_user_data_is_created() 0 15 1
A it_remove_user_form_type_if_users_data_is_not_submitted_and_user_is_not_created() 0 15 1
A it_does_not_remove_user_form_type_if_users_data_is_submitted_and_user_is_not_created() 0 14 1
A it_does_not_remove_user_form_type_if_users_data_is_not_submitted_and_user_is_created() 0 15 1
A it_throws_invalid_argument_exception_when_forms_normalized_data_does_not_implement_user_aware_interface() 0 11 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\Bundle\AdminApiBundle\Form\EventSubscriber;
13
14
use PhpSpec\ObjectBehavior;
15
use Prophecy\Argument;
16
use Sylius\Bundle\AdminApiBundle\Form\EventSubscriber\AddUserFormSubscriber;
17
use Sylius\Component\User\Model\UserInterface;
18
use Sylius\Component\User\Model\UserAwareInterface;
19
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
20
use Symfony\Component\Form\Form;
21
use Symfony\Component\Form\FormEvent;
22
23
/**
24
 * @author Łukasz Chruściel <[email protected]>
25
 */
26
final class AddUserFormSubscriberSpec extends ObjectBehavior
27
{
28
    function let()
29
    {
30
        $this->beConstructedWith('\Fully\Qualified\ClassName');
31
    }
32
33
    function it_is_initializable()
34
    {
35
        $this->shouldHaveType(AddUserFormSubscriber::class);
36
    }
37
38
    function it_is_event_subscriber_instance()
39
    {
40
        $this->shouldImplement(EventSubscriberInterface::class);
41
    }
42
43
    function it_adds_user_form_type_and_create_user_check(
44
        FormEvent $event,
45
        Form $form
46
    ) {
47
        $event->getForm()->willReturn($form);
48
49
        $form->add('user', '\Fully\Qualified\ClassName', Argument::type('array'))->shouldBeCalled();
50
51
        $this->preSetData($event);
52
    }
53
54
    function it_removes_user_form_type_by_default(
55
        FormEvent $event,
56
        Form $form,
57
        UserAwareInterface $customer
58
    ) {
59
        $event->getData()->willReturn([], ['user' => ['plainPassword' => '']]);
60
        $event->getForm()->willReturn($form);
61
        $form->getNormData()->willReturn($customer);
62
        $customer->getUser()->willReturn(null);
63
64
        $event->setData([])->shouldBeCalledTimes(1);
65
        $form->remove('user')->shouldBeCalledTimes(2);
66
67
        $this->preSubmit($event);
68
        $this->preSubmit($event);
69
    }
70
71
    function it_does_not_remove_user_form_type_if_users_data_is_submitted_and_user_data_is_created(
72
        FormEvent $event,
73
        Form $form,
74
        UserAwareInterface $customer,
75
        UserInterface $user
76
    ) {
77
        $event->getData()->willReturn(['user' => ['plainPassword' => 'test']]);
78
        $event->getForm()->willReturn($form);
79
        $form->getNormData()->willReturn($customer);
80
        $customer->getUser()->willReturn($user);
81
82
        $form->remove('user')->shouldNotBeCalled();
83
84
        $this->preSubmit($event);
85
    }
86
87
    function it_remove_user_form_type_if_users_data_is_not_submitted_and_user_is_not_created(
88
        FormEvent $event,
89
        Form $form,
90
        UserAwareInterface $customer
91
    ) {
92
        $event->getData()->willReturn(['user' => ['plainPassword' => '']]);
93
        $event->getForm()->willReturn($form);
94
        $form->getNormData()->willReturn($customer);
95
        $customer->getUser()->willReturn(null);
96
97
        $event->setData([])->shouldBeCalled();
98
        $form->remove('user')->shouldBeCalled();
99
100
        $this->preSubmit($event);
101
    }
102
103
    function it_does_not_remove_user_form_type_if_users_data_is_submitted_and_user_is_not_created(
104
        FormEvent $event,
105
        Form $form,
106
        UserAwareInterface $customer
107
    ) {
108
        $event->getData()->willReturn(['user' => ['plainPassword' => 'test']]);
109
        $event->getForm()->willReturn($form);
110
        $form->getNormData()->willReturn($customer);
111
        $customer->getUser()->willReturn(null);
112
113
        $form->remove('user')->shouldNotBeCalled();
114
115
        $this->preSubmit($event);
116
    }
117
118
    function it_does_not_remove_user_form_type_if_users_data_is_not_submitted_and_user_is_created(
119
        FormEvent $event,
120
        Form $form,
121
        UserAwareInterface $customer,
122
        UserInterface $user
123
    ) {
124
        $event->getData()->willReturn(['user' => ['plainPassword' => '']]);
125
        $event->getForm()->willReturn($form);
126
        $form->getNormData()->willReturn($customer);
127
        $customer->getUser()->willReturn($user);
128
129
        $form->remove('user')->shouldNotBeCalled();
130
131
        $this->preSubmit($event);
132
    }
133
134
    function it_throws_invalid_argument_exception_when_forms_normalized_data_does_not_implement_user_aware_interface(
135
        FormEvent $event,
136
        Form $form,
137
        UserInterface $user
138
    ) {
139
        $event->getData()->willReturn(['user' => ['plainPassword' => '']]);
140
        $event->getForm()->willReturn($form);
141
        $form->getNormData()->willReturn($user);
142
143
        $this->shouldThrow(\InvalidArgumentException::class)->during('preSubmit', [$event]);
144
    }
145
}
146