```
✨ feat(revervation): [Ajoute la création de session de réservation et le flow] 🐛 fix(PurgeCommandTest): [Utilise addCommand au lieu de add pour les commandes] 📝 chore(deps): [Mise à jour des dépendances Composer et corrections] 🐛 fix(KeycloakAuthenticator): [Corrige le type nullable de l'exception start] ✨ feat(Customer): [Ajoute les sessions de commandes aux entités Customer] ♻️ refactor(AppLogger): [Refactorise l'AppLogger pour obtenir l'UserAgent] ✨ feat(FlowReserve): [Ajoute une action de validation du panier] ```
This commit is contained in:
144
tests/Event/Service/AdminEventTest.php
Normal file
144
tests/Event/Service/AdminEventTest.php
Normal file
@@ -0,0 +1,144 @@
|
||||
<?php
|
||||
|
||||
namespace App\Tests\Event\Service;
|
||||
|
||||
use App\Entity\Account;
|
||||
use App\Entity\AccountResetPasswordRequest;
|
||||
use App\Event\Object\EventAdminCreate;
|
||||
use App\Event\Object\EventAdminDeleted;
|
||||
use App\Event\Service\AdminEvent;
|
||||
use App\Service\Mailer\Mailer;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
use PHPUnit\Framework\Attributes\AllowMockObjectsWithoutExpectations;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
|
||||
#[AllowMockObjectsWithoutExpectations]
|
||||
class AdminEventTest extends TestCase
|
||||
{
|
||||
private $mailer;
|
||||
private $urlGenerator;
|
||||
private $entityManager;
|
||||
private $adminEvent;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->mailer = $this->createMock(Mailer::class);
|
||||
$this->urlGenerator = $this->createMock(UrlGeneratorInterface::class);
|
||||
$this->entityManager = $this->createMock(EntityManagerInterface::class);
|
||||
|
||||
$this->adminEvent = new AdminEvent(
|
||||
$this->mailer,
|
||||
$this->urlGenerator,
|
||||
$this->entityManager
|
||||
);
|
||||
}
|
||||
|
||||
public function testOnAdminCreate()
|
||||
{
|
||||
$account = $this->createMock(Account::class);
|
||||
$account->method('getId')->willReturn(1);
|
||||
$account->method('getEmail')->willReturn('test@example.com');
|
||||
$account->method('getFirstName')->willReturn('John');
|
||||
$account->method('getName')->willReturn('Doe');
|
||||
|
||||
$requestedAccount = $this->createMock(Account::class);
|
||||
|
||||
$event = new EventAdminCreate($account, $requestedAccount);
|
||||
|
||||
$repo = $this->createMock(EntityRepository::class);
|
||||
$this->entityManager->method('getRepository')->with(AccountResetPasswordRequest::class)->willReturn($repo);
|
||||
$repo->method('findOneBy')->willReturn(null);
|
||||
|
||||
$this->entityManager->expects($this->once())->method('persist');
|
||||
$this->entityManager->expects($this->once())->method('flush');
|
||||
|
||||
$this->urlGenerator->expects($this->once())
|
||||
->method('generate')
|
||||
->willReturn('http://example.com/reset');
|
||||
|
||||
$this->mailer->expects($this->once())
|
||||
->method('send')
|
||||
->with(
|
||||
'test@example.com',
|
||||
'John Doe',
|
||||
'[Intranet Ludikevent] Activation de votre accès administrateur'
|
||||
);
|
||||
|
||||
$this->adminEvent->onAdminCreate($event);
|
||||
}
|
||||
|
||||
public function testOnAdminCreateExistingValidRequest()
|
||||
{
|
||||
$account = $this->createMock(Account::class);
|
||||
$account->method('getId')->willReturn(1);
|
||||
$account->method('getEmail')->willReturn('test@example.com');
|
||||
$requestedAccount = $this->createMock(Account::class);
|
||||
$event = new EventAdminCreate($account, $requestedAccount);
|
||||
|
||||
$existingRequest = new AccountResetPasswordRequest();
|
||||
$existingRequest->setExpiresAt(new \DateTimeImmutable('+1 hour'));
|
||||
$existingRequest->setToken('existing_token');
|
||||
|
||||
$repo = $this->createMock(EntityRepository::class);
|
||||
$this->entityManager->method('getRepository')->with(AccountResetPasswordRequest::class)->willReturn($repo);
|
||||
$repo->method('findOneBy')->willReturn($existingRequest);
|
||||
|
||||
// Should NOT persist a new one, but reuse existing
|
||||
$this->entityManager->expects($this->never())->method('persist');
|
||||
|
||||
// Should generate URL with existing token
|
||||
$this->urlGenerator->expects($this->once())
|
||||
->method('generate')
|
||||
->with(
|
||||
'app_forgot_password_confirm',
|
||||
['id' => 1, 'token' => 'existing_token']
|
||||
);
|
||||
|
||||
$this->adminEvent->onAdminCreate($event);
|
||||
}
|
||||
|
||||
public function testOnAdminCreateExistingExpiredRequest()
|
||||
{
|
||||
$account = $this->createMock(Account::class);
|
||||
$account->method('getId')->willReturn(1);
|
||||
$account->method('getEmail')->willReturn('test@example.com');
|
||||
$requestedAccount = $this->createMock(Account::class);
|
||||
$event = new EventAdminCreate($account, $requestedAccount);
|
||||
|
||||
$existingRequest = new AccountResetPasswordRequest();
|
||||
$existingRequest->setExpiresAt(new \DateTimeImmutable('-1 hour'));
|
||||
|
||||
$repo = $this->createMock(EntityRepository::class);
|
||||
$this->entityManager->method('getRepository')->with(AccountResetPasswordRequest::class)->willReturn($repo);
|
||||
$repo->method('findOneBy')->willReturn($existingRequest);
|
||||
|
||||
// Should remove expired
|
||||
$this->entityManager->expects($this->once())->method('remove')->with($existingRequest);
|
||||
// Should persist new one
|
||||
$this->entityManager->expects($this->atLeastOnce())->method('persist');
|
||||
// Flush called for remove and persist
|
||||
$this->entityManager->expects($this->atLeast(2))->method('flush');
|
||||
|
||||
$this->adminEvent->onAdminCreate($event);
|
||||
}
|
||||
|
||||
public function testOnAdminDeleted()
|
||||
{
|
||||
$account = $this->createMock(Account::class);
|
||||
$requestedAccount = $this->createMock(Account::class);
|
||||
|
||||
$event = new EventAdminDeleted($account, $requestedAccount);
|
||||
|
||||
$this->mailer->expects($this->exactly(2))
|
||||
->method('send')
|
||||
->with(
|
||||
$this->stringContains('@'), // Simple check for email arg
|
||||
$this->stringContains('Notification'),
|
||||
"[Intranet Ludikevent] - Suppression d'un administrateur"
|
||||
);
|
||||
|
||||
$this->adminEvent->onAdminDeleted($event);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user