Block organizer features when Stripe Connect account is not validated

- Hide organizer tabs (events, subaccounts, payouts) if Stripe not ready
- Redirect organizer tab content and all organizer routes to /mon-compte
- Add requireStripeReady() guard on all ROLE_ORGANIZER routes
- Force default tab to 'tickets' when Stripe is not validated
- Update test fixtures: approved organizers get Stripe enabled by default
- Add tests for blocked tabs and blocked event creation without Stripe

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-03-24 11:06:39 +01:00
parent 7d81fa3604
commit f9788adab3
3 changed files with 146 additions and 7 deletions

View File

@@ -217,7 +217,12 @@ class AccountControllerTest extends WebTestCase
public function testOrganizerWithoutStripeShowsSetupMessage(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createUser(['ROLE_ORGANIZER'], true);
$user->setStripeAccountId(null);
$user->setStripeChargesEnabled(false);
$user->setStripePayoutsEnabled(false);
$em->flush();
$client->loginUser($user);
$crawler = $client->request('GET', '/mon-compte');
@@ -232,6 +237,8 @@ class AccountControllerTest extends WebTestCase
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createUser(['ROLE_ORGANIZER'], true);
$user->setStripeAccountId('acct_pending');
$user->setStripeChargesEnabled(false);
$user->setStripePayoutsEnabled(false);
$em->flush();
$client->loginUser($user);
@@ -241,6 +248,47 @@ class AccountControllerTest extends WebTestCase
self::assertSelectorTextContains('body', 'en cours de verification');
}
public function testOrganizerWithoutStripeRedirectsFromOrganizerTabs(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createUser(['ROLE_ORGANIZER'], true);
$user->setStripeAccountId(null);
$user->setStripeChargesEnabled(false);
$user->setStripePayoutsEnabled(false);
$em->flush();
$client->loginUser($user);
$client->request('GET', '/mon-compte?tab=events');
self::assertResponseIsSuccessful();
self::assertSelectorTextContains('body', 'Configuration Stripe requise');
$client->request('GET', '/mon-compte?tab=subaccounts');
self::assertResponseIsSuccessful();
self::assertSelectorTextContains('body', 'Configuration Stripe requise');
$client->request('GET', '/mon-compte?tab=payouts');
self::assertResponseIsSuccessful();
self::assertSelectorTextContains('body', 'Configuration Stripe requise');
}
public function testOrganizerWithoutStripeBlocksEventCreation(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createUser(['ROLE_ORGANIZER'], true);
$user->setStripeAccountId(null);
$user->setStripeChargesEnabled(false);
$user->setStripePayoutsEnabled(false);
$em->flush();
$client->loginUser($user);
$client->request('GET', '/mon-compte/evenement/creer');
self::assertResponseRedirects('/mon-compte');
}
public function testOrganizerWithStripeActiveShowsSuccess(): void
{
$client = static::createClient();
@@ -2170,6 +2218,11 @@ class AccountControllerTest extends WebTestCase
if ($approved) {
$user->setIsApproved(true);
if (\in_array('ROLE_ORGANIZER', $roles, true)) {
$user->setStripeAccountId('acct_test_'.uniqid());
$user->setStripeChargesEnabled(true);
$user->setStripePayoutsEnabled(true);
}
}
$em->persist($user);