Completed
Push — 1.4-password-hashing-2 ( b79be0 )
by Kamil
16:31
created

UpdateUserEncoderListenerSpec   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 186
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 2
dl 0
loc 186
rs 10
c 0
b 0
f 0

9 Methods

Rating   Name   Duplication   Size   Complexity  
A let() 0 4 1
A it_does_nothing_if_user_does_not_implement_user_interface() 0 16 1
A it_does_nothing_if_user_does_not_implement_specified_class_or_interface() 0 16 1
A it_does_nothing_if_user_uses_the_recommended_encoder() 0 20 1
A it_does_nothing_if_plain_password_could_not_be_resolved() 0 23 1
A it_does_nothing_if_resolved_plain_password_is_null() 0 24 1
A it_does_nothing_if_resolved_plain_password_is_empty() 0 24 1
A it_updates_the_encoder_and_plain_password_if_using_old_encoder_and_plain_password_could_be_resolved() 0 24 1
A it_updates_the_encoder_and_plain_password_if_using_default_null_encoder_and_plain_password_could_be_resolved() 0 24 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace spec\Sylius\Bundle\UserBundle\EventListener;
6
7
use Doctrine\Common\Persistence\ObjectManager;
8
use PhpSpec\ObjectBehavior;
9
use Sylius\Bundle\UserBundle\spec\Fixture\FixtureUser;
10
use Sylius\Bundle\UserBundle\spec\Fixture\FixtureUserInterface;
11
use Sylius\Component\User\Model\User;
12
use Symfony\Component\HttpFoundation\Request;
13
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
14
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
15
16
final class UpdateUserEncoderListenerSpec extends ObjectBehavior
17
{
18
    function let(ObjectManager $objectManager): void
19
    {
20
        $this->beConstructedWith($objectManager, 'newalgo', FixtureUser::class, FixtureUserInterface::class, '_password');
21
    }
22
23
    function it_does_nothing_if_user_does_not_implement_user_interface(
24
        ObjectManager $objectManager,
25
        InteractiveLoginEvent $event,
26
        TokenInterface $token
27
    ): void {
28
        $event->getAuthenticationToken()->willReturn($token);
29
30
        $user = new \stdClass();
31
32
        $token->getUser()->willReturn($user);
33
34
        $objectManager->persist($user)->shouldNotBeCalled();
35
        $objectManager->flush()->shouldNotBeCalled();
36
37
        $this->onSecurityInteractiveLogin($event);
38
    }
39
40
    function it_does_nothing_if_user_does_not_implement_specified_class_or_interface(
41
        ObjectManager $objectManager,
42
        InteractiveLoginEvent $event,
43
        TokenInterface $token
44
    ): void {
45
        $event->getAuthenticationToken()->willReturn($token);
46
47
        $user = new User();
48
49
        $token->getUser()->willReturn($user);
50
51
        $objectManager->persist($user)->shouldNotBeCalled();
52
        $objectManager->flush()->shouldNotBeCalled();
53
54
        $this->onSecurityInteractiveLogin($event);
55
    }
56
57
    function it_does_nothing_if_user_uses_the_recommended_encoder(
58
        ObjectManager $objectManager,
59
        InteractiveLoginEvent $event,
60
        TokenInterface $token
61
    ): void {
62
        $event->getAuthenticationToken()->willReturn($token);
63
64
        $user = new FixtureUser();
65
        $user->setEncoderName('newalgo');
66
67
        $token->getUser()->willReturn($user);
68
69
        $objectManager->persist($user)->shouldNotBeCalled();
70
        $objectManager->flush()->shouldNotBeCalled();
71
72
        $this->onSecurityInteractiveLogin($event);
73
74
        assert($user->getEncoderName() === 'newalgo');
75
        assert($user->getPlainPassword() === null);
76
    }
77
78
    function it_does_nothing_if_plain_password_could_not_be_resolved(
79
        ObjectManager $objectManager,
80
        InteractiveLoginEvent $event,
81
        TokenInterface $token
82
    ): void {
83
        $request = new Request();
84
85
        $event->getAuthenticationToken()->willReturn($token);
86
        $event->getRequest()->willReturn($request);
87
88
        $user = new FixtureUser();
89
        $user->setEncoderName('oldalgo');
90
91
        $token->getUser()->willReturn($user);
92
93
        $objectManager->persist($user)->shouldNotBeCalled();
94
        $objectManager->flush()->shouldNotBeCalled();
95
96
        $this->onSecurityInteractiveLogin($event);
97
98
        assert($user->getEncoderName() === 'oldalgo');
99
        assert($user->getPlainPassword() === null);
100
    }
101
102
    function it_does_nothing_if_resolved_plain_password_is_null(
103
        ObjectManager $objectManager,
104
        InteractiveLoginEvent $event,
105
        TokenInterface $token
106
    ): void {
107
        $request = new Request();
108
        $request->request->set('_password', null);
109
110
        $event->getAuthenticationToken()->willReturn($token);
111
        $event->getRequest()->willReturn($request);
112
113
        $user = new FixtureUser();
114
        $user->setEncoderName('oldalgo');
115
116
        $token->getUser()->willReturn($user);
117
118
        $objectManager->persist($user)->shouldNotBeCalled();
119
        $objectManager->flush()->shouldNotBeCalled();
120
121
        $this->onSecurityInteractiveLogin($event);
122
123
        assert($user->getEncoderName() === 'oldalgo');
124
        assert($user->getPlainPassword() === null);
125
    }
126
127
    function it_does_nothing_if_resolved_plain_password_is_empty(
128
        ObjectManager $objectManager,
129
        InteractiveLoginEvent $event,
130
        TokenInterface $token
131
    ): void {
132
        $request = new Request();
133
        $request->request->set('_password', '');
134
135
        $event->getAuthenticationToken()->willReturn($token);
136
        $event->getRequest()->willReturn($request);
137
138
        $user = new FixtureUser();
139
        $user->setEncoderName('oldalgo');
140
141
        $token->getUser()->willReturn($user);
142
143
        $objectManager->persist($user)->shouldNotBeCalled();
144
        $objectManager->flush()->shouldNotBeCalled();
145
146
        $this->onSecurityInteractiveLogin($event);
147
148
        assert($user->getEncoderName() === 'oldalgo');
149
        assert($user->getPlainPassword() === null);
150
    }
151
152
    function it_updates_the_encoder_and_plain_password_if_using_old_encoder_and_plain_password_could_be_resolved(
153
        ObjectManager $objectManager,
154
        InteractiveLoginEvent $event,
155
        TokenInterface $token
156
    ): void {
157
        $request = new Request();
158
        $request->request->set('_password', 'plainpassword');
159
160
        $event->getAuthenticationToken()->willReturn($token);
161
        $event->getRequest()->willReturn($request);
162
163
        $user = new FixtureUser();
164
        $user->setEncoderName('oldalgo');
165
166
        $token->getUser()->willReturn($user);
167
168
        $objectManager->persist($user)->shouldBeCalled();
169
        $objectManager->flush()->shouldBeCalled();
170
171
        $this->onSecurityInteractiveLogin($event);
172
173
        assert($user->getEncoderName() === 'newalgo');
174
        assert($user->getPlainPassword() === 'plainpassword');
175
    }
176
177
    function it_updates_the_encoder_and_plain_password_if_using_default_null_encoder_and_plain_password_could_be_resolved(
178
        ObjectManager $objectManager,
179
        InteractiveLoginEvent $event,
180
        TokenInterface $token
181
    ): void {
182
        $request = new Request();
183
        $request->request->set('_password', 'plainpassword');
184
185
        $event->getAuthenticationToken()->willReturn($token);
186
        $event->getRequest()->willReturn($request);
187
188
        $user = new FixtureUser();
189
        $user->setEncoderName(null);
190
191
        $token->getUser()->willReturn($user);
192
193
        $objectManager->persist($user)->shouldBeCalled();
194
        $objectManager->flush()->shouldBeCalled();
195
196
        $this->onSecurityInteractiveLogin($event);
197
198
        assert($user->getEncoderName() === 'newalgo');
199
        assert($user->getPlainPassword() === 'plainpassword');
200
    }
201
}
202