Add force validate button in admin orders + fix Stripe Connect account in sync

- Add POST /admin/commandes/{id}/forcer-validation to force validate pending
  orders (generates tickets, sends emails, notifies organizer)
- Add "Forcer validation" button in orders template for pending orders
- Fix retrievePaymentIntent to query on organizer's Connect account
- Update stripe:sync to pass organizer stripeAccountId when checking payments
- Add 3 tests for force validation (pending, non-pending, not found)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-04-01 14:22:56 +02:00
parent 02519dcfa8
commit 626510e692
5 changed files with 122 additions and 6 deletions

View File

@@ -2,8 +2,10 @@
namespace App\Tests\Controller;
use App\Entity\BilletBuyer;
use App\Entity\Event;
use App\Entity\User;
use App\Service\BilletOrderService;
use App\Service\EventIndexService;
use App\Service\MailerService;
use App\Service\MeilisearchService;
@@ -743,6 +745,89 @@ class AdminControllerTest extends WebTestCase
self::assertResponseIsSuccessful();
}
public function testForceValidateOrderPending(): void
{
$client = static::createClient();
$admin = $this->createUser(['ROLE_ROOT']);
$em = static::getContainer()->get(EntityManagerInterface::class);
$organizer = $this->createUser(['ROLE_ORGANIZER']);
$event = new Event();
$event->setTitle('Test Event Force');
$event->setAccount($organizer);
$event->setStartAt(new \DateTimeImmutable('+1 day'));
$event->setEndAt(new \DateTimeImmutable('+2 days'));
$event->setAddress('1 rue test');
$event->setZipcode('75001');
$event->setCity('Paris');
$em->persist($event);
$order = new BilletBuyer();
$order->setEvent($event);
$order->setEmail('buyer@test.fr');
$order->setFirstName('Jean');
$order->setLastName('Test');
$order->setStatus(BilletBuyer::STATUS_PENDING);
$em->persist($order);
$em->flush();
$billetOrderService = $this->createMock(BilletOrderService::class);
$billetOrderService->expects(self::once())->method('generateOrderTickets');
$billetOrderService->expects(self::once())->method('generateAndSendTickets');
$billetOrderService->expects(self::once())->method('notifyOrganizer');
static::getContainer()->set(BilletOrderService::class, $billetOrderService);
$client->loginUser($admin);
$client->request('POST', '/admin/commandes/'.$order->getId().'/forcer-validation');
self::assertResponseRedirects('/admin/commandes');
}
public function testForceValidateOrderNonPendingFails(): void
{
$client = static::createClient();
$admin = $this->createUser(['ROLE_ROOT']);
$em = static::getContainer()->get(EntityManagerInterface::class);
$organizer = $this->createUser(['ROLE_ORGANIZER']);
$event = new Event();
$event->setTitle('Test Event Paid');
$event->setAccount($organizer);
$event->setStartAt(new \DateTimeImmutable('+1 day'));
$event->setEndAt(new \DateTimeImmutable('+2 days'));
$event->setAddress('1 rue test');
$event->setZipcode('75001');
$event->setCity('Paris');
$em->persist($event);
$order = new BilletBuyer();
$order->setEvent($event);
$order->setEmail('buyer2@test.fr');
$order->setFirstName('Pierre');
$order->setLastName('Test');
$order->setStatus(BilletBuyer::STATUS_PAID);
$em->persist($order);
$em->flush();
$client->loginUser($admin);
$client->request('POST', '/admin/commandes/'.$order->getId().'/forcer-validation');
self::assertResponseRedirects('/admin/commandes');
}
public function testForceValidateOrderNotFound(): void
{
$client = static::createClient();
$admin = $this->createUser(['ROLE_ROOT']);
$client->loginUser($admin);
$client->request('POST', '/admin/commandes/999999/forcer-validation');
self::assertResponseStatusCodeSame(404);
}
public function testLogsPage(): void
{
$client = static::createClient();