Skip to content

🧪 test(private-space): robustesse, pertinence métier et documentation des tests UserRepository#7

Merged
ronan-develop merged 7 commits into
mainfrom
feat/private-space
Aug 17, 2025
Merged

🧪 test(private-space): robustesse, pertinence métier et documentation des tests UserRepository#7
ronan-develop merged 7 commits into
mainfrom
feat/private-space

Conversation

@ronan-develop

Copy link
Copy Markdown
Owner

Cette PR fiabilise et documente la couverture de tests sur la feature PrivateSpace :

Remplacement des mocks PrivateSpace par de vraies entités Doctrine dans les tests UserRepositoryTest
Ajout des champs obligatoires sur PrivateSpace pour éviter les erreurs d’intégrité
Ajout d’un contrôle métier explicite dans upgradePassword (username requis, lève LogicException)
Documentation de la couverture pertinente (README_UserRepositoryTest.md) : pas de test artificiel du constructeur, coverage à 50% assumé et expliqué
Respect strict de la pertinence métier pour chaque test, pas de test « pour le coverage »
Synchronisation vérifiée de la documentation, des schémas (classes.puml) et des endpoints (api_endpoints.md) avec l’état du code

…r <-> PrivateSpace

- Ajout explicite de la relation OneToOne bidirectionnelle entre User et PrivateSpace dans le diagramme de classes (PlantUML)
- Documentation de l’accès $privateSpace->getUser() et de la synchronisation du diagramme dans le journal d’actions (.github/projet-context.md)
- Rappel : commit et PR à chaque étape structurante pour garantir la traçabilité

Refs: #private-space #modelisation #documentation
- Ajout d’un test d’intégration pour la création, la persistance et la vérification de la relation bidirectionnelle User <-> PrivateSpace
- Configuration complète de .env.test pour la base MariaDB de test
- Migration Doctrine appliquée sur la base de test, schéma synchronisé
- 4 assertions validant la cohérence ORM et l’accès bidirectionnel

Refs: #private-space #test #doctrine #ci
…gradePassword

- Remplacement des mocks PrivateSpace par de vraies entités Doctrine dans les tests UserRepositoryTest
- Ajout des champs obligatoires sur PrivateSpace pour éviter les erreurs d’intégrité
- Ajout d’un contrôle métier explicite dans upgradePassword (username requis, lève LogicException)
- Documentation de la couverture pertinente (README_UserRepositoryTest.md) : pas de test artificiel du constructeur, coverage à 50% assumé
- Respect strict de la pertinence métier pour chaque test, pas de test « pour le coverage »

#tests #repository #doctrine #robustesse #documentation
@ronan-develop
ronan-develop requested a review from Copilot August 17, 2025 20:36
@ronan-develop ronan-develop self-assigned this Aug 17, 2025
@ronan-develop ronan-develop added documentation Improvements or additions to documentation tests Ajout, correction ou amélioration de tests labels Aug 17, 2025

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Cette PR améliore la robustesse et la documentation des tests pour la feature PrivateSpace en remplaçant les mocks par de vraies entités Doctrine et en ajoutant une validation métier explicite dans UserRepository.

  • Remplacement des mocks PrivateSpace par de vraies entités Doctrine dans les tests
  • Ajout d'un contrôle métier dans upgradePassword pour valider la présence du username
  • Documentation explicite de la stratégie de couverture de tests (50% assumé et justifié)

Reviewed Changes

Copilot reviewed 21 out of 24 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
lenouvel.me/tests/bootstrap.php Configuration bootstrap pour les tests PHPUnit
lenouvel.me/tests/Repository/UserRepositoryTest.php Tests du repository User avec vraies entités Doctrine
lenouvel.me/tests/Repository/README_UserRepositoryTest.md Documentation de la stratégie de couverture de tests
lenouvel.me/src/Repository/UserRepository.php Ajout d'une validation métier dans upgradePassword
lenouvel.me/src/Entity/User.php Ajout de la relation OneToOne avec PrivateSpace
lenouvel.me/src/Entity/PrivateSpace.php Création de l'entité PrivateSpace avec relation User

$this->assertArrayHasKey("\0App\\Entity\\User\0username", $data);
$this->assertArrayHasKey("\0App\\Entity\\User\0email", $data);
$this->assertArrayHasKey("\0App\\Entity\\User\0password", $data);
$this->assertSame(hash('crc32c', 'secret'), $data["\0App\\Entity\\User\0password"]);

Copilot AI Aug 17, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Le test vérifie le hash CRC32C du mot de passe, mais cette logique de hashage dans __serialize() pourrait être testée de manière plus robuste en vérifiant que la sérialisation/désérialisation préserve l'intégrité des données plutôt que de tester l'implémentation interne du hash.

Suggested change
$this->assertSame(hash('crc32c', 'secret'), $data["\0App\\Entity\\User\0password"]);
// Serialize and then unserialize the user object
$serialized = serialize($user);
$unserializedUser = unserialize($serialized);
// Check that the unserialized object has the same properties
$this->assertInstanceOf(User::class, $unserializedUser);
$this->assertSame($user->getUsername(), $unserializedUser->getUsername());
$this->assertSame($user->getEmail(), $unserializedUser->getEmail());
$this->assertSame($user->getPassword(), $unserializedUser->getPassword());

Copilot uses AI. Check for mistakes.
{
$data = (array) $this;
$data["\0".self::class."\0password"] = hash('crc32c', $this->password);
$data["\0" . self::class . "\0password"] = $this->password !== null ? hash('crc32c', $this->password) : null;

Copilot AI Aug 17, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L'utilisation de CRC32C pour hasher le mot de passe dans la sérialisation est problématique pour la sécurité. CRC32C n'est pas cryptographiquement sûr et peut permettre la récupération du mot de passe original. Considérez utiliser un hash cryptographique sécurisé ou éviter de sérialiser le mot de passe.

Suggested change
$data["\0" . self::class . "\0password"] = $this->password !== null ? hash('crc32c', $this->password) : null;
$data["\0" . self::class . "\0password"] = $this->password !== null ? hash('sha256', $this->password) : null;

Copilot uses AI. Check for mistakes.
@ronan-develop
ronan-develop merged commit 8c4ed6a into main Aug 17, 2025
1 check passed
@ronan-develop
ronan-develop deleted the feat/private-space branch August 17, 2025 20:38
ronan-develop added a commit that referenced this pull request Aug 18, 2025
🧪 test(private-space): robustesse, pertinence métier et documentation des tests UserRepository
ronan-develop added a commit that referenced this pull request Aug 21, 2025
🧪 test(private-space): robustesse, pertinence métier et documentation des tests UserRepository
ronan-develop added a commit that referenced this pull request Aug 21, 2025
🧪 test(private-space): robustesse, pertinence métier et documentation des tests UserRepository
ronan-develop added a commit that referenced this pull request Nov 9, 2025
- Affiche le type refusé et la liste des types acceptés dans l’exception
- Test unitaire adapté pour vérifier le message

Facilite le debug et l’expérience utilisateur lors d’un upload refusé.

Closes #7 (todo améliorer messages d’erreur validator)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation tests Ajout, correction ou amélioration de tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants