-
Notifications
You must be signed in to change notification settings - Fork 64
Expand file tree
/
Copy pathProfileUpdateProcessorTest.php
More file actions
105 lines (89 loc) · 3.5 KB
/
ProfileUpdateProcessorTest.php
File metadata and controls
105 lines (89 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
namespace App\Tests\State;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\State\ProcessorInterface;
use App\Entity\Profile;
use App\Entity\User;
use App\Repository\UserRepository;
use App\Service\ClaimInvitationService;
use App\Service\MailService;
use App\State\ProfileUpdateProcessor;
use PHPUnit\Framework\Attributes\AllowMockObjectsWithoutExpectations;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface;
use Symfony\Component\PasswordHasher\PasswordHasherInterface;
/**
* @internal
*/
class ProfileUpdateProcessorTest extends TestCase {
private ProfileUpdateProcessor $processor;
private MockObject|PasswordHasherInterface $pwHasher;
private MailService|MockObject $mailService;
private Profile $profile;
/**
* @throws \ReflectionException
*/
protected function setUp(): void {
$this->profile = new Profile();
$this->profile->user = new User();
$pwHasherFactory = $this->createMock(PasswordHasherFactoryInterface::class);
$this->pwHasher = $this->createMock(PasswordHasherInterface::class);
$this->mailService = $this->createMock(MailService::class);
$decoratedProcessor = $this->createStub(ProcessorInterface::class);
$pwHasherFactory->method('getPasswordHasher')->willReturn($this->pwHasher);
$this->processor = new ProfileUpdateProcessor(
$decoratedProcessor,
$pwHasherFactory,
$this->mailService,
$this->createStub(Security::class),
$this->createStub(UserRepository::class),
$this->createStub(ClaimInvitationService::class),
);
}
#[AllowMockObjectsWithoutExpectations]
public function testSetNewEmail() {
// given
$this->pwHasher->expects(self::once())
->method('hash')
->willReturnCallback(md5(...))
;
$this->profile->newEmail = 'new@mail.com';
// when
$this->processor->onBefore($this->profile, new Patch());
// then
$this->assertSame('new@mail.com', $this->profile->untrustedEmail);
$this->assertNotNull($this->profile->untrustedEmailKey);
$this->assertNotNull($this->profile->untrustedEmailKeyHash);
}
#[AllowMockObjectsWithoutExpectations]
public function testSendVerificationMail() {
// given
$this->profile->untrustedEmailKey = 'abc';
$this->mailService->expects($this->once())->method('sendEmailVerificationMail');
// when
$this->processor->onAfter($this->profile, new Patch());
// then
$this->assertNull($this->profile->untrustedEmailKey);
}
#[AllowMockObjectsWithoutExpectations]
public function testChangeEmail() {
// given
$this->pwHasher->expects(self::once())
->method('verify')
->willReturn(true)
;
$this->profile->email = 'old@mail.com';
$this->profile->untrustedEmail = 'new@mail.com';
$this->profile->untrustedEmailKey = 'abc';
$this->profile->untrustedEmailKeyHash = 'abc';
// when
$this->processor->onBefore($this->profile, new Patch());
// then
$this->assertSame('new@mail.com', $this->profile->email);
$this->assertNull($this->profile->untrustedEmail);
$this->assertNull($this->profile->untrustedEmailKey);
$this->assertNull($this->profile->untrustedEmailKeyHash);
}
}