Add cancelOrder tests: success with ticket invalidation, access denied, not found

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-03-21 18:35:35 +01:00
parent 47537a76e3
commit e834dad706

View File

@@ -1603,6 +1603,94 @@ class AccountControllerTest extends WebTestCase
self::assertResponseRedirects();
}
public function testCancelOrder(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createUser(['ROLE_ORGANIZER'], true);
$event = $this->createEvent($em, $user);
$category = $this->createCategory($em, $event);
$billet = $this->createBillet($em, $category);
$order = new \App\Entity\BilletBuyer();
$order->setEvent($event);
$order->setFirstName('Jean');
$order->setLastName('Dupont');
$order->setEmail('jean@test.fr');
$order->setOrderNumber('2026-03-21-'.random_int(100, 999));
$order->setTotalHT(1000);
$order->setStatus(\App\Entity\BilletBuyer::STATUS_PAID);
$item = new \App\Entity\BilletBuyerItem();
$item->setBillet($billet);
$item->setBilletName('Test');
$item->setQuantity(1);
$item->setUnitPriceHT(1000);
$order->addItem($item);
$em->persist($order);
$em->flush();
$ticket = new \App\Entity\BilletOrder();
$ticket->setBilletBuyer($order);
$ticket->setBillet($billet);
$ticket->setBilletName('Test');
$ticket->setUnitPriceHT(1000);
$em->persist($ticket);
$em->flush();
$client->loginUser($user);
$client->request('POST', '/mon-compte/evenement/'.$event->getId().'/commande/'.$order->getId().'/annuler');
self::assertResponseRedirects('/mon-compte/evenement/'.$event->getId().'/modifier?tab=stats');
$em->refresh($order);
self::assertSame(\App\Entity\BilletBuyer::STATUS_CANCELLED, $order->getStatus());
$em->refresh($ticket);
self::assertSame(\App\Entity\BilletOrder::STATE_INVALID, $ticket->getState());
}
public function testCancelOrderDeniedForOtherUser(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$owner = $this->createUser(['ROLE_ORGANIZER'], true);
$other = $this->createUser(['ROLE_ORGANIZER'], true);
$event = $this->createEvent($em, $owner);
$order = new \App\Entity\BilletBuyer();
$order->setEvent($event);
$order->setFirstName('Test');
$order->setLastName('Test');
$order->setEmail('test@test.fr');
$order->setOrderNumber('2026-03-21-'.random_int(100, 999));
$order->setTotalHT(0);
$order->setStatus(\App\Entity\BilletBuyer::STATUS_PAID);
$em->persist($order);
$em->flush();
$client->loginUser($other);
$client->request('POST', '/mon-compte/evenement/'.$event->getId().'/commande/'.$order->getId().'/annuler');
self::assertResponseStatusCodeSame(403);
}
public function testCancelOrderNotFound(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createUser(['ROLE_ORGANIZER'], true);
$event = $this->createEvent($em, $user);
$client->loginUser($user);
$client->request('POST', '/mon-compte/evenement/'.$event->getId().'/commande/999999/annuler');
self::assertResponseStatusCodeSame(404);
}
private function createBillet(EntityManagerInterface $em, \App\Entity\Category $category, string $name = 'Test Billet', int $priceHT = 1000): \App\Entity\Billet
{
$billet = new \App\Entity\Billet();