createMock(User::class); $user->method('getCommissionRate')->willReturn($commissionRate); $user->method('getCompanyName')->willReturn('Asso Test'); $user->method('getFirstName')->willReturn('Orga'); $event = $this->createMock(Event::class); $event->method('getAccount')->willReturn($user); $event->method('getTitle')->willReturn('Event Test'); $item = $this->createMock(BilletBuyerItem::class); $item->method('getBilletName')->willReturn('Entree'); $item->method('getQuantity')->willReturn(2); $order = $this->createMock(BilletBuyer::class); $order->method('getTotalHT')->willReturn((int) ($totalHtEuros * 100)); $order->method('getEvent')->willReturn($event); $order->method('getOrderNumber')->willReturn($orderNumber); $order->method('getPaidAt')->willReturn(new \DateTimeImmutable('2026-03-15 14:30')); $order->method('getFirstName')->willReturn('Jean'); $order->method('getLastName')->willReturn('Dupont'); $order->method('getEmail')->willReturn('jean@example.com'); $order->method('getItems')->willReturn(new ArrayCollection([$item])); return $order; } public function testGenerateCsvOrga(): void { $em = $this->createMock(EntityManagerInterface::class); $twig = $this->createMock(Environment::class); $service = new ExportService($em, $twig); $order = $this->createMockOrder(50.0, 3.0); $csv = $service->generateCsv([$order], false); $lines = explode("\n", $csv); self::assertCount(2, $lines); self::assertStringContainsString('Commande', $lines[0]); self::assertStringContainsString('Net percu', $lines[0]); self::assertStringNotContainsString('Organisateur', $lines[0]); self::assertStringContainsString('2026-03-01-1', $lines[1]); self::assertStringContainsString('Jean Dupont', $lines[1]); self::assertStringContainsString('Entree x2', $lines[1]); self::assertStringContainsString('50,00', $lines[1]); } public function testGenerateCsvAdmin(): void { $em = $this->createMock(EntityManagerInterface::class); $twig = $this->createMock(Environment::class); $service = new ExportService($em, $twig); $order = $this->createMockOrder(); $csv = $service->generateCsv([$order], true); $lines = explode("\n", $csv); self::assertCount(2, $lines); self::assertStringContainsString('Organisateur', $lines[0]); self::assertStringNotContainsString('Net percu', $lines[0]); self::assertStringContainsString('Asso Test', $lines[1]); } public function testGenerateCsvEmptyOrders(): void { $em = $this->createMock(EntityManagerInterface::class); $twig = $this->createMock(Environment::class); $service = new ExportService($em, $twig); $csv = $service->generateCsv([], false); $lines = explode("\n", $csv); self::assertCount(1, $lines); self::assertStringContainsString('Commande', $lines[0]); } public function testGenerateCsvCommissionCalculation(): void { $em = $this->createMock(EntityManagerInterface::class); $twig = $this->createMock(Environment::class); $service = new ExportService($em, $twig); $order = $this->createMockOrder(100.0, 2.0); $csv = $service->generateCsv([$order], false); $lines = explode("\n", $csv); $cols = explode(';', $lines[1]); // Total HT = 100.00 self::assertSame('100,00', $cols[6]); // Com E-Ticket = 100 * 2% = 2.00 self::assertSame('2,00', $cols[7]); // Com Stripe = 100 * 1.5% + 0.25 = 1.75 self::assertSame('1,75', $cols[8]); // Net = 100 - 2 - 1.75 = 96.25 self::assertSame('96,25', $cols[9]); } public function testGenerateCsvNullCommissionRateDefaults3(): void { $em = $this->createMock(EntityManagerInterface::class); $twig = $this->createMock(Environment::class); $user = $this->createMock(User::class); $user->method('getCommissionRate')->willReturn(null); $user->method('getCompanyName')->willReturn('Test'); $event = $this->createMock(Event::class); $event->method('getAccount')->willReturn($user); $event->method('getTitle')->willReturn('Event'); $item = $this->createMock(BilletBuyerItem::class); $item->method('getBilletName')->willReturn('Billet'); $item->method('getQuantity')->willReturn(1); $order = $this->createMock(BilletBuyer::class); $order->method('getTotalHT')->willReturn(10000); $order->method('getEvent')->willReturn($event); $order->method('getOrderNumber')->willReturn('2026-03-01-2'); $order->method('getPaidAt')->willReturn(new \DateTimeImmutable()); $order->method('getFirstName')->willReturn('A'); $order->method('getLastName')->willReturn('B'); $order->method('getEmail')->willReturn('a@b.com'); $order->method('getItems')->willReturn(new ArrayCollection([$item])); $service = new ExportService($em, $twig); $csv = $service->generateCsv([$order], false); $cols = explode(';', explode("\n", $csv)[1]); // Com E-Ticket = 100 * 3% = 3.00 (default) self::assertSame('3,00', $cols[7]); } public function testGeneratePdfReturnsPdfContent(): void { $em = $this->createMock(EntityManagerInterface::class); $twig = $this->createMock(Environment::class); $twig->method('render')->willReturn('