Skip to content
This repository was archived by the owner on Apr 3, 2023. It is now read-only.

Commit 8530e24

Browse files
author
Teddy Roncin
committed
✅ (GET /users) Updated tests to match new parameters of the route
Added tests for each function of the route. Removed some prints. Added assertSameUserReadSome method in EtuUTTApiTestCase. Added order in the /users routes. Fixed a problem with skip_null_values (it now seems like it's necessary to explicit that parameter for each route that overrides normalizationContext). Added a way to generate a custom amount of users in the UserSeeder. Changed phone number generation in UserInfoVisibilitySeeder. Added a parameter in BrancheFiliereFormationSeeder to set the minimum amount of users with filiere that should be generated
1 parent 081437c commit 8530e24

File tree

8 files changed

+281
-85
lines changed

8 files changed

+281
-85
lines changed

src/DataFixtures/BrancheFiliereFormationSeeder.php

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@
2020

2121
class BrancheFiliereFormationSeeder extends Fixture implements DependentFixtureInterface
2222
{
23+
private int $minFiliereCount;
24+
25+
public function __construct(int $minFiliereCount = 0)
26+
{
27+
$this->minFiliereCount = $minFiliereCount;
28+
}
29+
2330
public function getDependencies()
2431
{
2532
return [
@@ -60,9 +67,9 @@ public function load(ObjectManager $manager)
6067
// Création des autres informations pour les branches
6168
if (0 !== $i) {
6269
$branche->setExitSalary($faker->numberBetween(35000, 45000));
63-
$branche->setEmploymentRate($faker->numberBetween(7500, 10000) / 100);
64-
$branche->setCDIRate($faker->numberBetween(7500, 10000) / 100);
65-
$branche->setAbroadEmploymentRate($faker->numberBetween(7500, 10000) / 100);
70+
$branche->setEmploymentRate((int) ($faker->numberBetween(7500, 10000) / 100));
71+
$branche->setCDIRate((int) ($faker->numberBetween(7500, 10000) / 100));
72+
$branche->setAbroadEmploymentRate((int) ($faker->numberBetween(7500, 10000) / 100));
6673
}
6774

6875
// On persiste l'entité dans la base de données
@@ -111,16 +118,17 @@ public function load(ObjectManager $manager)
111118

112119
/** @var SemesterRepository $semesterRepository */
113120
$semesterRepository = $manager->getRepository(Semester::class);
121+
$usersCount = \count($users);
114122

115-
foreach ($users as $user) {
123+
foreach ($users as $i => $user) {
116124
// Création de la variable pivot
117125
$userUTTBranche = new UserBranche();
118126
$userUTTBranche->setUser($user);
119127
$branche = $faker->randomElement($branches);
120128
$userUTTBranche->setUTTBranche($branche);
121129

122-
// Ajout d'une filière pour la moitié des users
123-
if ($faker->boolean()) {
130+
// Ajout d'une filière pour la moitié des users (forcer l'ajout si cela est nécessaire pour atteindre le minimum demandé)
131+
if ($usersCount - $i <= $this->minFiliereCount || $faker->boolean()) {
124132
$userUTTBranche->setUTTFiliere($faker->randomElement($branche->getUTTFilieres()->getValues()));
125133
}
126134

src/DataFixtures/UserInfoVisibilitySeeder.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
use App\Entity\User;
77
use App\Entity\UserAddress;
88
use App\Entity\UserInfos;
9-
use App\Entity\UserMailsPhones;
109
use App\Entity\UserPreference;
1110
use App\Repository\GroupRepository;
1211
use Doctrine\Bundle\FixturesBundle\Fixture;
@@ -79,7 +78,7 @@ public function load(ObjectManager $manager)
7978
$mailPhone->setMailPersonal($faker->email);
8079
$mailUTT = $faker->email;
8180
$mailPhone->setMailUTT(substr($mailUTT, 0, strpos($mailUTT, '@')).'@utt.fr');
82-
$mailPhone->setPhoneNumber($faker->randomElement(['0647935003', '+33 6 47 93 50 03', '06 47 93 50 03', '06.47.93.50.03']));
81+
$mailPhone->setPhoneNumber($faker->phoneNumber);
8382
$this->setFieldVisibility($mailPhone, 'addMailPersonalVisibility', $faker, $groupRepo);
8483
$this->setFieldVisibility($mailPhone, 'addPhoneNumberVisibility', $faker, $groupRepo);
8584
}

src/DataFixtures/UserSeeder.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@
1818

1919
class UserSeeder extends Fixture implements DependentFixtureInterface
2020
{
21+
private int $userCount;
22+
23+
public function __construct(int $userCount = 301)
24+
{
25+
$this->userCount = $userCount;
26+
}
27+
2128
public function getDependencies()
2229
{
2330
return [
@@ -41,7 +48,7 @@ public function load(ObjectManager $manager)
4148
$manager->persist($user);
4249

4350
$userRepository = $manager->getRepository(User::class);
44-
for ($i = 0; $i < 300; ++$i) {
51+
for ($i = 0; $i < $this->userCount - 1; ++$i) {
4552
// Créations d'un User
4653
$user = new User();
4754
$user->setStudentId(44000 + $i);

src/Entity/User.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,16 @@
3737
shortName: 'user',
3838
operations: [
3939
new GetCollection(
40-
normalizationContext: ['groups' => ['user:read:some']],
40+
normalizationContext: [
41+
'groups' => ['user:read:some'],
42+
'skip_null_values' => false,
43+
],
4144
),
4245
new Get(
43-
normalizationContext: ['groups' => ['user:read:one']],
46+
normalizationContext: [
47+
'groups' => ['user:read:one'],
48+
'skip_null_values' => false,
49+
],
4450
provider: UserDataVisibilityItemDataProvider::class
4551
),
4652
new Get(
@@ -59,11 +65,9 @@
5965
security: "object == user or is_granted('ROLE_ADMIN')",
6066
),
6167
],
62-
normalizationContext: [
63-
'skip_null_values' => false,
64-
],
6568
paginationItemsPerPage: 10,
6669
security: "is_granted('ROLE_USER')",
70+
order: ['lastName' => 'ASC', 'firstName' => 'ASC'],
6771
),
6872
ApiFilter(
6973
SearchFilter::class,
@@ -324,7 +328,6 @@ class User implements UserInterface
324328
*/
325329
#[Groups([
326330
'user:read:one',
327-
'user:read:some',
328331
'user:write:update',
329332
])]
330333
private $mailsPhones;

tests/EtuUTTApiTestCase.php

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
use App\Entity\Group;
77
use App\Entity\Translation;
88
use App\Entity\User;
9+
use App\Entity\UserInfos;
910
use Doctrine\Bundle\FixturesBundle\Fixture;
1011
use Doctrine\Common\DataFixtures\Loader;
1112
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
12-
use Doctrine\DBAL\Schema\Table;
1313
use Doctrine\ORM\EntityManager;
1414
use Symfony\Bridge\Doctrine\Types\UuidType;
1515
use Symfony\Component\Uid\Uuid;
@@ -22,7 +22,7 @@ abstract class EtuUTTApiTestCase extends ApiTestCase
2222

2323
protected function setUp(): void
2424
{
25-
$this->em = static::getContainer()->get('doctrine.orm.entity_manager'); // !->getManager();
25+
$this->em = static::getContainer()->get('doctrine.orm.entity_manager');
2626
(new ORMPurger($this->em))->purge();
2727
$this->em->clear();
2828
$this->user = $this->createUser('test', 'test', 'test', 'ROLE_ADMIN');
@@ -80,6 +80,29 @@ protected static function assertSameTranslation(Translation $expected, mixed $ac
8080
static::assertSame($expected->getChinese(), $actual->chinese);
8181
}
8282

83+
protected static function assertSameUserReadSome(User $expected, mixed $actual): void
84+
{
85+
static::assertIsObject($actual);
86+
static::assertSame(7, \count((array) $actual));
87+
static::assertSame('user', $actual->{'@type'});
88+
static::assertSame("/users/{$expected->getId()}", $actual->{'@id'});
89+
static::assertSame($expected->getId()->jsonSerialize(), $actual->id);
90+
static::assertSame($expected->getFirstName(), $actual->firstName);
91+
static::assertSame($expected->getLastName(), $actual->lastName);
92+
static::assertSame($expected->getLogin(), $actual->login);
93+
static::assertSameUserInfosReadSome($expected->getInfos(), $actual->infos);
94+
}
95+
96+
protected static function assertSameUserInfosReadSome(UserInfos $expected, mixed $actual): void
97+
{
98+
static::assertIsObject($actual);
99+
static::assertSame(4, \count((array) $actual));
100+
static::assertSame('UserInfos', $actual->{'@type'});
101+
static::assertStringStartsWith('/.well-known/genid/', $actual->{'@id'});
102+
static::assertSame($expected->getAvatar(), $actual->avatar);
103+
static::assertSame($expected->getNickname(), $actual->nickname);
104+
}
105+
83106
protected function loadFixtures(Fixture ...$fixtures)
84107
{
85108
$fixtureLoader = new Loader();
@@ -139,19 +162,15 @@ private function _backupDatabase(array &$backup): void
139162
$tableName = $table->getName();
140163
$backup[$tableName] = [];
141164
$rows = $this->em->getConnection()->prepare("SELECT * FROM {$tableName}")->executeQuery()->fetchAllAssociative();
165+
$getPrintableValue = fn (string $column, $value): ?string => UuidType::class === $table->getColumn($column)->getType()::class && null !== $value ? Uuid::fromBinary($value)->jsonSerialize() : $value;
142166
foreach ($rows as $row) {
143167
// Convert all values to printable values
144168
foreach ($row as $column => &$value) {
145-
$value = $this->getPrintableValue($table, $column, $value);
169+
$value = $getPrintableValue($column, $value);
146170
}
147171
// Store the row
148172
$backup[$tableName][] = $row;
149173
}
150174
}
151175
}
152-
153-
private function getPrintableValue(Table $table, string $column, $value): ?string
154-
{
155-
return UuidType::class === $table->getColumn($column)->getType()::class && null !== $value ? Uuid::fromBinary($value)->jsonSerialize() : $value;
156-
}
157176
}

tests/Users/GetUserFromId.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ public function testNormal(): void
3838
$crawler = $client->request('GET', '/users/'.$user['id']->jsonSerialize());
3939
$this->assertResponseStatusCodeSame(Response::HTTP_OK);
4040
$response = json_decode($crawler->getContent());
41-
print_r($response);
4241
static::assertSame($user['id']->jsonSerialize(), $response->{'id'});
4342
static::assertSame($user['login'], $response->{'login'});
4443
static::assertSame($user['studentId'], $response->{'studentId'});

0 commit comments

Comments
 (0)