Skip to content

Commit c6d8f2c

Browse files
author
Julien Neuhart
committed
Update and add tests
1 parent 3920a1f commit c6d8f2c

File tree

7 files changed

+285
-3
lines changed

7 files changed

+285
-3
lines changed

src/api/src/UseCase/User/UpdateProfilePicture.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ public function update(
5757
?ProfilePicture $profilePicture = null
5858
): User {
5959
if ($profilePicture === null) {
60+
$user->setProfilePicture(null);
61+
$this->userDao->save($user);
62+
6063
return $user;
6164
}
6265

src/api/tests/UseCase/User/DeleteUserTest.php

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,30 @@
66
use App\Domain\Dao\UserDao;
77
use App\Domain\Enum\Locale;
88
use App\Domain\Enum\Role;
9+
use App\Domain\Model\Storable\ProfilePicture;
910
use App\Domain\Model\User;
11+
use App\Domain\Storage\ProfilePictureStorage;
1012
use App\UseCase\User\DeleteUser;
1113
use App\UseCase\User\ResetPassword\ResetPassword;
14+
use App\UseCase\User\UpdateProfilePicture;
1215
use TheCodingMachine\TDBM\TDBMException;
1316

1417
use function PHPUnit\Framework\assertCount;
18+
use function PHPUnit\Framework\assertFalse;
1519

1620
beforeEach(function (): void {
1721
$userDao = self::$container->get(UserDao::class);
1822
assert($userDao instanceof UserDao);
1923

20-
$merchant = new User(
24+
$user = new User(
2125
'foo',
2226
'bar',
2327
'user@foo.com',
2428
Locale::EN(),
2529
Role::USER()
2630
);
27-
$merchant->setId('1');
28-
$userDao->save($merchant);
31+
$user->setId('1');
32+
$userDao->save($user);
2933
});
3034

3135
it(
@@ -45,6 +49,34 @@ function (): void {
4549
->throws(TDBMException::class)
4650
->group('user');
4751

52+
it(
53+
'deletes the profile picture',
54+
function (): void {
55+
$userDao = self::$container->get(UserDao::class);
56+
assert($userDao instanceof UserDao);
57+
$updateProfilePicture = self::$container->get(UpdateProfilePicture::class);
58+
assert($updateProfilePicture instanceof UpdateProfilePicture);
59+
$profilePictureStorage = self::$container->get(ProfilePictureStorage::class);
60+
assert($profilePictureStorage instanceof ProfilePictureStorage);
61+
$deleteUser = self::$container->get(DeleteUser::class);
62+
assert($deleteUser instanceof DeleteUser);
63+
64+
$user = $userDao->getById('1');
65+
$storable = ProfilePicture::createFromPath(
66+
dirname(__FILE__) . '/foo.jpg'
67+
);
68+
$user = $updateProfilePicture->update($user, $storable);
69+
$filename = $user->getProfilePicture();
70+
71+
$deleteUser->deleteUser($user);
72+
73+
assertFalse($profilePictureStorage->fileExists($filename));
74+
$userDao->getById($user->getId());
75+
}
76+
)
77+
->throws(TDBMException::class)
78+
->group('user');
79+
4880
it(
4981
'deletes the reset password token',
5082
function (): void {
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use App\Domain\Dao\UserDao;
6+
use App\Domain\Enum\Locale;
7+
use App\Domain\Enum\Role;
8+
use App\Domain\Model\Storable\ProfilePicture;
9+
use App\Domain\Model\User;
10+
use App\Domain\Storage\ProfilePictureStorage;
11+
use App\Domain\Throwable\InvalidStorable;
12+
use App\UseCase\User\UpdateProfilePicture;
13+
14+
use function PHPUnit\Framework\assertFalse;
15+
use function PHPUnit\Framework\assertNotNull;
16+
use function PHPUnit\Framework\assertNull;
17+
use function PHPUnit\Framework\assertTrue;
18+
19+
beforeEach(function (): void {
20+
$userDao = self::$container->get(UserDao::class);
21+
assert($userDao instanceof UserDao);
22+
23+
$user = new User(
24+
'foo',
25+
'bar',
26+
'user@foo.com',
27+
Locale::EN(),
28+
Role::USER()
29+
);
30+
$user->setId('1');
31+
$userDao->save($user);
32+
});
33+
34+
it('updates a profile picture', function (?string $filename): void {
35+
$userDao = self::$container->get(UserDao::class);
36+
assert($userDao instanceof UserDao);
37+
$updateProfilePicture = self::$container->get(UpdateProfilePicture::class);
38+
assert($updateProfilePicture instanceof UpdateProfilePicture);
39+
$profilePictureStorage = self::$container->get(ProfilePictureStorage::class);
40+
assert($profilePictureStorage instanceof ProfilePictureStorage);
41+
42+
$user = $userDao->getById('1');
43+
44+
if ($filename !== null) {
45+
$storable = ProfilePicture::createFromPath(
46+
dirname(__FILE__) . '/' . $filename
47+
);
48+
$user = $updateProfilePicture->update($user, $storable);
49+
assertTrue($profilePictureStorage->fileExists($user->getProfilePicture()));
50+
} else {
51+
$user = $updateProfilePicture->update($user, null);
52+
assertNull($user->getProfilePicture());
53+
}
54+
})
55+
->with([
56+
null,
57+
'foo.png',
58+
'foo.jpg',
59+
])
60+
->group('user');
61+
62+
it(
63+
'deletes previous profile picture',
64+
function (): void {
65+
$userDao = self::$container->get(UserDao::class);
66+
assert($userDao instanceof UserDao);
67+
$updateProfilePicture = self::$container->get(UpdateProfilePicture::class);
68+
assert($updateProfilePicture instanceof UpdateProfilePicture);
69+
$profilePictureStorage = self::$container->get(ProfilePictureStorage::class);
70+
assert($profilePictureStorage instanceof ProfilePictureStorage);
71+
72+
$user = $userDao->getById('1');
73+
$storable = ProfilePicture::createFromPath(
74+
dirname(__FILE__) . '/foo.jpg'
75+
);
76+
$user = $updateProfilePicture->update($user, $storable);
77+
$previousFilename = $user->getProfilePicture();
78+
79+
assertNotNull($previousFilename);
80+
81+
$storable = ProfilePicture::createFromPath(
82+
dirname(__FILE__) . '/foo.jpg'
83+
);
84+
$updateProfilePicture->update($user, $storable);
85+
86+
assertFalse($profilePictureStorage->fileExists($previousFilename));
87+
}
88+
)
89+
->group('user');
90+
91+
it(
92+
'throws an exception in valid profile picture',
93+
function (): void {
94+
$userDao = self::$container->get(UserDao::class);
95+
assert($userDao instanceof UserDao);
96+
$updateProfilePicture = self::$container->get(UpdateProfilePicture::class);
97+
assert($updateProfilePicture instanceof UpdateProfilePicture);
98+
99+
$user = $userDao->getById('1');
100+
$storable = ProfilePicture::createFromPath(
101+
dirname(__FILE__) . '/foo.txt'
102+
);
103+
104+
$updateProfilePicture->update($user, $storable);
105+
}
106+
)
107+
->throws(InvalidStorable::class)
108+
->group('user');
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use App\Domain\Dao\UserDao;
6+
use App\Domain\Enum\Locale;
7+
use App\Domain\Enum\Role;
8+
use App\Domain\Model\Storable\ProfilePicture;
9+
use App\Domain\Model\User;
10+
use App\Domain\Throwable\InvalidModel;
11+
use App\Tests\UseCase\DummyValues;
12+
use App\UseCase\User\CreateUser;
13+
use App\UseCase\User\UpdateUser;
14+
15+
use function PHPUnit\Framework\assertEquals;
16+
use function PHPUnit\Framework\assertNotNull;
17+
use function PHPUnit\Framework\assertNull;
18+
19+
beforeEach(function (): void {
20+
$userDao = self::$container->get(UserDao::class);
21+
assert($userDao instanceof UserDao);
22+
23+
$user = new User(
24+
'foo',
25+
'bar',
26+
'user@foo.com',
27+
Locale::FR(),
28+
Role::USER()
29+
);
30+
$user->setId('1');
31+
$userDao->save($user);
32+
});
33+
34+
it(
35+
'updates a user',
36+
function (
37+
string $firstName,
38+
string $lastName,
39+
string $email,
40+
Locale $locale,
41+
Role $role,
42+
?string $filename
43+
): void {
44+
$userDao = self::$container->get(UserDao::class);
45+
assert($userDao instanceof UserDao);
46+
$updateUser = self::$container->get(UpdateUser::class);
47+
assert($updateUser instanceof UpdateUser);
48+
49+
$storable = null;
50+
if ($filename !== null) {
51+
$storable = ProfilePicture::createFromPath(
52+
dirname(__FILE__) . '/' . $filename
53+
);
54+
}
55+
56+
$user = $updateUser->update(
57+
$userDao->getById('1'),
58+
$firstName,
59+
$lastName,
60+
$email,
61+
$locale,
62+
$role,
63+
$storable
64+
);
65+
66+
assertEquals($firstName, $user->getFirstName());
67+
assertEquals($lastName, $user->getLastName());
68+
assertEquals($email, $user->getEmail());
69+
assertNull($user->getPassword());
70+
assertEquals($locale, $user->getLocale());
71+
assertEquals($role, $user->getRole());
72+
73+
if ($filename !== null) {
74+
assertNotNull($filename);
75+
} else {
76+
assertNull($user->getProfilePicture());
77+
}
78+
}
79+
)
80+
->with([
81+
['bar', 'foo', 'bar.foo@baz.com', Locale::EN(), Role::ADMINISTRATOR(), null],
82+
['foo', 'bar', 'foo.bar@baz.com', Locale::EN(), Role::USER(), null],
83+
['foo', 'bar', 'foo.bar@baz.com', Locale::EN(), Role::USER(), 'foo.png'],
84+
])
85+
->group('user');
86+
87+
it(
88+
'throws an exception if invalid user',
89+
function (
90+
string $firstName,
91+
string $lastName,
92+
string $email,
93+
Locale $locale,
94+
Role $role
95+
): void {
96+
$createUser = self::$container->get(CreateUser::class);
97+
assert($createUser instanceof CreateUser);
98+
$userDao = self::$container->get(UserDao::class);
99+
assert($userDao instanceof UserDao);
100+
$updateUser = self::$container->get(UpdateUser::class);
101+
assert($updateUser instanceof UpdateUser);
102+
103+
// We create a user for checking if an
104+
// email is not unique.
105+
$createUser->createUser(
106+
'foo',
107+
'bar',
108+
'foo@bar.com',
109+
Locale::EN(),
110+
Role::USER()
111+
);
112+
113+
$updateUser->update(
114+
$userDao->getById('1'),
115+
$firstName,
116+
$lastName,
117+
$email,
118+
$locale,
119+
$role
120+
);
121+
}
122+
)
123+
->with([
124+
// Blank first name.
125+
[DummyValues::BLANK, 'bar', 'foo@foo.com', Locale::EN(), Role::ADMINISTRATOR()],
126+
// First name > 255.
127+
[DummyValues::CHAR256, 'bar', 'foo@foo.com', Locale::EN(), Role::ADMINISTRATOR()],
128+
// Blank last name.
129+
['foo', DummyValues::BLANK, 'foo@foo.com', Locale::EN(), Role::ADMINISTRATOR()],
130+
// Last name > 255.
131+
['foo', DummyValues::CHAR256, 'foo@foo.com', Locale::EN(), Role::ADMINISTRATOR()],
132+
// Existing e-mail.
133+
['foo', 'far', 'foo@bar.com', Locale::EN(), Role::ADMINISTRATOR()],
134+
// Invalid e-mail.
135+
['foo', 'far', 'foo', Locale::EN(), Role::ADMINISTRATOR()],
136+
])
137+
->throws(InvalidModel::class)
138+
->group('user');

src/api/tests/UseCase/User/foo.jpg

4.67 KB
Loading

src/api/tests/UseCase/User/foo.png

2.25 KB
Loading

src/api/tests/UseCase/User/foo.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
A text file.

0 commit comments

Comments
 (0)