Skip to content

Commit ceabe1d

Browse files
authored
Refuse les emails sans TLD lors de l'achat de billets d'événement (#2426)
* Refuse les emails sans TLD lors de l'achat de billets d'événement * Fix PHPUnit 13 DataProvider attribute and refuse empty emails - Use the PHPUnit DataProvider attribute instead of the removed doc-comment annotation so testEmailIsValidated() receives its arguments and all provider rows actually run. - Add NotBlank next to Email on Ticket::email (and on the ticket form email field): Symfony's Email constraint skips empty values, so an empty email would otherwise stay valid. * Retire NotBlank sur l'email de billet : invalide tout achat Le formulaire d'achat pré-remplit la facture avec 15 billets vides (PurchaseType::MAX_NB_PERSONNES) ; les entrées non soumises de la collection sont validées et l'email vide violait NotBlank, ce qui invalide chaque soumission du formulaire de billetterie. La contrainte Email (mode html5 par défaut) refuse déjà les emails sans TLD et ignore les valeurs vides : l'objectif du PR est conservé. - TicketType / Ticket : retrait de NotBlank (et de son import) - TicketTest : l'email vide est désormais attendu valide (l'Email ignore les valeurs vides, sur quoi s'appuient les billets vides) - Ticketing.feature : scénario de régression sur le refus des emails sans TLD ("Cette valeur n'est pas une adresse email valide.")
1 parent 0320133 commit ceabe1d

3 files changed

Lines changed: 26 additions & 0 deletions

File tree

‎sources/AppBundle/Event/Form/TicketType.php‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
use Symfony\Component\Form\FormEvent;
2727
use Symfony\Component\Form\FormEvents;
2828
use Symfony\Component\OptionsResolver\OptionsResolver;
29+
use Symfony\Component\Validator\Constraints\Email;
2930

3031
class TicketType extends AbstractType
3132
{
@@ -70,6 +71,9 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
7071
])
7172
->add('email', EmailType::class, [
7273
'label' => 'Email',
74+
'constraints' => [
75+
new Email(),
76+
],
7377
])
7478
->add('phoneNumber', TextType::class, [
7579
'label' => 'Téléphone',

‎sources/AppBundle/Event/Model/Ticket.php‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use AppBundle\Event\Validator\Constraints as Assert;
99
use CCMBenchmark\Ting\Entity\NotifyProperty;
1010
use CCMBenchmark\Ting\Entity\NotifyPropertyInterface;
11+
use Symfony\Component\Validator\Constraints\Email;
1112

1213
#[Assert\LoggedInMember(groups: ['personal'])]
1314
#[Assert\PublicTicket(groups: ['not_logged_in'])]
@@ -134,6 +135,7 @@ class Ticket implements NotifyPropertyInterface
134135
/**
135136
* @var string
136137
*/
138+
#[Email]
137139
private $email;
138140

139141
/**

‎tests/behat/features/EventPages/Ticketing.feature‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,23 @@ Feature: Event pages - Ticketing
9595
When I press "Confirmer & Payer"
9696
Then I should see "Paiement de vos billets"
9797
And I should see "Vous serez redirigé vers notre partenaire paybox afin de procéder au paiement d'un montant de 15€"
98+
99+
@reloadDbWithTestData
100+
Scenario: Refus des emails sans TLD lors de l'achat de billets
101+
Given I am on "/event/forum/tickets"
102+
Then I should see "Billetterie: forum"
103+
And I select "0" from "purchase[paymentType]"
104+
When I fill in "purchase[tickets][0][firstname]" with "Prénom personne 1"
105+
And I fill in "purchase[tickets][0][lastname]" with "Nom personne 1"
106+
# Email de billet sans extension de domaine (pas de TLD)
107+
And I fill in "purchase[tickets][0][email]" with "personne1@hostname"
108+
And I fill in "purchase[firstname]" with "Prénom facturation"
109+
And I fill in "purchase[lastname]" with "Nom facturation"
110+
And I fill in "purchase[address]" with "42 rue de Strasbourg"
111+
And I fill in "purchase[zipcode]" with "75003"
112+
And I fill in "purchase[city]" with "PARIS"
113+
And I fill in "purchase[email]" with "facturationEntreprise@yahoo.fr"
114+
And I check "purchase[cgv]"
115+
When I press "Confirmer & Payer"
116+
Then I should see "Cette valeur n'est pas une adresse email valide."
117+
And I should not see "Paiement de vos billets"

0 commit comments

Comments
 (0)