feat: Implémente la fonctionnalité de réinitialisation du mot de passe
Ce commit introduit la fonctionnalité de réinitialisation du mot de passe pour les utilisateurs. Les modifications apportées sont les suivantes : - Ajout de l'entité `AccountResetPasswordRequest` pour gérer les requêtes de réinitialisation de mot de passe. - Ajout du repository `AccountResetPasswordRequestRepository` pour interagir avec l'entité `AccountResetPasswordRequest`. - Ajout du formulaire `RequestPasswordRequestType` pour permettre aux utilisateurs de demander une réinitialisation de mot de passe. - Ajout de l'événement `ResetPasswordEvent` pour déclencher le processus de réinitialisation du mot de passe. - Ajout de la route `/forgot-password` dans le `HomeController` pour gérer la demande de réinitialisation. - Création des templates twig `admin/forgot-password.twig` et `admin/base.twig` et `form_tailwind.twig` pour la gestion de l'affichage du formulaire et de la base de l'interface admin. - Modification des templates twig `admin/login.twig` pour ajouter un lien vers la page de réinitialisation de mot de passe. - Mise à jour du fichier `assets/app.scss` pour inclure des styles CSS personnalisés. - Ajout de tests unitaires pour l'entité, le repository et le formulaire. - Ajout de la configuration twig pour prendre en charge les formulaires avec tailwind - Ajout des règles d'exclusions sonar dans `sonar-project.properties`
This commit is contained in:
37
tests/Entity/AccountResetPasswordRequestTest.php
Normal file
37
tests/Entity/AccountResetPasswordRequestTest.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Tests\Entity;
|
||||
|
||||
use App\Entity\Account;
|
||||
use App\Entity\AccountResetPasswordRequest;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use ReflectionClass;
|
||||
|
||||
class AccountResetPasswordRequestTest extends TestCase
|
||||
{
|
||||
public function testEntitySettersAndGetters(): void
|
||||
{
|
||||
$account = new Account(); // Ou crée un mock si la classe est complexe
|
||||
$token = 'reset-token-example';
|
||||
$now = new \DateTimeImmutable();
|
||||
$expires = $now->modify('+1 hour');
|
||||
|
||||
$resetRequest = new AccountResetPasswordRequest();
|
||||
$resetRequest->setAccount($account);
|
||||
$resetRequest->setToken($token);
|
||||
$resetRequest->setRequestedAt($now);
|
||||
$resetRequest->setExpiresAt($expires);
|
||||
|
||||
$refClass = new ReflectionClass($resetRequest);
|
||||
$idProp = $refClass->getProperty('id');
|
||||
$idProp->setAccessible(true);
|
||||
$idProp->setValue($resetRequest, 123);
|
||||
|
||||
$this->assertSame($account, $resetRequest->getAccount());
|
||||
$this->assertSame($token, $resetRequest->getToken());
|
||||
$this->assertSame($now, $resetRequest->getRequestedAt());
|
||||
$this->assertSame($expires, $resetRequest->getExpiresAt());
|
||||
$this->assertSame(123, $resetRequest->getId());
|
||||
|
||||
}
|
||||
}
|
||||
51
tests/Form/RequestPasswordRequestTypeTest.php
Normal file
51
tests/Form/RequestPasswordRequestTypeTest.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace App\Tests\Form;
|
||||
|
||||
use App\Form\RequestPasswordRequestType;
|
||||
use App\Service\ResetPassword\Event\ResetPasswordEvent;
|
||||
use Symfony\Component\Form\Test\TypeTestCase;
|
||||
|
||||
class RequestPasswordRequestTypeTest extends TypeTestCase
|
||||
{
|
||||
public function testSubmitValidData(): void
|
||||
{
|
||||
$formData = [
|
||||
'email' => 'user@example.com',
|
||||
];
|
||||
|
||||
$model = new ResetPasswordEvent(); // l'objet lié au formulaire
|
||||
$form = $this->factory->create(RequestPasswordRequestType::class, $model);
|
||||
|
||||
// Soumission du formulaire avec des données valides
|
||||
$form->submit($formData);
|
||||
|
||||
$this->assertTrue($form->isSynchronized());
|
||||
$this->assertTrue($form->isValid());
|
||||
|
||||
$expected = new ResetPasswordEvent();
|
||||
$expected->setEmail('user@example.com'); // Assure-toi que la méthode setEmail existe
|
||||
|
||||
$this->assertEquals($expected, $model);
|
||||
|
||||
// Vérification de la création des champs dans le formulaire
|
||||
$view = $form->createView();
|
||||
$children = $view->children;
|
||||
|
||||
$this->assertArrayHasKey('email', $children);
|
||||
}
|
||||
|
||||
public function testSubmitInvalidEmail(): void
|
||||
{
|
||||
$formData = [
|
||||
'email' => 'not-an-email',
|
||||
];
|
||||
|
||||
$model = new ResetPasswordEvent();
|
||||
$form = $this->factory->create(RequestPasswordRequestType::class, $model);
|
||||
|
||||
$form->submit($formData);
|
||||
|
||||
$this->assertTrue($form->isValid());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Tests\Repository;
|
||||
|
||||
use App\Entity\AccountResetPasswordRequest;
|
||||
use App\Repository\AccountResetPasswordRequestRepository;
|
||||
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
class AccountResetPasswordRequestRepositoryTest extends KernelTestCase
|
||||
{
|
||||
private ?EntityManagerInterface $entityManager;
|
||||
private ?AccountResetPasswordRequestRepository $accountResetPasswordRequestRepository;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
self::bootKernel();
|
||||
$this->entityManager = self::getContainer()->get('doctrine')->getManager();
|
||||
$this->accountResetPasswordRequestRepository = $this->entityManager->getRepository(AccountResetPasswordRequest::class);
|
||||
}
|
||||
|
||||
public function testRepositoryExistsAndIsCorrectInstance(): void
|
||||
{
|
||||
$this->assertInstanceOf(AccountResetPasswordRequestRepository::class, $this->accountResetPasswordRequestRepository);
|
||||
}
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
parent::tearDown();
|
||||
|
||||
$this->entityManager->close();
|
||||
$this->entityManager = null; // Avoid memory leaks
|
||||
$this->accountResetPasswordRequestRepository = null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user