Add missing OrderController coverage: downloadTicket, invoice success, zero qty

- downloadTicket: order not found, ticket not found, success with mock PDF
- invoice: success with mock PDF (paid order)
- create: zero qty items filtered out

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-03-21 19:03:05 +01:00
parent 7b339a7a38
commit bf6aa16e20

View File

@@ -447,4 +447,87 @@ class OrderControllerTest extends WebTestCase
$client->request('GET', '/ma-commande/'.$order->getOrderNumber().'/'.$order->getAccessToken().'/facture');
self::assertResponseStatusCodeSame(404);
}
public function testInvoiceSuccess(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createOrga($em);
[$event, $billet] = $this->createEventWithBillet($em, $user);
$order = $this->createOrder($em, $event, $billet);
$order->setStatus(BilletBuyer::STATUS_PAID);
$em->flush();
$invoiceService = $this->createMock(\App\Service\InvoiceService::class);
$invoiceService->expects(self::once())->method('generatePdf')->willReturn('%PDF-1.4 fake');
static::getContainer()->set(\App\Service\InvoiceService::class, $invoiceService);
$client->request('GET', '/ma-commande/'.$order->getOrderNumber().'/'.$order->getAccessToken().'/facture');
self::assertResponseIsSuccessful();
self::assertResponseHeaderSame('Content-Type', 'application/pdf');
}
// === DOWNLOAD TICKET ===
public function testDownloadTicketNotFoundOrder(): void
{
$client = static::createClient();
$client->request('GET', '/ma-commande/2026-03-21-999/badtoken/billet/ETICKET-AAAA-BBBB-CCCC');
self::assertResponseStatusCodeSame(404);
}
public function testDownloadTicketNotFoundTicket(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createOrga($em);
[$event, $billet] = $this->createEventWithBillet($em, $user);
$order = $this->createOrder($em, $event, $billet);
$client->request('GET', '/ma-commande/'.$order->getOrderNumber().'/'.$order->getAccessToken().'/billet/ETICKET-ZZZZ-ZZZZ-ZZZZ');
self::assertResponseStatusCodeSame(404);
}
public function testDownloadTicketSuccess(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createOrga($em);
[$event, $billet] = $this->createEventWithBillet($em, $user);
$order = $this->createOrder($em, $event, $billet);
$ticket = new \App\Entity\BilletOrder();
$ticket->setBilletBuyer($order);
$ticket->setBillet($billet);
$ticket->setBilletName('Entree');
$ticket->setUnitPriceHT(1500);
$em->persist($ticket);
$em->flush();
$billetOrderService = $this->createMock(\App\Service\BilletOrderService::class);
$billetOrderService->expects(self::once())->method('generatePdf')->willReturn('%PDF-1.4 fake');
static::getContainer()->set(\App\Service\BilletOrderService::class, $billetOrderService);
$client->request('GET', '/ma-commande/'.$order->getOrderNumber().'/'.$order->getAccessToken().'/billet/'.$ticket->getReference());
self::assertResponseIsSuccessful();
self::assertResponseHeaderSame('Content-Type', 'application/pdf');
}
// === CREATE with qty <= 0 ===
public function testCreateOrderZeroQty(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createOrga($em);
[$event, $billet] = $this->createEventWithBillet($em, $user);
$client->request('POST', '/evenement/'.$event->getId().'/commander', [], [], ['CONTENT_TYPE' => 'application/json'], json_encode([
['billetId' => $billet->getId(), 'qty' => 0],
]));
self::assertResponseIsSuccessful();
$data = json_decode($client->getResponse()->getContent(), true);
self::assertArrayHasKey('redirect', $data);
}
}